debian-mirror-gitlab/spec/factories/wiki_pages.rb
2023-03-17 16:20:25 +05:30

74 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