discussion_comments_shared_example.rb 8.1 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
L
Luke "Jared" Bennett 已提交
74 75 76 77 78
      find('body').click

      expect(page).not_to have_selector menu_selector
    end

79

F
Filipa Lacerda 已提交
80
    it 'clicking the ul padding or divider should not change the text' do
81 82 83
      if resource_name == 'issue'
        find(menu_selector).trigger 'click'
        expect(find(dropdown_selector)).to have_content 'Comment'
L
Luke "Jared" Bennett 已提交
84

85 86 87 88 89
        find(toggle_selector).click
        find("#{menu_selector} .divider").trigger 'click'
        expect(find(dropdown_selector)).to have_content 'Comment'
      else
        find(menu_selector).trigger 'click'
90

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

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

        expect(page).to have_selector menu_selector
        expect(find(dropdown_selector)).to have_content 'Comment'
      end
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

L
Luke "Jared" Bennett 已提交
124
      it 'clicking "Start discussion" will post a discussion' do
L
Luke "Jared" Bennett 已提交
125 126
        find(submit_selector).click

L
Luke "Jared" Bennett 已提交
127 128
        find(comments_selector, match: :first)
        new_comment = all(comments_selector).last
L
Luke "Jared" Bennett 已提交
129 130 131 132 133

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

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

L
Luke "Jared" Bennett 已提交
138 139 140
          find(comments_selector, match: :first)
          find("#{comments_selector}.system-note")
          entries = all(comments_selector)
L
Luke "Jared" Bennett 已提交
141 142 143 144 145 146 147 148 149 150 151 152 153 154
          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
155
          find("#{menu_selector} li", match: :first)
L
Luke "Jared" Bennett 已提交
156 157 158 159
          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 已提交
160
          expect(items.first['class']).not_to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
161 162 163

          expect(items.last).to have_content 'Start discussion'
          expect(items.last).to have_selector '.fa-check'
L
Luke "Jared" Bennett 已提交
164
          expect(items.last['class']).to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
165 166 167 168
        end

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

172
          it 'updates the submit button text and closes the dropdown' do
173
            expect(find(dropdown_selector)).to have_content 'Comment'
174
            expect(page).not_to have_selector menu_selector
L
Luke "Jared" Bennett 已提交
175 176 177 178 179 180
          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 已提交
181 182 183 184 185 186

            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 已提交
187 188 189 190 191
          end

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

192
            find("#{menu_selector} li", match: :first)
L
Luke "Jared" Bennett 已提交
193 194 195 196
            items = all("#{menu_selector} li")

            expect(items.first).to have_content 'Comment'
            expect(items.first).to have_selector '.fa-check'
L
Luke "Jared" Bennett 已提交
197
            expect(items.first['class']).to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
198 199 200

            expect(items.last).to have_content 'Start discussion'
            expect(items.last).not_to have_selector '.fa-check'
L
Luke "Jared" Bennett 已提交
201
            expect(items.last['class']).not_to match 'droplab-item-selected'
L
Luke "Jared" Bennett 已提交
202 203 204 205 206
          end
        end
      end
    end
  end
207 208 209

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

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

216 217
      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 已提交
218 219
      end

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

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

226
        expect(find("#{form_selector} .js-note-target-reopen")).to have_content "Start discussion & reopen #{resource_name}"
L
Luke "Jared" Bennett 已提交
227
      end
228 229
    end
  end
L
Luke "Jared" Bennett 已提交
230
end