discussion_comments_shared_example.rb 8.5 KB
Newer Older
L
Luke "Jared" Bennett 已提交
1 2 3 4 5 6 7
shared_examples 'discussion comments' do |resource_name|
  let(:form_selector) { '.js-main-target-form' }
  let(:dropdown_selector) { "#{form_selector} .comment-type-dropdown" }
  let(:toggle_selector) { "#{dropdown_selector} .dropdown-toggle" }
  let(:menu_selector) { "#{dropdown_selector} .dropdown-menu" }
  let(:submit_selector) { "#{form_selector} .js-comment-submit-button" }
  let(:close_selector) { "#{form_selector} .btn-comment-and-close" }
L
Luke "Jared" Bennett 已提交
8
  let(:comments_selector) { '.timeline > .note.timeline-entry' }
L
Luke "Jared" Bennett 已提交
9

10
  it 'clicking "Comment" will post a comment' do
L
Luke "Jared" Bennett 已提交
11 12
    expect(page).to have_selector toggle_selector

13
    find("#{form_selector} .note-textarea").send_keys('a')
F
Filipa Lacerda 已提交
14

15 16
    find(submit_selector).click

17 18
    wait_for_requests

L
Luke "Jared" Bennett 已提交
19 20
    find(comments_selector, match: :first)
    new_comment = all(comments_selector).last
21 22 23 24 25

    expect(new_comment).to have_content 'a'
    expect(new_comment).not_to have_selector '.discussion'
  end

26
  if resource_name == 'issue'
L
Luke "Jared" Bennett 已提交
27
    it "clicking 'Comment & close #{resource_name}' will post a comment and close the #{resource_name}" do
28 29 30
      find("#{form_selector} .note-textarea").send_keys('a')

      find(close_selector).click
31
      wait_for_requests
32

L
Luke "Jared" Bennett 已提交
33 34 35
      find(comments_selector, match: :first)
      find("#{comments_selector}.system-note")
      entries = all(comments_selector)
36 37 38 39 40 41 42 43
      close_note = entries.last
      new_comment = entries[-2]

      expect(close_note).to have_content 'closed'
      expect(new_comment).not_to have_selector '.discussion'
    end
  end

L
Luke "Jared" Bennett 已提交
44 45 46 47 48 49 50
  describe 'when the toggle is clicked' do
    before do
      find("#{form_selector} .note-textarea").send_keys('a')

      find(toggle_selector).click
    end

51
    it 'has a "Comment" item (selected by default) and "Start discussion" item' do
L
Luke "Jared" Bennett 已提交
52 53
      expect(page).to have_selector menu_selector

54
      find("#{menu_selector} li", match: :first)
L
Luke "Jared" Bennett 已提交
55 56 57
      items = all("#{menu_selector} li")

      expect(items.first).to have_content 'Comment'
58
      expect(items.first).to have_content "Add a general comment to this #{resource_name}."
L
Luke "Jared" Bennett 已提交
59
      expect(items.first).to have_selector '.fa-check'
60
      expect(items.first['class']).to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
61 62

      expect(items.last).to have_content 'Start discussion'
63
      expect(items.last).to have_content "Discuss a specific suggestion or question#{' that needs to be resolved' if resource_name == 'merge request'}."
L
Luke "Jared" Bennett 已提交
64
      expect(items.last).not_to have_selector '.fa-check'
65
      expect(items.last['class']).not_to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
66 67
    end

68
    it 'closes the menu when clicking the toggle or body' do
L
Luke "Jared" Bennett 已提交
69 70 71 72
      find(toggle_selector).click

      expect(page).not_to have_selector menu_selector

73
      find(toggle_selector).click
F
Felipe Artur 已提交
74
      find('body').trigger 'click'
L
Luke "Jared" Bennett 已提交
75 76 77 78

      expect(page).not_to have_selector menu_selector
    end

F
Filipa Lacerda 已提交
79
    it 'clicking the ul padding or divider should not change the text' do
J
Jarka Kadlecova 已提交
80 81
      find(menu_selector).trigger 'click'

82 83
      if resource_name == 'issue'
        expect(find(dropdown_selector)).to have_content 'Comment'
L
Luke "Jared" Bennett 已提交
84

85 86 87 88
        find(toggle_selector).click
        find("#{menu_selector} .divider").trigger 'click'
      else
        find(menu_selector).trigger 'click'
89

90 91
        expect(page).to have_selector menu_selector
        expect(find(dropdown_selector)).to have_content 'Comment'
92

93 94 95 96
        find("#{menu_selector} .divider").trigger 'click'

        expect(page).to have_selector menu_selector
      end
J
Jarka Kadlecova 已提交
97 98

      expect(find(dropdown_selector)).to have_content 'Comment'
F
Filipa Lacerda 已提交
99
    end
L
Luke "Jared" Bennett 已提交
100

L
Luke "Jared" Bennett 已提交
101 102
    describe 'when selecting "Start discussion"' do
      before do
103
        find("#{menu_selector} li", match: :first)
L
Luke "Jared" Bennett 已提交
104
        all("#{menu_selector} li").last.click
L
Luke "Jared" Bennett 已提交
105 106
      end

107
      it 'updates the submit button text and closes the dropdown' do
108
        expect(find(dropdown_selector)).to have_content 'Start discussion'
109
        expect(page).not_to have_selector menu_selector
L
Luke "Jared" Bennett 已提交
110 111 112 113 114 115
      end

      if resource_name =~ /(issue|merge request)/
        it 'updates the close button text' do
          expect(find(close_selector)).to have_content "Start discussion & close #{resource_name}"
        end
L
Luke "Jared" Bennett 已提交
116 117 118 119 120 121

        it 'typing does not change the close button text' do
          find("#{form_selector} .note-textarea").send_keys('b')

          expect(find(close_selector)).to have_content "Start discussion & close #{resource_name}"
        end
L
Luke "Jared" Bennett 已提交
122 123
      end

124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
      describe 'creating a discussion' do
        before do
          find(submit_selector).click
          find(comments_selector, match: :first)
        end

        it 'clicking "Start discussion" will post a discussion' do
          new_comment = all(comments_selector).last

          expect(new_comment).to have_content 'a'
          expect(new_comment).to have_selector '.discussion'
        end

        if resource_name == 'merge request'
          it 'shows resolved discussion when toggled' do
            click_button "Resolve discussion"
L
Luke "Jared" Bennett 已提交
140

141
            expect(page).to have_selector('.note-row-1', visible: true)
L
Luke "Jared" Bennett 已提交
142

143 144 145 146 147 148
            refresh
            click_button "Toggle discussion"

            expect(page).to have_selector('.note-row-1', visible: true)
          end
        end
L
Luke "Jared" Bennett 已提交
149 150
      end

151
      if resource_name == 'issue'
L
Luke "Jared" Bennett 已提交
152
        it "clicking 'Start discussion & close #{resource_name}' will post a discussion and close the #{resource_name}" do
L
Luke "Jared" Bennett 已提交
153 154
          find(close_selector).click

L
Luke "Jared" Bennett 已提交
155 156 157
          find(comments_selector, match: :first)
          find("#{comments_selector}.system-note")
          entries = all(comments_selector)
L
Luke "Jared" Bennett 已提交
158 159 160 161 162 163 164 165 166 167 168 169 170 171
          close_note = entries.last
          new_discussion = entries[-2]

          expect(close_note).to have_content 'closed'
          expect(new_discussion).to have_selector '.discussion'
        end
      end

      describe 'when opening the menu' do
        before do
          find(toggle_selector).click
        end

        it 'should have "Start discussion" selected' do
172
          find("#{menu_selector} li", match: :first)
L
Luke "Jared" Bennett 已提交
173 174 175 176
          items = all("#{menu_selector} li")

          expect(items.first).to have_content 'Comment'
          expect(items.first).not_to have_selector '.fa-check'
L
Luke "Jared" Bennett 已提交
177
          expect(items.first['class']).not_to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
178 179 180

          expect(items.last).to have_content 'Start discussion'
          expect(items.last).to have_selector '.fa-check'
L
Luke "Jared" Bennett 已提交
181
          expect(items.last['class']).to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
182 183 184 185
        end

        describe 'when selecting "Comment"' do
          before do
L
Luke "Jared" Bennett 已提交
186
            find("#{menu_selector} li", match: :first).click
L
Luke "Jared" Bennett 已提交
187 188
          end

189
          it 'updates the submit button text and closes the dropdown' do
190
            expect(find(dropdown_selector)).to have_content 'Comment'
191
            expect(page).not_to have_selector menu_selector
L
Luke "Jared" Bennett 已提交
192 193 194 195 196 197
          end

          if resource_name =~ /(issue|merge request)/
            it 'updates the close button text' do
              expect(find(close_selector)).to have_content "Comment & close #{resource_name}"
            end
L
Luke "Jared" Bennett 已提交
198 199 200 201 202 203

            it 'typing does not change the close button text' do
              find("#{form_selector} .note-textarea").send_keys('b')

              expect(find(close_selector)).to have_content "Comment & close #{resource_name}"
            end
L
Luke "Jared" Bennett 已提交
204 205 206 207 208
          end

          it 'should have "Comment" selected when opening the menu' do
            find(toggle_selector).click

209
            find("#{menu_selector} li", match: :first)
L
Luke "Jared" Bennett 已提交
210 211 212 213
            items = all("#{menu_selector} li")

            expect(items.first).to have_content 'Comment'
            expect(items.first).to have_selector '.fa-check'
L
Luke "Jared" Bennett 已提交
214
            expect(items.first['class']).to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
215 216 217

            expect(items.last).to have_content 'Start discussion'
            expect(items.last).not_to have_selector '.fa-check'
L
Luke "Jared" Bennett 已提交
218
            expect(items.last['class']).not_to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
219 220 221 222 223
          end
        end
      end
    end
  end
224 225 226

  if resource_name =~ /(issue|merge request)/
    describe "on a closed #{resource_name}" do
L
Luke "Jared" Bennett 已提交
227
      before do
228 229 230
        find("#{form_selector} .js-note-target-close").click

        find("#{form_selector} .note-textarea").send_keys('a')
L
Luke "Jared" Bennett 已提交
231 232
      end

233 234
      it "should show a 'Comment & reopen #{resource_name}' button" do
        expect(find("#{form_selector} .js-note-target-reopen")).to have_content "Comment & reopen #{resource_name}"
L
Luke "Jared" Bennett 已提交
235 236
      end

237
      it "should show a 'Start discussion & reopen #{resource_name}' button when 'Start discussion' is selected" do
L
Luke "Jared" Bennett 已提交
238
        find(toggle_selector).click
239

L
Luke "Jared" Bennett 已提交
240 241 242
        find("#{menu_selector} li", match: :first)
        all("#{menu_selector} li").last.click

243
        expect(find("#{form_selector} .js-note-target-reopen")).to have_content "Start discussion & reopen #{resource_name}"
L
Luke "Jared" Bennett 已提交
244
      end
245 246
    end
  end
L
Luke "Jared" Bennett 已提交
247
end