punchblock 2.5.2 → 2.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +2 -0
  3. data/CHANGELOG.md +6 -0
  4. data/README.markdown +2 -1
  5. data/lib/punchblock/translator/asterisk/call.rb +3 -3
  6. data/lib/punchblock/translator/asterisk/component/mrcp_recog_prompt.rb +15 -9
  7. data/lib/punchblock/translator/asterisk/component/output.rb +8 -1
  8. data/lib/punchblock/translator/input_component.rb +2 -0
  9. data/lib/punchblock/version.rb +1 -1
  10. data/punchblock.gemspec +1 -1
  11. data/spec/punchblock/client/component_registry_spec.rb +3 -3
  12. data/spec/punchblock/client_spec.rb +22 -15
  13. data/spec/punchblock/command/accept_spec.rb +17 -7
  14. data/spec/punchblock/command/answer_spec.rb +19 -9
  15. data/spec/punchblock/command/dial_spec.rb +76 -27
  16. data/spec/punchblock/command/hangup_spec.rb +17 -7
  17. data/spec/punchblock/command/join_spec.rb +78 -24
  18. data/spec/punchblock/command/mute_spec.rb +3 -3
  19. data/spec/punchblock/command/redirect_spec.rb +33 -12
  20. data/spec/punchblock/command/reject_spec.rb +41 -14
  21. data/spec/punchblock/command/unjoin_spec.rb +29 -12
  22. data/spec/punchblock/command/unmute_spec.rb +3 -3
  23. data/spec/punchblock/command_node_spec.rb +43 -20
  24. data/spec/punchblock/component/asterisk/agi/command_spec.rb +52 -12
  25. data/spec/punchblock/component/asterisk/ami/action_spec.rb +69 -21
  26. data/spec/punchblock/component/component_node_spec.rb +12 -12
  27. data/spec/punchblock/component/input_spec.rb +304 -87
  28. data/spec/punchblock/component/output_spec.rb +434 -173
  29. data/spec/punchblock/component/prompt_spec.rb +63 -20
  30. data/spec/punchblock/component/receive_fax_spec.rb +43 -14
  31. data/spec/punchblock/component/record_spec.rb +215 -71
  32. data/spec/punchblock/component/send_fax_spec.rb +54 -15
  33. data/spec/punchblock/connection/asterisk_spec.rb +34 -24
  34. data/spec/punchblock/connection/freeswitch_spec.rb +9 -9
  35. data/spec/punchblock/connection/xmpp_spec.rb +92 -83
  36. data/spec/punchblock/event/answered_spec.rb +14 -4
  37. data/spec/punchblock/event/asterisk/ami/event_spec.rb +34 -12
  38. data/spec/punchblock/event/complete_spec.rb +36 -16
  39. data/spec/punchblock/event/dtmf_spec.rb +9 -3
  40. data/spec/punchblock/event/end_spec.rb +43 -10
  41. data/spec/punchblock/event/input_timers_started_spec.rb +1 -1
  42. data/spec/punchblock/event/joined_spec.rb +29 -7
  43. data/spec/punchblock/event/offer_spec.rb +41 -10
  44. data/spec/punchblock/event/ringing_spec.rb +14 -4
  45. data/spec/punchblock/event/started_speaking_spec.rb +9 -3
  46. data/spec/punchblock/event/stopped_speaking_spec.rb +9 -3
  47. data/spec/punchblock/event/unjoined_spec.rb +24 -6
  48. data/spec/punchblock/protocol_error_spec.rb +16 -13
  49. data/spec/punchblock/ref_spec.rb +90 -26
  50. data/spec/punchblock/translator/asterisk/call_spec.rb +176 -161
  51. data/spec/punchblock/translator/asterisk/component/asterisk/agi_command_spec.rb +18 -18
  52. data/spec/punchblock/translator/asterisk/component/asterisk/ami_action_spec.rb +9 -9
  53. data/spec/punchblock/translator/asterisk/component/composed_prompt_spec.rb +14 -14
  54. data/spec/punchblock/translator/asterisk/component/input_spec.rb +57 -36
  55. data/spec/punchblock/translator/asterisk/component/mrcp_native_prompt_spec.rb +50 -50
  56. data/spec/punchblock/translator/asterisk/component/mrcp_prompt_spec.rb +59 -48
  57. data/spec/punchblock/translator/asterisk/component/output_spec.rb +231 -221
  58. data/spec/punchblock/translator/asterisk/component/record_spec.rb +82 -82
  59. data/spec/punchblock/translator/asterisk/component/stop_by_redirect_spec.rb +10 -10
  60. data/spec/punchblock/translator/asterisk/component_spec.rb +4 -4
  61. data/spec/punchblock/translator/asterisk_spec.rb +89 -82
  62. data/spec/punchblock/translator/freeswitch/call_spec.rb +114 -99
  63. data/spec/punchblock/translator/freeswitch/component/flite_output_spec.rb +19 -19
  64. data/spec/punchblock/translator/freeswitch/component/input_spec.rb +24 -24
  65. data/spec/punchblock/translator/freeswitch/component/output_spec.rb +23 -23
  66. data/spec/punchblock/translator/freeswitch/component/record_spec.rb +78 -78
  67. data/spec/punchblock/translator/freeswitch/component/tts_output_spec.rb +19 -19
  68. data/spec/punchblock/translator/freeswitch/component_spec.rb +8 -8
  69. data/spec/punchblock/translator/freeswitch_spec.rb +66 -59
  70. data/spec/punchblock/uri_list_spec.rb +45 -10
  71. data/spec/punchblock_spec.rb +13 -13
  72. data/spec/spec_helper.rb +18 -11
  73. data/spec/support/mock_connection_with_event_handler.rb +1 -1
  74. metadata +5 -4
@@ -32,7 +32,7 @@ module Punchblock
32
32
  before { original_command.request! }
33
33
 
34
34
  it 'should send the appropriate action' do
35
- ami_client.should_receive(:send_action).once.with('AGI', 'Channel' => channel, 'Command' => 'EXEC ANSWER', 'CommandID' => component_id).and_return(response)
35
+ expect(ami_client).to receive(:send_action).once.with('AGI', 'Channel' => channel, 'Command' => 'EXEC ANSWER', 'CommandID' => component_id).and_return(response)
36
36
  subject.execute
37
37
  end
38
38
 
@@ -44,7 +44,7 @@ module Punchblock
44
44
  end
45
45
 
46
46
  it 'should send the appropriate action' do
47
- ami_client.should_receive(:send_action).once.with('AGI', 'Channel' => channel, 'Command' => 'WAIT FOR DIGIT "1000" "foo"', 'CommandID' => component_id).and_return(response)
47
+ expect(ami_client).to receive(:send_action).once.with('AGI', 'Channel' => channel, 'Command' => 'WAIT FOR DIGIT "1000" "foo"', 'CommandID' => component_id).and_return(response)
48
48
  subject.execute
49
49
  end
50
50
  end
@@ -65,9 +65,9 @@ module Punchblock
65
65
  end
66
66
 
67
67
  it 'should send the component node a ref with the action ID' do
68
- ami_client.should_receive(:send_action).once.and_return response
68
+ expect(ami_client).to receive(:send_action).once.and_return response
69
69
  subject.execute
70
- original_command.response(1).should == expected_response
70
+ expect(original_command.response(1)).to eq(expected_response)
71
71
  end
72
72
 
73
73
  context 'with an error' do
@@ -76,11 +76,11 @@ module Punchblock
76
76
  RubyAMI::Error.new.tap { |e| e.message = message }
77
77
  end
78
78
 
79
- before { ami_client.should_receive(:send_action).once.and_raise response }
79
+ before { expect(ami_client).to receive(:send_action).once.and_raise response }
80
80
 
81
81
  it 'should send the component node false' do
82
82
  subject.execute
83
- original_command.response(1).should be_false
83
+ expect(original_command.response(1)).to be_false
84
84
  end
85
85
 
86
86
  context "which is 'No such channel'" do
@@ -88,7 +88,7 @@ module Punchblock
88
88
 
89
89
  it "should return an :item_not_found error for the command" do
90
90
  subject.execute
91
- original_command.response(0.5).should be == ProtocolError.new.setup(:item_not_found, "Could not find a call with ID #{mock_call.id}", mock_call.id)
91
+ expect(original_command.response(0.5)).to eq(ProtocolError.new.setup(:item_not_found, "Could not find a call with ID #{mock_call.id}", mock_call.id))
92
92
  end
93
93
  end
94
94
 
@@ -97,7 +97,7 @@ module Punchblock
97
97
 
98
98
  it "should return an :item_not_found error for the command" do
99
99
  subject.execute
100
- original_command.response(0.5).should be == ProtocolError.new.setup(:item_not_found, "Could not find a call with ID #{mock_call.id}", mock_call.id)
100
+ expect(original_command.response(0.5)).to eq(ProtocolError.new.setup(:item_not_found, "Could not find a call with ID #{mock_call.id}", mock_call.id))
101
101
  end
102
102
  end
103
103
  end
@@ -132,10 +132,10 @@ module Punchblock
132
132
 
133
133
  complete_event = original_command.complete_event 0.5
134
134
 
135
- original_command.should be_complete
135
+ expect(original_command).to be_complete
136
136
 
137
- complete_event.component_id.should be == component_id.to_s
138
- complete_event.reason.should be == expected_complete_reason
137
+ expect(complete_event.component_id).to eq(component_id.to_s)
138
+ expect(complete_event.reason).to eq(expected_complete_reason)
139
139
  end
140
140
 
141
141
  context "when the command was ASYNCAGI BREAK" do
@@ -147,12 +147,12 @@ module Punchblock
147
147
 
148
148
  before do
149
149
  response = RubyAMI::Response.new 'Value' => chan_var
150
- ami_client.should_receive(:send_action).once.with('GetVar', 'Channel' => channel, 'Variable' => 'PUNCHBLOCK_END_ON_ASYNCAGI_BREAK').and_return response
150
+ expect(ami_client).to receive(:send_action).once.with('GetVar', 'Channel' => channel, 'Variable' => 'PUNCHBLOCK_END_ON_ASYNCAGI_BREAK').and_return response
151
151
  end
152
152
 
153
153
  it 'should not send an end (hangup) event to the translator' do
154
- translator.should_receive(:handle_pb_event).once.with kind_of(Punchblock::Event::Complete)
155
- translator.should_receive(:handle_pb_event).never.with kind_of(Punchblock::Event::End)
154
+ expect(translator).to receive(:handle_pb_event).once.with kind_of(Punchblock::Event::Complete)
155
+ expect(translator).to receive(:handle_pb_event).never.with kind_of(Punchblock::Event::End)
156
156
  subject.handle_ami_event ami_event
157
157
  end
158
158
 
@@ -164,8 +164,8 @@ module Punchblock
164
164
  platform_code: 16,
165
165
  target_call_id: mock_call.id
166
166
 
167
- translator.should_receive(:handle_pb_event).once.with kind_of(Punchblock::Event::Complete)
168
- translator.should_receive(:handle_pb_event).once.with expected_end_event
167
+ expect(translator).to receive(:handle_pb_event).once.with kind_of(Punchblock::Event::Complete)
168
+ expect(translator).to receive(:handle_pb_event).once.with expected_end_event
169
169
  subject.handle_ami_event ami_event
170
170
  end
171
171
 
@@ -185,8 +185,8 @@ module Punchblock
185
185
  platform_code: 16,
186
186
  target_call_id: mock_call.id,
187
187
  timestamp: DateTime.new(2014, 2, 25, 22, 46, 20)
188
- translator.should_receive(:handle_pb_event).once.with kind_of(Punchblock::Event::Complete)
189
- translator.should_receive(:handle_pb_event).once.with expected_end_event
188
+ expect(translator).to receive(:handle_pb_event).once.with kind_of(Punchblock::Event::Complete)
189
+ expect(translator).to receive(:handle_pb_event).once.with expected_end_event
190
190
 
191
191
  subject.handle_ami_event ami_event
192
192
  end
@@ -33,9 +33,9 @@ module Punchblock
33
33
  before { stub_uuids component_id }
34
34
 
35
35
  it 'should send the appropriate RubyAMI::Action and send the component node a ref' do
36
- ami_client.should_receive(:send_action).once.with('ExtensionStatus', 'Context' => 'default', 'Exten' => 'idonno').and_return(RubyAMI::Response.new)
36
+ expect(ami_client).to receive(:send_action).once.with('ExtensionStatus', 'Context' => 'default', 'Exten' => 'idonno').and_return(RubyAMI::Response.new)
37
37
  subject.execute
38
- original_command.response(1).should == expected_response
38
+ expect(original_command.response(1)).to eq(expected_response)
39
39
  end
40
40
  end
41
41
 
@@ -57,8 +57,8 @@ module Punchblock
57
57
 
58
58
  context 'for a non-causal action' do
59
59
  it 'should send a complete event to the component node' do
60
- ami_client.should_receive(:send_action).once.and_return response
61
- subject.should_receive(:send_complete_event).once.with expected_complete_reason
60
+ expect(ami_client).to receive(:send_action).once.and_return response
61
+ expect(subject).to receive(:send_complete_event).once.with expected_complete_reason
62
62
  subject.execute
63
63
  end
64
64
  end
@@ -105,7 +105,7 @@ module Punchblock
105
105
  Punchblock::Component::Asterisk::AMI::Action::Complete::Success.new message: 'Channel status will follow', text_body: 'Some text body', headers: {'Exten' => "idonno", 'Context' => "default", 'Hint' => "", 'Status' => "-1", 'EventList' => 'Complete', 'ListItems' => '3'}
106
106
  end
107
107
 
108
- before { ami_client.should_receive(:send_action).once.and_return response }
108
+ before { expect(ami_client).to receive(:send_action).once.and_return response }
109
109
 
110
110
  it 'should send events to the component node' do
111
111
  event_node
@@ -114,7 +114,7 @@ module Punchblock
114
114
  end
115
115
  response.events << event << terminating_event
116
116
  subject.execute
117
- @event.should be == event_node
117
+ expect(@event).to eq(event_node)
118
118
  end
119
119
 
120
120
  it 'should send a complete event to the component node' do
@@ -122,7 +122,7 @@ module Punchblock
122
122
 
123
123
  subject.execute
124
124
 
125
- original_command.complete_event(0.5).reason.should be == expected_complete_reason
125
+ expect(original_command.complete_event(0.5).reason).to eq(expected_complete_reason)
126
126
  end
127
127
  end
128
128
 
@@ -136,10 +136,10 @@ module Punchblock
136
136
  end
137
137
 
138
138
  it 'should send a complete event to the component node' do
139
- ami_client.should_receive(:send_action).once.and_raise error
139
+ expect(ami_client).to receive(:send_action).once.and_raise error
140
140
  expected_complete_reason
141
141
  subject.execute
142
- original_command.complete_event(0.5).reason.should be == expected_complete_reason
142
+ expect(original_command.complete_event(0.5).reason).to eq(expected_complete_reason)
143
143
  end
144
144
  end
145
145
  end
@@ -72,7 +72,7 @@ module Punchblock
72
72
 
73
73
  before do
74
74
  call.stub answered?: true, execute_agi_command: true
75
- call.stub(:channel_var).with('PLAYBACKSTATUS').and_return playbackstatus
75
+ allow(call).to receive(:channel_var).with('PLAYBACKSTATUS').and_return playbackstatus
76
76
  original_command.request!
77
77
  end
78
78
 
@@ -92,9 +92,9 @@ module Punchblock
92
92
  context '#barge_in' do
93
93
  context 'true' do
94
94
  it "should execute an output component on the call and return a ref" do
95
- call.should_receive(:execute_agi_command).once.with('EXEC Playback', 'tt-monkeys')
95
+ expect(call).to receive(:execute_agi_command).once.with('EXEC Playback', 'tt-monkeys')
96
96
  subject.execute
97
- original_command.response(0.1).should be_a Ref
97
+ expect(original_command.response(0.1)).to be_a Ref
98
98
  end
99
99
 
100
100
  context "if output fails to start" do
@@ -116,9 +116,9 @@ module Punchblock
116
116
 
117
117
  context 'false' do
118
118
  it "should execute an output component on the call" do
119
- call.should_receive(:execute_agi_command).once.with('EXEC Playback', 'tt-monkeys')
119
+ expect(call).to receive(:execute_agi_command).once.with('EXEC Playback', 'tt-monkeys')
120
120
  subject.execute
121
- original_command.response(0.1).should be_a Ref
121
+ expect(original_command.response(0.1)).to be_a Ref
122
122
  end
123
123
 
124
124
  context "if output fails to start" do
@@ -132,7 +132,7 @@ module Punchblock
132
132
 
133
133
  it "should return the error returned by output" do
134
134
  subject.execute
135
- original_command.response(0.1).should == output_response
135
+ expect(original_command.response(0.1)).to eq(output_response)
136
136
  end
137
137
  end
138
138
 
@@ -166,10 +166,10 @@ module Punchblock
166
166
  it "should return a match complete event" do
167
167
  expected_event
168
168
  subject.execute
169
- original_command.response(0.1).should be_a Ref
169
+ expect(original_command.response(0.1)).to be_a Ref
170
170
  send_ami_events_for_dtmf 1
171
171
 
172
- connection.events.should include(expected_event)
172
+ expect(connection.events).to include(expected_event)
173
173
  end
174
174
  end
175
175
 
@@ -187,7 +187,7 @@ module Punchblock
187
187
  before { command.request! }
188
188
  it "returns a ProtocolError response" do
189
189
  subject.execute_command command
190
- command.response(0.1).should be_a ProtocolError
190
+ expect(command.response(0.1)).to be_a ProtocolError
191
191
  end
192
192
  end
193
193
 
@@ -207,9 +207,9 @@ module Punchblock
207
207
  end
208
208
 
209
209
  it "sets the command response to true" do
210
- call.should_receive(:redirect_back).once
210
+ expect(call).to receive(:redirect_back).once
211
211
  subject.execute_command command
212
- command.response(0.1).should be == true
212
+ expect(command.response(0.1)).to eq(true)
213
213
  end
214
214
 
215
215
  it "sends the correct complete event" do
@@ -219,14 +219,14 @@ module Punchblock
219
219
  source_uri: subject.id,
220
220
  target_call_id: call.id
221
221
 
222
- call.should_receive(:redirect_back)
222
+ expect(call).to receive(:redirect_back)
223
223
  subject.execute_command command
224
- original_command.should_not be_complete
224
+ expect(original_command).not_to be_complete
225
225
  call.process_ami_event ami_event
226
226
 
227
227
  sleep 0.2
228
228
 
229
- connection.events.should include(expected_event)
229
+ expect(connection.events).to include(expected_event)
230
230
  end
231
231
  end
232
232
  end
@@ -40,11 +40,11 @@ module Punchblock
40
40
  before { original_command.request! }
41
41
 
42
42
  it "calls send_progress on the call" do
43
- call.should_receive(:send_progress)
43
+ expect(call).to receive(:send_progress)
44
44
  subject.execute
45
45
  end
46
46
 
47
- before { call.stub :send_progress }
47
+ before { allow(call).to receive :send_progress }
48
48
 
49
49
  let(:original_command_opts) { {} }
50
50
 
@@ -92,16 +92,16 @@ module Punchblock
92
92
  end
93
93
 
94
94
  it "should send a success complete event with the relevant data" do
95
- reason.should be == expected_event
95
+ expect(reason).to eq(expected_event)
96
96
  end
97
97
 
98
98
  it "should not process further dtmf events" do
99
- subject.should_receive(:process_dtmf).never
99
+ expect(subject).to receive(:process_dtmf).never
100
100
  send_ami_events_for_dtmf 3
101
101
  end
102
102
 
103
103
  it "should not leave the recognizer running" do
104
- Celluloid::Actor.all.map { |a| a.class }.should_not include(Punchblock::Translator::DTMFRecognizer)
104
+ expect(Celluloid::Actor.all.map { |a| a.class }).not_to include(Punchblock::Translator::DTMFRecognizer)
105
105
  end
106
106
  end
107
107
 
@@ -116,7 +116,28 @@ module Punchblock
116
116
  end
117
117
 
118
118
  it "should send a nomatch complete event" do
119
- reason.should be == expected_event
119
+ expect(reason).to eq(expected_event)
120
+ end
121
+ end
122
+
123
+ context "dtmf event received after recognizer has terminated" do
124
+ before do
125
+ send_ami_events_for_dtmf 1
126
+ send_ami_events_for_dtmf '#'
127
+ subject.execute
128
+ end
129
+
130
+ let :expected_event do
131
+ Punchblock::Component::Input::Complete::NoMatch.new
132
+ end
133
+
134
+ it "should not crash the translator if the recognizer is dead" do
135
+ expect(Celluloid::Actor.all.map { |a| a.class }).to include(Punchblock::Translator::DTMFRecognizer)
136
+ recognizer = Celluloid::Actor.all.find { |a| a.class == Punchblock::Translator::DTMFRecognizer }
137
+ recognizer.terminate if recognizer
138
+ expect(Celluloid::Actor.all.map { |a| a.class }).not_to include(Punchblock::Translator::DTMFRecognizer)
139
+ subject.process_dtmf 1 # trigger failure
140
+ expect(Celluloid::Actor.all.map { |a| a.class }).to include(translator.class)
120
141
  end
121
142
  end
122
143
  end
@@ -127,7 +148,7 @@ module Punchblock
127
148
  it "should return an error and not execute any actions" do
128
149
  subject.execute
129
150
  error = ProtocolError.new.setup 'option error', 'A grammar document is required.'
130
- original_command.response(0.1).should be == error
151
+ expect(original_command.response(0.1)).to eq(error)
131
152
  end
132
153
  end
133
154
 
@@ -154,7 +175,7 @@ module Punchblock
154
175
  end
155
176
 
156
177
  it "should use RubySpeech builtin grammar" do
157
- reason.should be == expected_event
178
+ expect(reason).to eq(expected_event)
158
179
  end
159
180
  end
160
181
 
@@ -181,7 +202,7 @@ module Punchblock
181
202
  end
182
203
 
183
204
  it "should use RubySpeech builtin grammar" do
184
- reason.should be == expected_event
205
+ expect(reason).to eq(expected_event)
185
206
  end
186
207
  end
187
208
 
@@ -190,7 +211,7 @@ module Punchblock
190
211
  it "should return an error and not execute any actions" do
191
212
  subject.execute
192
213
  error = ProtocolError.new.setup 'option error', 'Only a single grammar is supported.'
193
- original_command.response(0.1).should be == error
214
+ expect(original_command.response(0.1)).to eq(error)
194
215
  end
195
216
  end
196
217
  end
@@ -201,7 +222,7 @@ module Punchblock
201
222
  it "should return an error and not execute any actions" do
202
223
  subject.execute
203
224
  error = ProtocolError.new.setup 'option error', 'A mode value other than DTMF is unsupported.'
204
- original_command.response(0.1).should be == error
225
+ expect(original_command.response(0.1)).to eq(error)
205
226
  end
206
227
  end
207
228
 
@@ -210,7 +231,7 @@ module Punchblock
210
231
  it "should return an error and not execute any actions" do
211
232
  subject.execute
212
233
  error = ProtocolError.new.setup 'option error', 'A mode value other than DTMF is unsupported.'
213
- original_command.response(0.1).should be == error
234
+ expect(original_command.response(0.1)).to eq(error)
214
235
  end
215
236
  end
216
237
 
@@ -219,7 +240,7 @@ module Punchblock
219
240
  it "should return an error and not execute any actions" do
220
241
  subject.execute
221
242
  error = ProtocolError.new.setup 'option error', 'A mode value other than DTMF is unsupported.'
222
- original_command.response(0.1).should be == error
243
+ expect(original_command.response(0.1)).to eq(error)
223
244
  end
224
245
  end
225
246
  end
@@ -266,11 +287,11 @@ module Punchblock
266
287
  end
267
288
 
268
289
  it "should send a match complete event with the relevant data" do
269
- reason.should be == expected_event
290
+ expect(reason).to eq(expected_event)
270
291
  end
271
292
 
272
293
  it "should not process further dtmf events" do
273
- subject.should_receive(:process_dtmf).never
294
+ expect(subject).to receive(:process_dtmf).never
274
295
  send_ami_events_for_dtmf 3
275
296
  end
276
297
  end
@@ -285,7 +306,7 @@ module Punchblock
285
306
  end
286
307
 
287
308
  it "should send a nomatch complete event with the relevant data" do
288
- reason.should be == expected_event
309
+ expect(reason).to eq(expected_event)
289
310
  end
290
311
  end
291
312
 
@@ -300,7 +321,7 @@ module Punchblock
300
321
  end
301
322
 
302
323
  it "should send a nomatch complete event with the relevant data" do
303
- reason.should be == expected_event
324
+ expect(reason).to eq(expected_event)
304
325
  end
305
326
  end
306
327
  end
@@ -319,7 +340,7 @@ module Punchblock
319
340
  send_ami_events_for_dtmf 1
320
341
  sleep 1.5
321
342
  send_ami_events_for_dtmf 2
322
- reason.should be_a Punchblock::Component::Input::Complete::Match
343
+ expect(reason).to be_a Punchblock::Component::Input::Complete::Match
323
344
  end
324
345
 
325
346
  it "should cause a NoInput complete event to be sent after the timeout" do
@@ -327,7 +348,7 @@ module Punchblock
327
348
  sleep 1.5
328
349
  send_ami_events_for_dtmf 1
329
350
  send_ami_events_for_dtmf 2
330
- reason.should be_a Punchblock::Component::Input::Complete::NoInput
351
+ expect(reason).to be_a Punchblock::Component::Input::Complete::NoInput
331
352
  end
332
353
  end
333
354
 
@@ -335,7 +356,7 @@ module Punchblock
335
356
  let(:original_command_opts) { { :initial_timeout => -1 } }
336
357
 
337
358
  it "should not start a timer" do
338
- subject.should_receive(:begin_initial_timer).never
359
+ expect(subject).to receive(:begin_initial_timer).never
339
360
  subject.execute
340
361
  end
341
362
  end
@@ -344,7 +365,7 @@ module Punchblock
344
365
  let(:original_command_opts) { { :initial_timeout => nil } }
345
366
 
346
367
  it "should not start a timer" do
347
- subject.should_receive(:begin_initial_timer).never
368
+ expect(subject).to receive(:begin_initial_timer).never
348
369
  subject.execute
349
370
  end
350
371
  end
@@ -355,7 +376,7 @@ module Punchblock
355
376
  it "should return an error and not execute any actions" do
356
377
  subject.execute
357
378
  error = ProtocolError.new.setup 'option error', 'An initial timeout value that is negative (and not -1) is invalid.'
358
- original_command.response(0.1).should be == error
379
+ expect(original_command.response(0.1)).to eq(error)
359
380
  end
360
381
  end
361
382
  end
@@ -370,7 +391,7 @@ module Punchblock
370
391
  send_ami_events_for_dtmf 1
371
392
  sleep 0.5
372
393
  send_ami_events_for_dtmf 2
373
- reason.should be_a Punchblock::Component::Input::Complete::Match
394
+ expect(reason).to be_a Punchblock::Component::Input::Complete::Match
374
395
  end
375
396
 
376
397
  it "should cause a NoMatch complete event to be sent after the timeout" do
@@ -379,7 +400,7 @@ module Punchblock
379
400
  send_ami_events_for_dtmf 1
380
401
  sleep 1.5
381
402
  send_ami_events_for_dtmf 2
382
- reason.should be_a Punchblock::Component::Input::Complete::NoMatch
403
+ expect(reason).to be_a Punchblock::Component::Input::Complete::NoMatch
383
404
  end
384
405
 
385
406
  context "with a trailing range repeat" do
@@ -399,7 +420,7 @@ module Punchblock
399
420
  sleep 1.5
400
421
  send_ami_events_for_dtmf 1
401
422
  sleep 1.5
402
- reason.should be_a Punchblock::Component::Input::Complete::NoMatch
423
+ expect(reason).to be_a Punchblock::Component::Input::Complete::NoMatch
403
424
  end
404
425
  end
405
426
 
@@ -410,7 +431,7 @@ module Punchblock
410
431
  instance "dtmf-1 dtmf-1"
411
432
  input '11', mode: :dtmf
412
433
  end
413
- end.root
434
+ end
414
435
  end
415
436
 
416
437
  it "should fire a match on timeout" do
@@ -420,8 +441,8 @@ module Punchblock
420
441
  sleep 0.5
421
442
  send_ami_events_for_dtmf 1
422
443
  sleep 1.5
423
- reason.should be_a Punchblock::Component::Input::Complete::Match
424
- reason.nlsml.should == expected_nlsml
444
+ expect(reason).to be_a Punchblock::Component::Input::Complete::Match
445
+ expect(reason.nlsml).to eq(expected_nlsml)
425
446
  end
426
447
 
427
448
  context "on the first keypress" do
@@ -442,8 +463,8 @@ module Punchblock
442
463
  sleep 0.5
443
464
  send_ami_events_for_dtmf 1
444
465
  sleep 1.5
445
- reason.should be_a Punchblock::Component::Input::Complete::Match
446
- reason.nlsml.should == expected_nlsml
466
+ expect(reason).to be_a Punchblock::Component::Input::Complete::Match
467
+ expect(reason.nlsml).to eq(expected_nlsml)
447
468
  end
448
469
  end
449
470
  end
@@ -454,7 +475,7 @@ module Punchblock
454
475
  let(:original_command_opts) { { :inter_digit_timeout => -1 } }
455
476
 
456
477
  it "should not start a timer" do
457
- subject.should_receive(:begin_inter_digit_timer).never
478
+ expect(subject).to receive(:begin_inter_digit_timer).never
458
479
  subject.execute
459
480
  end
460
481
  end
@@ -463,7 +484,7 @@ module Punchblock
463
484
  let(:original_command_opts) { { :inter_digit_timeout => nil } }
464
485
 
465
486
  it "should not start a timer" do
466
- subject.should_receive(:begin_inter_digit_timer).never
487
+ expect(subject).to receive(:begin_inter_digit_timer).never
467
488
  subject.execute
468
489
  end
469
490
  end
@@ -474,7 +495,7 @@ module Punchblock
474
495
  it "should return an error and not execute any actions" do
475
496
  subject.execute
476
497
  error = ProtocolError.new.setup 'option error', 'An inter-digit timeout value that is negative (and not -1) is invalid.'
477
- original_command.response(0.1).should be == error
498
+ expect(original_command.response(0.1)).to eq(error)
478
499
  end
479
500
  end
480
501
  end
@@ -500,7 +521,7 @@ module Punchblock
500
521
 
501
522
  it "returns a ProtocolError response" do
502
523
  subject.execute_command command
503
- command.response(0.1).should be_a ProtocolError
524
+ expect(command.response(0.1)).to be_a ProtocolError
504
525
  end
505
526
  end
506
527
 
@@ -516,8 +537,8 @@ module Punchblock
516
537
 
517
538
  it "sets the command response to true" do
518
539
  subject.execute_command command
519
- command.response(0.1).should be == true
520
- reason.should be_a Punchblock::Event::Complete::Stop
540
+ expect(command.response(0.1)).to eq(true)
541
+ expect(reason).to be_a Punchblock::Event::Complete::Stop
521
542
  end
522
543
  end
523
544
  end