-
Notifications
You must be signed in to change notification settings - Fork 93
/
Copy pathpager-me-test.coffee
137 lines (99 loc) · 5.59 KB
/
pager-me-test.coffee
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
chai = require 'chai'
sinon = require 'sinon'
chai.use require 'sinon-chai'
expect = chai.expect
describe 'pagerduty', ->
before ->
@triggerRegex = /(pager|major)( me)? (?:trigger|page) ((["'])([^]*?)\4|([\.\w\-]+)) (.+)$/i
@schedulesRegex = /(pager|major)( me)? schedules( ((["'])([^]*?)\5|(.+)))?$/i
@whosOnCallRegex = /who(?:’s|'s|s| is|se)? (?:on call|oncall|on-call)(?:\?)?(?: (?:for )?((["'])([^]*?)\2|(.*?))(?:\?|$))?$/i
beforeEach ->
@robot =
respond: sinon.spy()
hear: sinon.spy()
require('../src/scripts/pagerduty')(@robot)
it 'registers a pager me listener', ->
expect(@robot.respond).to.have.been.calledWith(/pager( me)?$/i)
it 'registers a pager me as listener', ->
expect(@robot.respond).to.have.been.calledWith(/pager(?: me)? as (.*)$/i)
it 'registers a pager forget me listener', ->
expect(@robot.respond).to.have.been.calledWith(/pager forget me$/i)
it 'registers a pager indcident listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? incident (.*)$/i)
it 'registers a pager sup listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? (inc|incidents|sup|problems)$/i)
it 'registers a pager trigger listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? (?:trigger|page) ([\w\-]+)$/i)
it 'registers a pager trigger with message listener', ->
expect(@robot.respond).to.have.been.calledWith(@triggerRegex)
it 'registers a pager ack listener', ->
expect(@robot.respond).to.have.been.calledWith(/(?:pager|major)(?: me)? ack(?:nowledge)? (.+)$/i)
it 'registers a pager ack! listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? ack(nowledge)?(!)?$/i)
it 'registers a pager resolve listener', ->
expect(@robot.respond).to.have.been.calledWith(/(?:pager|major)(?: me)? res(?:olve)?(?:d)? (.+)$/i)
it 'registers a pager resolve! listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? res(olve)?(d)?(!)?$/i)
it 'registers a pager notes on listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? notes (.+)$/i)
it 'registers a pager notes add listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? note ([\d\w]+) (.+)$/i)
it 'registers a pager schedules listener', ->
expect(@robot.respond).to.have.been.calledWith(@schedulesRegex)
it 'registers a pager schedule override listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? (schedule|overrides)( ((["'])([^]*?)\6|([\w\-]+)))?( ([^ ]+)\s*(\d+)?)?$/i)
it 'registers a pager schedule override details listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? (override) ((["'])([^]*?)\5|([\w\-]+)) ([\w\-:\+]+) - ([\w\-:\+]+)( (.*))?$/i)
it 'registers a pager override delete listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? (overrides?) ((["'])([^]*?)\5|([\w\-]+)) (delete) (.*)$/i)
it 'registers a pager link listener', ->
expect(@robot.respond).to.have.been.calledWith(/pager( me)? (?!schedules?\b|overrides?\b|my schedule\b)(.+) (\d+)$/i)
it 'registers a pager on call listener', ->
expect(@robot.respond).to.have.been.calledWith(@whosOnCallRegex)
it 'registers a pager services listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? services$/i)
it 'registers a pager maintenance listener', ->
expect(@robot.respond).to.have.been.calledWith(/(pager|major)( me)? maintenance (\d+) (.+)$/i)
it 'trigger handles users with dots', ->
msg = @triggerRegex.exec('pager trigger foo.bar baz')
expect(msg[6]).to.equal('foo.bar')
expect(msg[7]).to.equal('baz')
it 'trigger handles users with spaces', ->
msg = @triggerRegex.exec('pager trigger "foo bar" baz')
expect(msg[5]).to.equal('foo bar')
expect(msg[7]).to.equal('baz')
it 'trigger handles users with spaces and single quotes', ->
msg = @triggerRegex.exec("pager trigger 'foo bar' baz")
expect(msg[5]).to.equal('foo bar')
expect(msg[7]).to.equal('baz')
it 'trigger handles users without spaces', ->
msg = @triggerRegex.exec('pager trigger foo bar baz')
expect(msg[6]).to.equal('foo')
expect(msg[7]).to.equal('bar baz')
it 'schedules handles names with quotes', ->
msg = @schedulesRegex.exec('pager schedules "foo bar"')
expect(msg[6]).to.equal('foo bar')
it 'schedules handles names without quotes', ->
msg = @schedulesRegex.exec('pager schedules foo bar')
expect(msg[7]).to.equal('foo bar')
it 'schedules handles names without spaces', ->
msg = @schedulesRegex.exec('pager schedules foobar')
expect(msg[7]).to.equal('foobar')
it 'whos on call handles bad input', ->
msg = @whosOnCallRegex.exec('whos on callllllll')
expect(msg).to.be.null
it 'whos on call handles no schedule', ->
msg = @whosOnCallRegex.exec('whos on call')
expect(msg).to.not.be.null
it 'whos on call handles schedules with quotes', ->
msg = @whosOnCallRegex.exec('whos on call for "foo bar"')
expect(msg[3]).to.equal('foo bar')
it 'whos on call handles schedules with quotes and quesiton mark', ->
msg = @whosOnCallRegex.exec('whos on call for "foo bar"?')
expect(msg[3]).to.equal('foo bar')
it 'whos on call handles schedules without quotes', ->
msg = @whosOnCallRegex.exec('whos on call for foo bar')
expect(msg[4]).to.equal('foo bar')
it 'whos on call handles schedules without quotes and question mark', ->
msg = @whosOnCallRegex.exec('whos on call for foo bar?')
expect(msg[4]).to.equal('foo bar')