summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/models/concerns/has_wiki_shared_examples.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/shared_examples/models/concerns/has_wiki_shared_examples.rb')
-rw-r--r--spec/support/shared_examples/models/concerns/has_wiki_shared_examples.rb79
1 files changed, 79 insertions, 0 deletions
diff --git a/spec/support/shared_examples/models/concerns/has_wiki_shared_examples.rb b/spec/support/shared_examples/models/concerns/has_wiki_shared_examples.rb
new file mode 100644
index 00000000000..0357b7462fb
--- /dev/null
+++ b/spec/support/shared_examples/models/concerns/has_wiki_shared_examples.rb
@@ -0,0 +1,79 @@
+# frozen_string_literal: true
+
+RSpec.shared_examples 'model with wiki' do
+ describe '#create_wiki' do
+ it 'returns true if the wiki repository already exists' do
+ expect(container.wiki_repository_exists?).to be(true)
+ expect(container.create_wiki).to be(true)
+ end
+
+ it 'returns true if the wiki repository was created' do
+ expect(container_without_wiki.wiki_repository_exists?).to be(false)
+ expect(container_without_wiki.create_wiki).to be(true)
+ expect(container_without_wiki.wiki_repository_exists?).to be(true)
+ end
+
+ context 'when the repository cannot be created' do
+ before do
+ expect(container.wiki).to receive(:wiki) { raise Wiki::CouldNotCreateWikiError }
+ end
+
+ it 'returns false and adds a validation error' do
+ expect(container.create_wiki).to be(false)
+ expect(container.errors[:base]).to contain_exactly('Failed to create wiki')
+ end
+ end
+ end
+
+ describe '#wiki_repository_exists?' do
+ it 'returns true when the wiki repository exists' do
+ expect(container.wiki_repository_exists?).to eq(true)
+ end
+
+ it 'returns false when the wiki repository does not exist' do
+ expect(container_without_wiki.wiki_repository_exists?).to eq(false)
+ end
+ end
+
+ describe 'wiki path conflict' do
+ context 'when the new path has been used by the wiki of other Project' do
+ it 'has an error on the name attribute' do
+ create(:project, namespace: container.parent, path: 'existing')
+ container.path = 'existing.wiki'
+
+ expect(container).not_to be_valid
+ expect(container.errors[:name].first).to eq(_('has already been taken'))
+ end
+ end
+
+ context 'when the new wiki path has been used by the path of other Project' do
+ it 'has an error on the name attribute' do
+ create(:project, namespace: container.parent, path: 'existing.wiki')
+ container.path = 'existing'
+
+ expect(container).not_to be_valid
+ expect(container.errors[:name].first).to eq(_('has already been taken'))
+ end
+ end
+
+ context 'when the new path has been used by the wiki of other Group' do
+ it 'has an error on the name attribute' do
+ create(:group, parent: container.parent, path: 'existing')
+ container.path = 'existing.wiki'
+
+ expect(container).not_to be_valid
+ expect(container.errors[:name].first).to eq(_('has already been taken'))
+ end
+ end
+
+ context 'when the new wiki path has been used by the path of other Group' do
+ it 'has an error on the name attribute' do
+ create(:group, parent: container.parent, path: 'existing.wiki')
+ container.path = 'existing'
+
+ expect(container).not_to be_valid
+ expect(container.errors[:name].first).to eq(_('has already been taken'))
+ end
+ end
+ end
+end