73 lines
1.9 KiB
Ruby
73 lines
1.9 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 }
|
|
message { nil }
|
|
project { association(:project) }
|
|
container { project }
|
|
wiki { association(:wiki, container: container) }
|
|
page { OpenStruct.new(url_path: title) }
|
|
end
|
|
|
|
initialize_with do
|
|
new(wiki, page).tap do |page|
|
|
page.attributes = {
|
|
slug: title&.tr(' ', '-'),
|
|
title: title,
|
|
content: content,
|
|
format: format
|
|
}
|
|
end
|
|
end
|
|
|
|
# Clear our default @page, except when using build_stubbed
|
|
after(:build) do |page|
|
|
page.instance_variable_set('@page', nil)
|
|
end
|
|
|
|
to_create do |page, evaluator|
|
|
# WikiPages is ActiveModel which doesn't support `create!`.
|
|
page.create(message: evaluator.message) # rubocop:disable Rails/SaveBang
|
|
end
|
|
end
|
|
|
|
factory :wiki_page_meta, class: 'WikiPage::Meta' do
|
|
title { generate(:wiki_page_title) }
|
|
project { association(:project) }
|
|
|
|
trait :for_wiki_page do
|
|
transient do
|
|
wiki_page { association(:wiki_page, container: project) }
|
|
end
|
|
|
|
project { @overrides[:wiki_page]&.container || association(: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 { association(:wiki_page_meta) }
|
|
slug { generate(:sluggified_title) }
|
|
canonical { false }
|
|
|
|
trait :canonical do
|
|
canonical { true }
|
|
end
|
|
end
|
|
|
|
sequence(:wiki_page_title) { |n| "Page #{n}" }
|
|
sequence(:wiki_filename) { |n| "Page_#{n}.md" }
|
|
sequence(:sluggified_title) { |n| "slug-#{n}" }
|
|
end
|