summaryrefslogtreecommitdiff
path: root/spec/support/shared_examples/models/wiki_shared_examples.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/shared_examples/models/wiki_shared_examples.rb')
-rw-r--r--spec/support/shared_examples/models/wiki_shared_examples.rb85
1 files changed, 82 insertions, 3 deletions
diff --git a/spec/support/shared_examples/models/wiki_shared_examples.rb b/spec/support/shared_examples/models/wiki_shared_examples.rb
index b87f7fe97e1..62da9e15259 100644
--- a/spec/support/shared_examples/models/wiki_shared_examples.rb
+++ b/spec/support/shared_examples/models/wiki_shared_examples.rb
@@ -4,21 +4,99 @@ RSpec.shared_examples 'wiki model' do
let_it_be(:user) { create(:user, :commit_email) }
let(:wiki_container) { raise NotImplementedError }
let(:wiki_container_without_repo) { raise NotImplementedError }
+ let(:wiki_lfs_enabled) { false }
let(:wiki) { described_class.new(wiki_container, user) }
let(:commit) { subject.repository.head_commit }
subject { wiki }
+ it 'container class includes HasWiki' do
+ # NOTE: This is not enforced at runtime, since we also need to support Geo::DeletedProject
+ expect(wiki_container).to be_kind_of(HasWiki)
+ expect(wiki_container_without_repo).to be_kind_of(HasWiki)
+ end
+
it_behaves_like 'model with repository' do
let(:container) { wiki }
let(:stubbed_container) { described_class.new(wiki_container_without_repo, user) }
let(:expected_full_path) { "#{container.container.full_path}.wiki" }
let(:expected_web_url_path) { "#{container.container.web_url(only_path: true).sub(%r{^/}, '')}/-/wikis/home" }
+ let(:expected_lfs_enabled) { wiki_lfs_enabled }
+ end
+
+ describe '.container_class' do
+ it 'is set to the container class' do
+ expect(described_class.container_class).to eq(wiki_container.class)
+ end
+ end
+
+ describe '.find_by_id' do
+ it 'returns a wiki instance if the container is found' do
+ wiki = described_class.find_by_id(wiki_container.id)
+
+ expect(wiki).to be_a(described_class)
+ expect(wiki.container).to eq(wiki_container)
+ end
+
+ it 'returns nil if the container is not found' do
+ expect(described_class.find_by_id(-1)).to be_nil
+ end
+ end
+
+ describe '#initialize' do
+ it 'accepts a valid user' do
+ expect do
+ described_class.new(wiki_container, user)
+ end.not_to raise_error
+ end
+
+ it 'accepts a blank user' do
+ expect do
+ described_class.new(wiki_container, nil)
+ end.not_to raise_error
+ end
+
+ it 'raises an error for invalid users' do
+ expect do
+ described_class.new(wiki_container, Object.new)
+ end.to raise_error(ArgumentError, 'user must be a User, got Object')
+ end
+ end
+
+ describe '#run_after_commit' do
+ it 'delegates to the container' do
+ expect(wiki_container).to receive(:run_after_commit)
+
+ wiki.run_after_commit
+ end
+ end
+
+ describe '#==' do
+ it 'returns true for wikis from the same container' do
+ expect(wiki).to eq(described_class.new(wiki_container))
+ end
+
+ it 'returns false for wikis from different containers' do
+ expect(wiki).not_to eq(described_class.new(wiki_container_without_repo))
+ end
+ end
+
+ describe '#id' do
+ it 'returns the ID of the container' do
+ expect(wiki.id).to eq(wiki_container.id)
+ end
+ end
+
+ describe '#to_global_id' do
+ it 'returns a global ID' do
+ expect(wiki.to_global_id.to_s).to eq("gid://gitlab/#{wiki.class.name}/#{wiki.id}")
+ end
end
describe '#repository' do
it 'returns a wiki repository' do
expect(subject.repository.repo_type).to be_wiki
+ expect(subject.repository.container).to be(subject)
end
end
@@ -164,7 +242,7 @@ RSpec.shared_examples 'wiki model' do
def total_pages(entries)
entries.sum do |entry|
- entry.is_a?(WikiDirectory) ? entry.pages.size : 1
+ entry.is_a?(WikiDirectory) ? total_pages(entry.entries) : 1
end
end
@@ -204,8 +282,9 @@ RSpec.shared_examples 'wiki model' do
expect(page.title).to eq('index page')
end
- it 'returns nil if the page does not exist' do
- expect(subject.find_page('non-existent')).to eq(nil)
+ it 'returns nil if the page or version does not exist' do
+ expect(subject.find_page('non-existent')).to be_nil
+ expect(subject.find_page('index page', 'non-existent')).to be_nil
end
it 'can find a page by slug' do