summaryrefslogtreecommitdiff
path: root/spec/factories/events.rb
blob: 403165a393510df00df25839bed8b33c050f70fa (plain)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# frozen_string_literal: true

FactoryBot.define do
  factory :event do
    project
    author(factory: :user) { project.creator }
    action { :joined }

    trait(:created)   { action { :created } }
    trait(:updated)   { action { :updated } }
    trait(:closed)    { action { :closed } }
    trait(:reopened)  { action { :reopened } }
    trait(:pushed)    { action { :pushed } }
    trait(:commented) { action { :commented } }
    trait(:merged)    { action { :merged } }
    trait(:joined)    { action { :joined } }
    trait(:left)      { action { :left } }
    trait(:destroyed) { action { :destroyed } }
    trait(:expired)   { action { :expired } }
    trait(:approved)  { action { :approved } }

    factory :closed_issue_event do
      action { :closed }
      target { association(:closed_issue, project: project) }
    end

    factory :wiki_page_event do
      action { :created }
      # rubocop: disable FactoryBot/InlineAssociation
      # A persistent project is needed to have a wiki page being created properly.
      project { @overrides[:wiki_page]&.container || create(:project, :wiki_repo) }
      # rubocop: enable FactoryBot/InlineAssociation
      target { association(:wiki_page_meta, :for_wiki_page, wiki_page: wiki_page) }

      transient do
        wiki_page { association(:wiki_page, container: project) }
      end
    end

    trait :has_design do
      transient do
        design { association(:design, issue: association(:issue, project: project)) }
      end
    end

    trait :for_design do
      has_design

      transient do
        note { association(:note, author: author, project: project, noteable: design) }
      end

      action { :commented }
      target { note }
    end

    factory :design_event, traits: [:has_design] do
      action { :created }
      target { design }
    end

    factory :design_updated_event, traits: [:has_design] do
      action { :updated }
      target { design }
    end

    factory :project_created_event do
      project factory: :project
      action { :created }
    end

    factory :project_imported_event do
      project factory: [:project, :with_import_url]
      action { :created }
    end
  end

  factory :push_event, class: 'PushEvent' do
    project factory: :project_empty_repo
    author(factory: :user) { project.creator }
    action { :pushed }
  end

  factory :push_event_payload do
    event
    commit_count { 1 }
    action { :pushed }
    ref_type { :branch }
    ref { 'master' }
    commit_to { '3cdce97ed87c91368561584e7358f4d46e3e173c' }
  end
end