1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# 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
|