]> git.openstreetmap.org Git - rails.git/blob - test/system/web_notifications_test.rb
Merge remote-tracking branch 'upstream/pull/7294'
[rails.git] / test / system / web_notifications_test.rb
1 # frozen_string_literal: true
2
3 require "application_system_test_case"
4
5 class WebNotificationsTest < ApplicationSystemTestCase
6   test "no notifications available" do
7     user = create(:user)
8     sign_in_as(user)
9
10     click_on user.display_name
11     click_on "My Notifications"
12
13     assert_text "Notifications"
14     assert_text "You have no notifications"
15   end
16
17   test "read latest notifications" do
18     changeset_author = create(:user)
19     commenter = create(:user, :display_name => "Commenter")
20     setup_changeset_comment(
21       :changeset_author => changeset_author,
22       :commenter => commenter
23     )
24
25     sign_in_as(changeset_author)
26
27     click_on changeset_author.display_name
28     click_on "My Notifications"
29
30     assert_text "Notifications"
31     assert_text "Changeset comment"
32     assert_text "User Commenter left a comment on changeset"
33   end
34
35   test "pagination" do
36     changeset_author = create(:user)
37     commenter = create(:user, :display_name => "Commenter")
38     1.upto(30).each do |i|
39       setup_changeset_comment(
40         :changeset_author => changeset_author,
41         :commenter => commenter,
42         :comment_attrs => {
43           :body => "This is comment number #{i}"
44         }
45       )
46     end
47
48     sign_in_as(changeset_author)
49
50     click_on changeset_author.display_name
51     click_on "My Notifications"
52
53     assert_selector ".web-notification", :count => 20
54     assert_text "This is comment number 30"
55     assert_no_text "This is comment number 10"
56     click_on "Older Notifications"
57     assert_selector ".web-notification", :count => 10
58     assert_no_text "This is comment number 30"
59     assert_text "This is comment number 10"
60   end
61
62   private
63
64   def setup_changeset_comment(changeset_author:, commenter:, comment_attrs: {})
65     changeset = create(:changeset, :user => changeset_author)
66     create(:changeset_subscription, :changeset => changeset, :subscriber => changeset_author)
67
68     comment = create(:changeset_comment, :changeset => changeset, :author => commenter, **comment_attrs)
69     create(:changeset_subscription, :changeset => changeset, :subscriber => commenter)
70     ChangesetCommentNotifier.with(:record => comment).deliver
71   end
72 end