-
Notifications
You must be signed in to change notification settings - Fork 433
/
event_test.rb
151 lines (120 loc) · 5 KB
/
event_test.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
require_relative '../test_helper'
require 'event'
require 'event_subscription'
class EventTest < ActionDispatch::IntegrationTest
fixtures :all
set_fixture_class events: Event::Base
def setup
# ensure that the backend got started or we read, process and forget the indexed data.
# of course only if our timing is bad :/
super
Suse::Backend.start_test_backend
end
test 'find nothing' do
assert_nil Event::Factory.new_from_type('NOT_EXISTANT', {})
end
test 'find event' do
e = Event::Factory.new_from_type('SRCSRV_CREATE_PACKAGE',
{'project' => 'kde4',
'package' => 'kdelibs',
'sender' => 'tom'})
assert_equal 'Event::CreatePackage', e.class.name
assert_equal 'kdelibs', e.payload['package']
assert_equal [], e.receiver_roles
end
test 'receive roles for build failure' do
assert_equal [:maintainer, :bugowner], events(:build_fails_with_deleted_user_and_request).receiver_roles
end
def users_for_event(e)
users = EventFindSubscribers.new(e).subscribers
User.where(id: users).pluck(:login).sort
end
def groups_for_event(e)
groups = EventFindSubscribers.new(e).subscribers
Group.where(id: groups).pluck(:title).sort
end
test 'find subscribers' do
# for this test we don't want fixtures to interfere
EventSubscription.delete_all
all_get_events = EventSubscription.create eventtype: 'Event::CreatePackage', receiver_role: :maintainer
e = Event::Factory.new_from_type('SRCSRV_CREATE_PACKAGE',
{'project' => 'kde4',
'package' => 'kdebase',
'sender' => 'tom'})
# fred, fredlibs and king are maintainer, adrian is in test_group
assert_equal %w(fred fredlibs king), users_for_event(e)
assert_equal %w(test_group), groups_for_event(e)
# now fred configures it off
EventSubscription.create eventtype: 'Event::CreatePackage',
user: users(:fred), receiver_role: :all, receive: false
# fred, fredlibs and king are maintainer, adrian is in test_group - fred disabled it
assert_equal %w(fredlibs king), users_for_event(e)
assert_equal %w(test_group), groups_for_event(e)
# now the global default is turned off again
all_get_events.delete
assert_equal [], users_for_event(e)
# now fredlibs configures on
EventSubscription.create eventtype: 'Event::CreatePackage',
user: users(:fredlibs),
receiver_role: :all, receive: true
assert_equal %w(fredlibs), users_for_event(e)
end
test 'create request' do
User.current = users(:Iggy)
req = bs_requests(:submit_from_home_project)
myid = req.id
assert_difference 'ActionMailer::Base.deliveries.size', +1 do
req.addreview by_user: 'tom', comment: 'Can you check that?'
end
email = ActionMailer::Base.deliveries.last
assert_equal "Request #{myid} requires review (submit Apache/BranchPack)", email.subject
assert_equal %w(tschmidt@example.com), email.to
should = load_fixture('event_mailer/review_wanted').gsub('REQUESTID', myid.to_s).chomp
assert_equal should, email.encoded.lines.map(&:chomp).select { |l| l !~ %r{^Date:} }.join("\n")
end
test 'notifications are sent' do
e = Event::VersionChange.first
assert e.notify_backend
end
test 'sent all' do
Event::NotifyBackends.trigger_delayed_sent
end
test 'get last' do
if false
# this just hangs forever, if not enough events got produced yet
firstcount = Event::Base.count
UpdateNotificationEvents.new.perform
oldcount = Event::Base.count
# the first call fetches around 100
assert oldcount - firstcount > 100, "oldcount: #{oldcount}, firstcount: #{firstcount} - not +100"
end
end
test 'cleanup job' do
firstcount = Event::Base.count
CleanupEvents.new.perform
assert Event::Base.count == firstcount, 'all our fixtures are fresh'
f = Event::Base.first
f.queued = true
f.save
CleanupEvents.new.perform
assert Event::Base.count == firstcount, 'queuing is not enough'
f.project_logged = true
f.save
CleanupEvents.new.perform
assert Event::Base.count != firstcount, 'now its gone'
end
test 'maintainer mails for build failure' do
# for this test we don't want fixtures to interfere
EventSubscription.delete_all
# just one subsciption
EventSubscription.create eventtype: 'Event::BuildFail', receiver_role: :maintainer, user: users(:Iggy)
assert_equal %w(Iggy), users_for_event(events(:build_failure_for_iggy))
end
test 'maintainer mails for source service fail' do
# for this test we don't want fixtures to interfere
EventSubscription.delete_all
# just one subsciption
EventSubscription.create eventtype: 'Event::ServiceFail', receiver_role: :maintainer, user: users(:Iggy)
assert_equal %w(Iggy), users_for_event(events(:service_failure_for_iggy))
end
end