# 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