forked from consuldemocracy/consuldemocracy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
admin_notifications_spec.rb
233 lines (175 loc) · 7.73 KB
/
admin_notifications_spec.rb
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
require "rails_helper"
describe "Admin Notifications" do
before do
admin = create(:administrator)
login_as(admin.user)
create(:budget)
end
context "Show" do
scenario "Valid Admin Notification" do
notification = create(:admin_notification, title: "Notification title",
body: "Notification body",
link: "https://www.decide.madrid.es/vota",
segment_recipient: :all_users)
visit admin_admin_notification_path(notification)
expect(page).to have_content("Notification title")
expect(page).to have_content("Notification body")
expect(page).to have_content("https://www.decide.madrid.es/vota")
expect(page).to have_content("All users")
end
scenario "Notification with invalid segment recipient" do
invalid_notification = create(:admin_notification)
invalid_notification.update_attribute(:segment_recipient, "invalid_segment")
visit admin_admin_notification_path(invalid_notification)
expect(page).to have_content("Recipients user segment is invalid")
end
end
context "Index" do
scenario "Valid Admin Notifications", :with_frozen_time do
draft = create(:admin_notification, segment_recipient: :all_users, title: "Not yet sent")
sent = create(:admin_notification, :sent, segment_recipient: :administrators,
title: "Sent one")
visit admin_admin_notifications_path
expect(page).to have_css(".admin_notification", count: 2)
within("#admin_notification_#{draft.id}") do
expect(page).to have_content("Not yet sent")
expect(page).to have_content("All users")
expect(page).to have_content("Draft")
end
within("#admin_notification_#{sent.id}") do
expect(page).to have_content("Sent one")
expect(page).to have_content("Administrators")
expect(page).to have_content(I18n.l(Date.current))
end
end
scenario "Notifications with invalid segment recipient" do
invalid_notification = create(:admin_notification)
invalid_notification.update_attribute(:segment_recipient, "invalid_segment")
visit admin_admin_notifications_path
expect(page).to have_content("Recipients user segment is invalid")
end
end
scenario "Create" do
visit admin_admin_notifications_path
click_link "New notification"
fill_in_admin_notification_form(segment_recipient: "Proposal authors",
title: "This is a title",
body: "This is a body",
link: "https://www.dummylink.dev")
click_button "Create notification"
expect(page).to have_content "Notification created successfully"
expect(page).to have_content "Proposal authors"
expect(page).to have_content "This is a title"
expect(page).to have_content "This is a body"
expect(page).to have_content "https://www.dummylink.dev"
end
context "Update" do
scenario "A draft notification can be updated" do
notification = create(:admin_notification)
visit admin_admin_notifications_path
within("#admin_notification_#{notification.id}") do
click_link "Edit"
end
fill_in_admin_notification_form(segment_recipient: "All users",
title: "Other title",
body: "Other body",
link: "")
click_button "Update notification"
expect(page).to have_content "Notification updated successfully"
expect(page).to have_content "All users"
expect(page).to have_content "Other title"
expect(page).to have_content "Other body"
expect(page).not_to have_content "https://www.dummylink.dev"
end
scenario "Sent notification can not be updated" do
notification = create(:admin_notification, :sent)
visit admin_admin_notifications_path
within("#admin_notification_#{notification.id}") do
expect(page).not_to have_link("Edit")
end
end
end
context "Destroy" do
scenario "A draft notification can be destroyed" do
notification = create(:admin_notification)
visit admin_admin_notifications_path
within("#admin_notification_#{notification.id}") do
click_link "Delete"
end
expect(page).to have_content "Notification deleted successfully"
expect(page).to have_css(".notification", count: 0)
end
scenario "Sent notification can not be destroyed" do
notification = create(:admin_notification, :sent)
visit admin_admin_notifications_path
within("#admin_notification_#{notification.id}") do
expect(page).not_to have_link("Delete")
end
end
end
context "Visualize" do
scenario "A draft notification can be previewed" do
notification = create(:admin_notification, segment_recipient: :administrators)
visit admin_admin_notifications_path
within("#admin_notification_#{notification.id}") do
click_link "Preview"
end
expect(page).to have_content "This is how the users will see the notification:"
expect(page).to have_content "Administrators (1 users will be notified)"
end
scenario "A sent notification can be viewed" do
notification = create(:admin_notification, :sent, recipients_count: 7,
segment_recipient: :administrators)
visit admin_admin_notifications_path
within("#admin_notification_#{notification.id}") do
click_link "View"
end
expect(page).to have_content "This is how the users see the notification:"
expect(page).to have_content "Administrators (7 users got notified)"
end
end
scenario "Errors on create" do
visit new_admin_admin_notification_path
click_button "Create notification"
expect(page).to have_content error_message
end
scenario "Errors on update" do
notification = create(:admin_notification)
visit edit_admin_admin_notification_path(notification)
fill_in "Title", with: ""
click_button "Update notification"
expect(page).to have_content error_message
end
context "Send notification", :js do
scenario "A draft Admin notification can be sent", :js do
2.times { create(:user) }
notification = create(:admin_notification, segment_recipient: :all_users)
visit admin_admin_notification_path(notification)
accept_confirm { click_link "Send notification" }
expect(page).to have_content "Notification sent successfully"
User.find_each do |user|
expect(user.notifications.count).to eq(1)
end
end
scenario "A sent Admin notification can not be sent", :js do
notification = create(:admin_notification, :sent)
visit admin_admin_notification_path(notification)
expect(page).not_to have_link("Send")
end
scenario "Admin notification with invalid segment recipient cannot be sent", :js do
invalid_notification = create(:admin_notification)
invalid_notification.update_attribute(:segment_recipient, "invalid_segment")
visit admin_admin_notification_path(invalid_notification)
expect(page).not_to have_link("Send")
end
end
scenario "Select list of users to send notification" do
UserSegments::SEGMENTS.each do |user_segment|
segment_recipient = I18n.t("admin.segment_recipient.#{user_segment}")
visit new_admin_admin_notification_path
fill_in_admin_notification_form(segment_recipient: segment_recipient)
click_button "Create notification"
expect(page).to have_content(I18n.t("admin.segment_recipient.#{user_segment}"))
end
end
end