Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/wiki_directory_spec.rb')
-rw-r--r--spec/models/wiki_directory_spec.rb187
1 files changed, 1 insertions, 186 deletions
diff --git a/spec/models/wiki_directory_spec.rb b/spec/models/wiki_directory_spec.rb
index aff21888605..5fbcccf897e 100644
--- a/spec/models/wiki_directory_spec.rb
+++ b/spec/models/wiki_directory_spec.rb
@@ -1,94 +1,14 @@
# frozen_string_literal: true
require 'spec_helper'
-require 'set'
RSpec.describe WikiDirectory do
- include GitHelpers
-
- let(:project) { create(:project, :wiki_repo) }
- let(:user) { project.owner }
- let(:wiki) { ProjectWiki.new(project, user) }
-
describe 'validations' do
subject { build(:wiki_directory) }
it { is_expected.to validate_presence_of(:slug) }
end
- describe '.group_by_directory' do
- context 'when there are no pages' do
- it 'returns an empty array' do
- expect(described_class.group_by_directory(nil)).to eq([])
- expect(described_class.group_by_directory([])).to eq([])
- end
- end
-
- context 'when there are pages' do
- before do
- create_page('dir_1/dir_1_1/page_3', 'content')
- create_page('page_1', 'content')
- create_page('dir_1/page_2', 'content')
- create_page('dir_2', 'page with dir name')
- create_page('dir_2/page_5', 'content')
- create_page('page_6', 'content')
- create_page('dir_2/page_4', 'content')
- end
-
- let(:page_1) { wiki.find_page('page_1') }
- let(:page_6) { wiki.find_page('page_6') }
- let(:page_dir_2) { wiki.find_page('dir_2') }
-
- let(:dir_1) do
- described_class.new('dir_1', [wiki.find_page('dir_1/page_2')])
- end
- let(:dir_1_1) do
- described_class.new('dir_1/dir_1_1', [wiki.find_page('dir_1/dir_1_1/page_3')])
- end
- let(:dir_2) do
- pages = [wiki.find_page('dir_2/page_5'),
- wiki.find_page('dir_2/page_4')]
- described_class.new('dir_2', pages)
- end
-
- context "#list_pages" do
- shared_examples "a correct grouping" do
- let(:grouped_slugs) { grouped_entries.map(&method(:slugs)) }
- let(:expected_slugs) { expected_grouped_entries.map(&method(:slugs)).map(&method(:match_array)) }
-
- it 'returns an array with pages and directories' do
- expect(grouped_slugs).to match_array(expected_slugs)
- end
- end
-
- context 'sort by title' do
- let(:grouped_entries) { described_class.group_by_directory(wiki.list_pages) }
-
- let(:expected_grouped_entries) { [dir_1_1, dir_1, page_dir_2, dir_2, page_1, page_6] }
-
- it_behaves_like "a correct grouping"
- end
-
- context 'sort by created_at' do
- let(:grouped_entries) { described_class.group_by_directory(wiki.list_pages(sort: 'created_at')) }
- let(:expected_grouped_entries) { [dir_1_1, page_1, dir_1, page_dir_2, dir_2, page_6] }
-
- it_behaves_like "a correct grouping"
- end
-
- it 'returns an array with retained order with directories at the top' do
- expected_order = ['dir_1/dir_1_1/page_3', 'dir_1/page_2', 'dir_2', 'dir_2/page_4', 'dir_2/page_5', 'page_1', 'page_6']
-
- grouped_entries = described_class.group_by_directory(wiki.list_pages)
-
- actual_order = grouped_entries.flat_map(&method(:slugs))
-
- expect(actual_order).to eq(expected_order)
- end
- end
- end
- end
-
describe '#initialize' do
context 'when there are pages' do
let(:pages) { [build(:wiki_page)] }
@@ -120,112 +40,7 @@ RSpec.describe WikiDirectory do
it 'returns the relative path to the partial to be used' do
directory = build(:wiki_directory)
- expect(directory.to_partial_path).to eq('projects/wiki_directories/wiki_directory')
- end
- end
-
- describe 'attributes' do
- def page_path(index)
- "dir-path/page-#{index}"
- end
-
- let(:page_paths) { (1..3).map { |n| page_path(n) } }
-
- let(:pages) do
- page_paths.map { |p| wiki.find_page(p) }
+ expect(directory.to_partial_path).to eq('projects/wikis/wiki_directory')
end
-
- subject { described_class.new('dir-path', pages) }
-
- context 'there are no pages' do
- let(:pages) { [] }
-
- it { is_expected.to have_attributes(page_count: 0, last_version: be_nil) }
- end
-
- context 'there is one page' do
- before do
- create_page("dir-path/singleton", "Just this page")
- end
-
- let(:the_page) { wiki.find_page("dir-path/singleton") }
- let(:pages) { [the_page] }
-
- it { is_expected.to have_attributes(page_count: 1, last_version: the_page.last_version) }
- end
-
- context 'there are a few pages, each with a single version' do
- before do
- page_paths.each_with_index do |path, n|
- Timecop.freeze(Time.local(1990) + n.minutes) do
- create_page(path, "this is page #{n}")
- end
- end
- end
-
- let(:expected_last_version) { pages.last.last_version }
-
- it { is_expected.to have_attributes(page_count: 3, last_version: expected_last_version) }
- end
-
- context 'there are a few pages, each with a few versions' do
- before do
- page_paths.each_with_index do |path, n|
- t = Time.local(1990) + n.minutes
- Timecop.freeze(t) do
- create_page(path, "This is page #{n}")
- (2..3).each do |v|
- Timecop.freeze(t + v.seconds) do
- update_page(path, "Now at version #{v}")
- end
- end
- end
- end
- end
-
- it { is_expected.to have_attributes(page_count: 3, last_version: pages.last.last_version) }
- end
- end
-
- private
-
- def create_page(name, content)
- wiki.wiki.write_page(name, :markdown, content, commit_details)
- set_time(name)
- end
-
- def update_page(name, content)
- wiki.wiki.update_page(name, name, :markdown, content, update_commit_details)
- set_time(name)
- end
-
- def set_time(name)
- return unless Timecop.frozen?
-
- new_date = Time.now
- page = wiki.find_page(name).page
- commit = page.version.commit
- repo = commit.instance_variable_get(:@repository)
-
- rug_commit = rugged_repo_at_path(repo.relative_path).lookup(commit.id)
- rug_commit.amend(
- message: rug_commit.message,
- tree: rug_commit.tree,
- author: rug_commit.author.merge(time: new_date),
- committer: rug_commit.committer.merge(time: new_date),
- update_ref: 'HEAD'
- )
- end
-
- def commit_details
- Gitlab::Git::Wiki::CommitDetails.new(user.id, user.username, user.name, user.email, "test commit")
- end
-
- def update_commit_details
- Gitlab::Git::Wiki::CommitDetails.new(user.id, user.username, user.name, user.email, "test update")
- end
-
- def slugs(thing)
- Array.wrap(thing.respond_to?(:pages) ? thing.pages.map(&:slug) : thing.slug)
end
end