summaryrefslogtreecommitdiff
path: root/qa/qa/page/merge_request/show.rb
blob: 976e431186d08a4dd9cdddf1b37bf21baff953e8 (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# frozen_string_literal: true

module QA
  module Page
    module MergeRequest
      class Show < Page::Base
        include Page::Component::Note

        view 'app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue' do
          element :merge_button
          element :fast_forward_message, 'Fast-forward merge without a merge commit' # rubocop:disable QA/ElementWithPattern
          element :merge_moment_dropdown
          element :merge_when_pipeline_succeeds_option
          element :merge_immediately_option
        end

        view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_merged.vue' do
          element :merged_status, 'The changes were merged into' # rubocop:disable QA/ElementWithPattern
        end

        view 'app/assets/javascripts/vue_merge_request_widget/components/states/mr_widget_rebase.vue' do
          element :mr_rebase_button
          element :no_fast_forward_message, 'Fast-forward merge is not possible' # rubocop:disable QA/ElementWithPattern
        end

        view 'app/assets/javascripts/vue_merge_request_widget/components/states/squash_before_merge.vue' do
          element :squash_checkbox
        end

        view 'app/views/projects/merge_requests/show.html.haml' do
          element :notes_tab
          element :diffs_tab
        end

        view 'app/assets/javascripts/diffs/components/diff_line_gutter_content.vue' do
          element :diff_comment
        end

        view 'app/assets/javascripts/diffs/components/inline_diff_table_row.vue' do
          element :new_diff_line
        end

        view 'app/views/shared/issuable/_sidebar.html.haml' do
          element :assignee_block
          element :labels_block
        end

        view 'app/views/projects/merge_requests/_mr_title.html.haml' do
          element :edit_button
        end

        def fast_forward_possible?
          has_no_text?('Fast-forward merge is not possible')
        end

        def has_merge_button?
          refresh

          has_element?(:merge_button)
        end

        def has_merge_options?
          has_element?(:merge_moment_dropdown)
        end

        def merge_immediately
          if has_merge_options?
            click_element :merge_moment_dropdown
            click_element :merge_immediately_option
          else
            click_element :merge_button
          end
        end

        def rebase!
          # The rebase button is disabled on load
          wait do
            has_element?(:mr_rebase_button)
          end

          # The rebase button is enabled via JS
          wait(reload: false) do
            !find_element(:mr_rebase_button).disabled?
          end

          click_element :mr_rebase_button

          success = wait do
            has_text?('Fast-forward merge without a merge commit')
          end

          raise "Rebase did not appear to be successful" unless success
        end

        def has_assignee?(username)
          page.within(element_selector_css(:assignee_block)) do
            has_text?(username)
          end
        end

        def has_label?(label)
          page.within(element_selector_css(:labels_block)) do
            element = find('span', text: label)
            !element.nil?
          end
        end

        def merge!
          # The merge button is disabled on load
          wait do
            has_element?(:merge_button)
          end

          # The merge button is enabled via JS
          wait(reload: false) do
            !find_element(:merge_button).disabled?
          end

          merge_immediately

          success = wait do
            has_text?('The changes were merged into')
          end

          raise "Merge did not appear to be successful" unless success
        end

        def mark_to_squash
          # The squash checkbox is disabled on load
          wait do
            has_element?(:squash_checkbox)
          end

          # The squash checkbox is enabled via JS
          wait(reload: false) do
            !find_element(:squash_checkbox).disabled?
          end

          click_element :squash_checkbox
        end

        def go_to_discussions_tab
          click_element :notes_tab
        end

        def go_to_diffs_tab
          click_element :diffs_tab
        end

        def add_comment_to_diff(text)
          wait(interval: 5) do
            has_text?("No newline at end of file")
          end
          all_elements(:new_diff_line).first.hover
          click_element :diff_comment
          fill_element :reply_input, text
        end

        def edit!
          click_element :edit_button
        end
      end
    end
  end
end