77 lines
1.8 KiB
Ruby
77 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'ostruct'
|
|
|
|
FactoryBot.define do
|
|
factory :wiki_page do
|
|
transient do
|
|
title { generate(:wiki_page_title) }
|
|
content { 'Content for wiki page' }
|
|
format { 'markdown' }
|
|
project { create(:project) }
|
|
attrs do
|
|
{
|
|
title: title,
|
|
content: content,
|
|
format: format
|
|
}
|
|
end
|
|
end
|
|
|
|
page { OpenStruct.new(url_path: 'some-name') }
|
|
wiki { build(:project_wiki, project: project) }
|
|
|
|
initialize_with { new(wiki, page) }
|
|
|
|
before(:create) do |page, evaluator|
|
|
page.attributes = evaluator.attrs
|
|
end
|
|
|
|
to_create do |page|
|
|
page.create
|
|
end
|
|
|
|
trait :with_real_page do
|
|
project { create(:project, :repository) }
|
|
|
|
page do
|
|
wiki.create_page(title, content)
|
|
page_title, page_dir = wiki.page_title_and_dir(title)
|
|
wiki.wiki.page(title: page_title, dir: page_dir, version: nil)
|
|
end
|
|
end
|
|
end
|
|
|
|
factory :wiki_page_meta, class: 'WikiPage::Meta' do
|
|
title { generate(:wiki_page_title) }
|
|
project { create(:project) }
|
|
|
|
trait :for_wiki_page do
|
|
transient do
|
|
wiki_page { create(:wiki_page, project: project) }
|
|
end
|
|
|
|
project { @overrides[:wiki_page]&.project || create(:project) }
|
|
title { wiki_page.title }
|
|
|
|
initialize_with do
|
|
raise 'Metadata only available for valid pages' unless wiki_page.valid?
|
|
|
|
WikiPage::Meta.find_or_create(wiki_page.slug, wiki_page)
|
|
end
|
|
end
|
|
end
|
|
|
|
factory :wiki_page_slug, class: 'WikiPage::Slug' do
|
|
wiki_page_meta { create(:wiki_page_meta) }
|
|
slug { generate(:sluggified_title) }
|
|
canonical { false }
|
|
|
|
trait :canonical do
|
|
canonical { true }
|
|
end
|
|
end
|
|
|
|
sequence(:wiki_page_title) { |n| "Page #{n}" }
|
|
sequence(:sluggified_title) { |n| "slug-#{n}" }
|
|
end
|