diff options
Diffstat (limited to 'spec/models/wiki_page/slug_spec.rb')
-rw-r--r-- | spec/models/wiki_page/slug_spec.rb | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/spec/models/wiki_page/slug_spec.rb b/spec/models/wiki_page/slug_spec.rb new file mode 100644 index 00000000000..324dea6b320 --- /dev/null +++ b/spec/models/wiki_page/slug_spec.rb @@ -0,0 +1,94 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe WikiPage::Slug do + let_it_be(:meta) { create(:wiki_page_meta) } + + describe 'Associations' do + it { is_expected.to belong_to(:wiki_page_meta) } + + it 'refers correctly to the wiki_page_meta' do + created = create(:wiki_page_slug, wiki_page_meta: meta) + + expect(created.reload.wiki_page_meta).to eq(meta) + end + end + + describe 'scopes' do + describe 'canonical' do + subject { described_class.canonical } + + context 'there are no slugs' do + it { is_expected.to be_empty } + end + + context 'there are some non-canonical slugs' do + before do + create(:wiki_page_slug) + end + + it { is_expected.to be_empty } + end + + context 'there is at least one canonical slugs' do + before do + create(:wiki_page_slug, :canonical) + end + + it { is_expected.not_to be_empty } + end + end + end + + describe 'Validations' do + let(:canonical) { false } + + subject do + build(:wiki_page_slug, canonical: canonical, wiki_page_meta: meta) + end + + it { is_expected.to validate_presence_of(:slug) } + it { is_expected.to validate_uniqueness_of(:slug).scoped_to(:wiki_page_meta_id) } + + describe 'only_one_slug_can_be_canonical_per_meta_record' do + context 'there are no other slugs' do + it { is_expected.to be_valid } + + context 'the current slug is canonical' do + let(:canonical) { true } + + it { is_expected.to be_valid } + end + end + + context 'there are other slugs, but they are not canonical' do + before do + create(:wiki_page_slug, wiki_page_meta: meta) + end + + it { is_expected.to be_valid } + + context 'the current slug is canonical' do + let(:canonical) { true } + + it { is_expected.to be_valid } + end + end + + context 'there is already a canonical slug' do + before do + create(:wiki_page_slug, canonical: true, wiki_page_meta: meta) + end + + it { is_expected.to be_valid } + + context 'the current slug is canonical' do + let(:canonical) { true } + + it { is_expected.not_to be_valid } + end + end + end + end +end |