adhearsion 2.6.4 → 3.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +6 -9
  3. data/CHANGELOG.md +22 -7
  4. data/Gemfile +2 -0
  5. data/README.markdown +4 -5
  6. data/Rakefile +1 -2
  7. data/adhearsion.gemspec +19 -8
  8. data/features/cli_create.feature +19 -3
  9. data/features/step_definitions/cli_steps.rb +0 -11
  10. data/features/support/env.rb +3 -4
  11. data/lib/adhearsion.rb +48 -27
  12. data/lib/adhearsion/call.rb +34 -50
  13. data/lib/adhearsion/call_controller.rb +6 -12
  14. data/lib/adhearsion/call_controller/dial.rb +15 -53
  15. data/lib/adhearsion/call_controller/input.rb +39 -162
  16. data/lib/adhearsion/call_controller/input/ask_grammar_builder.rb +44 -0
  17. data/lib/adhearsion/call_controller/input/menu_builder.rb +136 -0
  18. data/lib/adhearsion/call_controller/input/prompt_builder.rb +78 -0
  19. data/lib/adhearsion/call_controller/input/result.rb +46 -0
  20. data/lib/adhearsion/call_controller/output.rb +48 -67
  21. data/lib/adhearsion/call_controller/output/abstract_player.rb +3 -3
  22. data/lib/adhearsion/call_controller/output/async_player.rb +3 -3
  23. data/lib/adhearsion/call_controller/output/player.rb +1 -1
  24. data/lib/adhearsion/call_controller/record.rb +23 -8
  25. data/lib/adhearsion/calls.rb +1 -1
  26. data/lib/adhearsion/cli_commands/ahn_command.rb +2 -65
  27. data/lib/adhearsion/cli_commands/thor_errors.rb +0 -6
  28. data/lib/adhearsion/configuration.rb +91 -39
  29. data/lib/adhearsion/core_ext/blather/stanza.rb +41 -0
  30. data/lib/adhearsion/core_ext/blather/stanza/presence.rb +13 -0
  31. data/lib/adhearsion/error.rb +5 -0
  32. data/lib/adhearsion/event.rb +21 -0
  33. data/lib/adhearsion/event/active_speaker.rb +11 -0
  34. data/lib/adhearsion/event/answered.rb +11 -0
  35. data/lib/adhearsion/event/asterisk.rb +10 -0
  36. data/lib/adhearsion/event/asterisk/ami.rb +34 -0
  37. data/lib/adhearsion/event/complete.rb +75 -0
  38. data/lib/adhearsion/event/dtmf.rb +11 -0
  39. data/lib/adhearsion/event/end.rb +22 -0
  40. data/lib/adhearsion/event/input_timers_started.rb +9 -0
  41. data/lib/adhearsion/event/joined.rb +17 -0
  42. data/lib/adhearsion/event/offer.rb +14 -0
  43. data/lib/adhearsion/event/ringing.rb +11 -0
  44. data/lib/adhearsion/event/started_speaking.rb +13 -0
  45. data/lib/adhearsion/event/stopped_speaking.rb +13 -0
  46. data/lib/adhearsion/event/unjoined.rb +17 -0
  47. data/lib/adhearsion/events.rb +47 -66
  48. data/lib/adhearsion/foundation.rb +0 -1
  49. data/lib/adhearsion/foundation/object.rb +0 -5
  50. data/lib/adhearsion/generators/app/app_generator.rb +4 -1
  51. data/lib/adhearsion/generators/app/templates/Gemfile.erb +2 -10
  52. data/lib/adhearsion/generators/app/templates/adhearsion.erb +9 -9
  53. data/lib/adhearsion/generators/app/templates/config.ru +7 -0
  54. data/lib/adhearsion/generators/app/templates/en.yml +4 -0
  55. data/lib/adhearsion/generators/app/templates/events.erb +2 -2
  56. data/lib/adhearsion/generators/app/templates/hello_world.wav +0 -0
  57. data/lib/adhearsion/generators/app/templates/simon_game.rb +2 -1
  58. data/lib/adhearsion/generators/app/templates/simon_game_spec.rb +2 -2
  59. data/lib/adhearsion/has_headers.rb +34 -0
  60. data/lib/adhearsion/http_server.rb +37 -0
  61. data/lib/adhearsion/initializer.rb +19 -153
  62. data/lib/adhearsion/logging.rb +6 -25
  63. data/lib/adhearsion/outbound_call.rb +5 -5
  64. data/lib/adhearsion/plugin.rb +1 -0
  65. data/lib/adhearsion/protocol_error.rb +26 -0
  66. data/lib/adhearsion/rayo.rb +30 -0
  67. data/lib/adhearsion/rayo/client.rb +62 -0
  68. data/lib/adhearsion/rayo/client/component_registry.rb +33 -0
  69. data/lib/adhearsion/rayo/command.rb +21 -0
  70. data/lib/adhearsion/rayo/command/accept.rb +16 -0
  71. data/lib/adhearsion/rayo/command/answer.rb +16 -0
  72. data/lib/adhearsion/rayo/command/dial.rb +57 -0
  73. data/lib/adhearsion/rayo/command/hangup.rb +16 -0
  74. data/lib/adhearsion/rayo/command/join.rb +43 -0
  75. data/lib/adhearsion/rayo/command/mute.rb +13 -0
  76. data/lib/adhearsion/rayo/command/redirect.rb +23 -0
  77. data/lib/adhearsion/rayo/command/reject.rb +40 -0
  78. data/lib/adhearsion/rayo/command/unjoin.rb +24 -0
  79. data/lib/adhearsion/rayo/command/unmute.rb +13 -0
  80. data/lib/adhearsion/rayo/command_node.rb +47 -0
  81. data/lib/adhearsion/rayo/component.rb +21 -0
  82. data/lib/adhearsion/rayo/component/asterisk.rb +13 -0
  83. data/lib/adhearsion/rayo/component/asterisk/agi.rb +14 -0
  84. data/lib/adhearsion/rayo/component/asterisk/agi/command.rb +46 -0
  85. data/lib/adhearsion/rayo/component/asterisk/ami.rb +14 -0
  86. data/lib/adhearsion/rayo/component/asterisk/ami/action.rb +61 -0
  87. data/lib/adhearsion/rayo/component/component_node.rb +90 -0
  88. data/lib/adhearsion/rayo/component/input.rb +186 -0
  89. data/lib/adhearsion/rayo/component/output.rb +471 -0
  90. data/lib/adhearsion/rayo/component/prompt.rb +53 -0
  91. data/lib/adhearsion/rayo/component/receive_fax.rb +26 -0
  92. data/lib/adhearsion/rayo/component/record.rb +165 -0
  93. data/lib/adhearsion/rayo/component/send_fax.rb +64 -0
  94. data/lib/adhearsion/rayo/component/stop.rb +11 -0
  95. data/lib/adhearsion/rayo/connection.rb +12 -0
  96. data/lib/adhearsion/rayo/connection/asterisk.rb +74 -0
  97. data/lib/adhearsion/rayo/connection/connected.rb +22 -0
  98. data/lib/adhearsion/rayo/connection/generic_connection.rb +22 -0
  99. data/lib/adhearsion/rayo/connection/xmpp.rb +198 -0
  100. data/lib/adhearsion/rayo/disconnected_error.rb +22 -0
  101. data/lib/adhearsion/{punchblock_plugin → rayo}/initializer.rb +19 -19
  102. data/lib/adhearsion/rayo/rayo_node.rb +127 -0
  103. data/lib/adhearsion/rayo/ref.rb +57 -0
  104. data/lib/adhearsion/statistics.rb +1 -1
  105. data/lib/adhearsion/tasks.rb +1 -2
  106. data/lib/adhearsion/tasks/configuration.rb +1 -1
  107. data/lib/adhearsion/tasks/environment.rb +0 -2
  108. data/lib/adhearsion/tasks/i18n.rb +49 -0
  109. data/lib/adhearsion/translator.rb +11 -0
  110. data/lib/adhearsion/translator/asterisk.rb +234 -0
  111. data/lib/adhearsion/translator/asterisk/agi_app.rb +17 -0
  112. data/lib/adhearsion/translator/asterisk/agi_command.rb +45 -0
  113. data/lib/adhearsion/translator/asterisk/ami_error_converter.rb +20 -0
  114. data/lib/adhearsion/translator/asterisk/call.rb +416 -0
  115. data/lib/adhearsion/translator/asterisk/channel.rb +43 -0
  116. data/lib/adhearsion/translator/asterisk/component.rb +88 -0
  117. data/lib/adhearsion/translator/asterisk/component/asterisk.rb +15 -0
  118. data/lib/adhearsion/translator/asterisk/component/asterisk/agi_command.rb +42 -0
  119. data/lib/adhearsion/translator/asterisk/component/asterisk/ami_action.rb +68 -0
  120. data/lib/adhearsion/translator/asterisk/component/composed_prompt.rb +76 -0
  121. data/lib/adhearsion/translator/asterisk/component/dtmf_recognizer.rb +137 -0
  122. data/lib/adhearsion/translator/asterisk/component/input.rb +34 -0
  123. data/lib/adhearsion/translator/asterisk/component/input_component.rb +90 -0
  124. data/lib/adhearsion/translator/asterisk/component/mrcp_native_prompt.rb +71 -0
  125. data/lib/adhearsion/translator/asterisk/component/mrcp_prompt.rb +55 -0
  126. data/lib/adhearsion/translator/asterisk/component/mrcp_recog_prompt.rb +165 -0
  127. data/lib/adhearsion/translator/asterisk/component/output.rb +233 -0
  128. data/lib/adhearsion/translator/asterisk/component/record.rb +101 -0
  129. data/lib/adhearsion/translator/asterisk/component/stop_by_redirect.rb +30 -0
  130. data/lib/adhearsion/translator/asterisk/unimrcp_app.rb +28 -0
  131. data/lib/adhearsion/uri_list.rb +21 -0
  132. data/lib/adhearsion/version.rb +1 -1
  133. data/spec/adhearsion/call_controller/dial_spec.rb +79 -1420
  134. data/spec/adhearsion/call_controller/input_spec.rb +1141 -237
  135. data/spec/adhearsion/call_controller/output/async_player_spec.rb +10 -10
  136. data/spec/adhearsion/call_controller/output/player_spec.rb +8 -8
  137. data/spec/adhearsion/call_controller/output_spec.rb +162 -215
  138. data/spec/adhearsion/call_controller/record_spec.rb +15 -16
  139. data/spec/adhearsion/call_controller_spec.rb +23 -40
  140. data/spec/adhearsion/call_spec.rb +123 -129
  141. data/spec/adhearsion/calls_spec.rb +3 -3
  142. data/spec/adhearsion/configuration_spec.rb +94 -108
  143. data/spec/adhearsion/event/answered_spec.rb +50 -0
  144. data/spec/adhearsion/event/asterisk/Find Results +402 -0
  145. data/spec/adhearsion/event/asterisk/ami_spec.rb +81 -0
  146. data/spec/adhearsion/event/complete_spec.rb +176 -0
  147. data/spec/adhearsion/event/dtmf_spec.rb +35 -0
  148. data/spec/adhearsion/event/end_spec.rb +85 -0
  149. data/spec/adhearsion/event/input_timers_started_spec.rb +19 -0
  150. data/spec/adhearsion/event/joined_spec.rb +53 -0
  151. data/spec/adhearsion/event/offer_spec.rb +106 -0
  152. data/spec/adhearsion/event/ringing_spec.rb +50 -0
  153. data/spec/adhearsion/event/started_speaking_spec.rb +37 -0
  154. data/spec/adhearsion/event/stopped_speaking_spec.rb +37 -0
  155. data/spec/adhearsion/event/unjoined_spec.rb +48 -0
  156. data/spec/adhearsion/event/untitled +0 -0
  157. data/spec/adhearsion/events_spec.rb +19 -45
  158. data/spec/adhearsion/initializer_spec.rb +12 -184
  159. data/spec/adhearsion/logging_spec.rb +5 -20
  160. data/spec/adhearsion/outbound_call_spec.rb +13 -13
  161. data/spec/adhearsion/plugin_spec.rb +3 -4
  162. data/spec/adhearsion/protocol_error_spec.rb +91 -0
  163. data/spec/adhearsion/rayo/client/component_registry_spec.rb +26 -0
  164. data/spec/adhearsion/rayo/client_spec.rb +134 -0
  165. data/spec/adhearsion/rayo/command/accept_spec.rb +63 -0
  166. data/spec/adhearsion/rayo/command/answer_spec.rb +73 -0
  167. data/spec/adhearsion/rayo/command/dial_spec.rb +156 -0
  168. data/spec/adhearsion/rayo/command/hangup_spec.rb +63 -0
  169. data/spec/adhearsion/rayo/command/join_spec.rb +158 -0
  170. data/spec/adhearsion/rayo/command/mute_spec.rb +32 -0
  171. data/spec/adhearsion/rayo/command/redirect_spec.rb +89 -0
  172. data/spec/adhearsion/rayo/command/reject_spec.rb +117 -0
  173. data/spec/adhearsion/rayo/command/unjoin_spec.rb +82 -0
  174. data/spec/adhearsion/rayo/command/unmute_spec.rb +32 -0
  175. data/spec/adhearsion/rayo/command_node_spec.rb +101 -0
  176. data/spec/adhearsion/rayo/component/asterisk/agi/command_spec.rb +111 -0
  177. data/spec/adhearsion/rayo/component/asterisk/ami/action_spec.rb +173 -0
  178. data/spec/adhearsion/rayo/component/component_node_spec.rb +110 -0
  179. data/spec/adhearsion/rayo/component/input_spec.rb +715 -0
  180. data/spec/adhearsion/rayo/component/output_spec.rb +1030 -0
  181. data/spec/adhearsion/rayo/component/prompt_spec.rb +171 -0
  182. data/spec/adhearsion/rayo/component/receive_fax_spec.rb +136 -0
  183. data/spec/adhearsion/rayo/component/record_spec.rb +497 -0
  184. data/spec/adhearsion/rayo/component/send_fax_spec.rb +144 -0
  185. data/spec/adhearsion/rayo/connection/asterisk_spec.rb +118 -0
  186. data/spec/adhearsion/rayo/connection/xmpp_spec.rb +449 -0
  187. data/spec/adhearsion/rayo/initializer_spec.rb +353 -0
  188. data/spec/adhearsion/rayo/ref_spec.rb +168 -0
  189. data/spec/adhearsion/rayo_spec.rb +7 -0
  190. data/spec/adhearsion/router/route_spec.rb +1 -1
  191. data/spec/adhearsion/statistics_spec.rb +2 -5
  192. data/spec/adhearsion/translator/asterisk/call_spec.rb +2047 -0
  193. data/spec/adhearsion/translator/asterisk/component/asterisk/agi_command_spec.rb +256 -0
  194. data/spec/adhearsion/translator/asterisk/component/asterisk/ami_action_spec.rb +151 -0
  195. data/spec/adhearsion/translator/asterisk/component/composed_prompt_spec.rb +257 -0
  196. data/spec/adhearsion/translator/asterisk/component/input_spec.rb +571 -0
  197. data/spec/adhearsion/translator/asterisk/component/mrcp_native_prompt_spec.rb +774 -0
  198. data/spec/adhearsion/translator/asterisk/component/mrcp_prompt_spec.rb +1244 -0
  199. data/spec/adhearsion/translator/asterisk/component/output_spec.rb +1850 -0
  200. data/spec/adhearsion/translator/asterisk/component/record_spec.rb +426 -0
  201. data/spec/adhearsion/translator/asterisk/component/stop_by_redirect_spec.rb +62 -0
  202. data/spec/adhearsion/translator/asterisk/component_spec.rb +83 -0
  203. data/spec/adhearsion/translator/asterisk_spec.rb +685 -0
  204. data/spec/adhearsion/uri_list_spec.rb +88 -0
  205. data/spec/adhearsion_spec.rb +89 -14
  206. data/spec/fixtures/locale/en.yml +13 -0
  207. data/spec/fixtures/locale/it.yml +13 -0
  208. data/spec/spec_helper.rb +18 -5
  209. data/spec/support/call_controller_test_helpers.rb +3 -2
  210. data/spec/support/initializer_stubs.rb +3 -1
  211. data/spec/support/punchblock_examples.rb +65 -0
  212. data/spec/support/punchblock_mocks.rb +12 -0
  213. metadata +412 -70
  214. data/features/cli_daemon.feature +0 -20
  215. data/features/cli_restart.feature +0 -52
  216. data/features/cli_stop.feature +0 -50
  217. data/lib/adhearsion/call_controller/menu_dsl.rb +0 -21
  218. data/lib/adhearsion/call_controller/menu_dsl/array_match_calculator.rb +0 -26
  219. data/lib/adhearsion/call_controller/menu_dsl/calculated_match.rb +0 -43
  220. data/lib/adhearsion/call_controller/menu_dsl/calculated_match_collection.rb +0 -45
  221. data/lib/adhearsion/call_controller/menu_dsl/fixnum_match_calculator.rb +0 -11
  222. data/lib/adhearsion/call_controller/menu_dsl/match_calculator.rb +0 -40
  223. data/lib/adhearsion/call_controller/menu_dsl/menu.rb +0 -207
  224. data/lib/adhearsion/call_controller/menu_dsl/menu_builder.rb +0 -92
  225. data/lib/adhearsion/call_controller/menu_dsl/range_match_calculator.rb +0 -60
  226. data/lib/adhearsion/call_controller/menu_dsl/string_match_calculator.rb +0 -25
  227. data/lib/adhearsion/call_controller/utility.rb +0 -77
  228. data/lib/adhearsion/foundation/custom_daemonizer.rb +0 -52
  229. data/lib/adhearsion/punchblock_plugin.rb +0 -63
  230. data/scripts/cloc-1.64.pl +0 -10483
  231. data/spec/adhearsion/call_controller/menu_dsl/array_match_calculator_spec.rb +0 -76
  232. data/spec/adhearsion/call_controller/menu_dsl/calculated_match_collection_spec.rb +0 -60
  233. data/spec/adhearsion/call_controller/menu_dsl/calculated_match_spec.rb +0 -61
  234. data/spec/adhearsion/call_controller/menu_dsl/fixnum_match_calculator_spec.rb +0 -39
  235. data/spec/adhearsion/call_controller/menu_dsl/match_calculator_spec.rb +0 -17
  236. data/spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb +0 -165
  237. data/spec/adhearsion/call_controller/menu_dsl/menu_spec.rb +0 -420
  238. data/spec/adhearsion/call_controller/menu_dsl/range_match_calculator_spec.rb +0 -32
  239. data/spec/adhearsion/call_controller/menu_dsl/string_match_calculator_spec.rb +0 -40
  240. data/spec/adhearsion/call_controller/utility_spec.rb +0 -90
  241. data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +0 -356
  242. data/spec/adhearsion/punchblock_plugin_spec.rb +0 -59
@@ -0,0 +1,81 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adhearsion::Event::Asterisk::AMI do
6
+ it 'registers itself' do
7
+ expect(Adhearsion::Rayo::RayoNode.class_from_registration(:event, 'urn:xmpp:rayo:asterisk:ami:1')).to eq(described_class)
8
+ end
9
+
10
+ describe "from a stanza" do
11
+ let :stanza do
12
+ <<-MESSAGE
13
+ <event xmlns="urn:xmpp:rayo:asterisk:ami:1" name="Newchannel">
14
+ <attribute name="Channel" value="SIP/101-3f3f"/>
15
+ <attribute name="State" value="Ring"/>
16
+ </event>
17
+ MESSAGE
18
+ end
19
+
20
+ subject { Adhearsion::Rayo::RayoNode.from_xml parse_stanza(stanza).root, '9f00061', '1' }
21
+
22
+ it { is_expected.to be_instance_of described_class }
23
+
24
+ it_should_behave_like 'event'
25
+
26
+ describe '#name' do
27
+ subject { super().name }
28
+ it { is_expected.to eq('Newchannel') }
29
+ end
30
+
31
+ describe '#headers' do
32
+ subject { super().headers }
33
+ it { is_expected.to eq({'Channel' => 'SIP/101-3f3f', 'State' => 'Ring'}) }
34
+ end
35
+
36
+ describe '#attributes' do
37
+ subject { super().attributes }
38
+ it { is_expected.to eq({'Channel' => 'SIP/101-3f3f', 'State' => 'Ring'}) }
39
+ end # For BC
40
+ end
41
+
42
+ describe "when setting options in initializer" do
43
+ subject do
44
+ described_class.new name: 'Newchannel',
45
+ headers: {'Channel' => 'SIP/101-3f3f', 'State' => 'Ring'}
46
+ end
47
+
48
+ describe '#name' do
49
+ subject { super().name }
50
+ it { is_expected.to eq('Newchannel') }
51
+ end
52
+
53
+ describe '#headers' do
54
+ subject { super().headers }
55
+ it { is_expected.to eq({'Channel' => 'SIP/101-3f3f', 'State' => 'Ring'}) }
56
+ end
57
+
58
+ describe '#attributes' do
59
+ subject { super().attributes }
60
+ it { is_expected.to eq({'Channel' => 'SIP/101-3f3f', 'State' => 'Ring'}) }
61
+ end # For BC
62
+
63
+ describe "exporting to Rayo" do
64
+ it "should export to XML that can be understood by its parser" do
65
+ new_instance = Adhearsion::Rayo::RayoNode.from_xml subject.to_rayo
66
+ expect(new_instance).to be_instance_of described_class
67
+ expect(new_instance.name).to eq('Newchannel')
68
+ expect(new_instance.headers).to eq({'Channel' => 'SIP/101-3f3f', 'State' => 'Ring'})
69
+ expect(new_instance.attributes).to eq({'Channel' => 'SIP/101-3f3f', 'State' => 'Ring'}) # For BC
70
+ end
71
+
72
+ it "should render to a parent node if supplied" do
73
+ doc = Nokogiri::XML::Document.new
74
+ parent = Nokogiri::XML::Node.new 'foo', doc
75
+ doc.root = parent
76
+ rayo_doc = subject.to_rayo(parent)
77
+ expect(rayo_doc).to eq(parent)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,176 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adhearsion::Event::Complete do
6
+ it 'registers itself' do
7
+ expect(Adhearsion::Rayo::RayoNode.class_from_registration(:complete, 'urn:xmpp:rayo:ext:1')).to eq(described_class)
8
+ end
9
+
10
+ describe "setting a reason" do
11
+ let(:reason) { Adhearsion::Event::Complete::Stop.new }
12
+
13
+ describe '#reason' do
14
+ it "should set the reason" do
15
+ subject.reason = reason
16
+ expect(subject.reason).to eq(reason)
17
+ end
18
+ end
19
+ end
20
+
21
+ describe "comparing for equality" do
22
+ subject do
23
+ described_class.new reason: Adhearsion::Event::Complete::Stop.new,
24
+ target_call_id: '1234',
25
+ component_id: 'abcd'
26
+ end
27
+
28
+ let :other_complete do
29
+ described_class.new reason: reason,
30
+ target_call_id: call_id,
31
+ component_id: component_id
32
+ end
33
+
34
+ context 'with reason, call id and component id the same' do
35
+ let(:reason) { Adhearsion::Event::Complete::Stop.new }
36
+ let(:call_id) { '1234' }
37
+ let(:component_id) { 'abcd' }
38
+
39
+ it "should be equal" do
40
+ expect(subject).to eq(other_complete)
41
+ end
42
+ end
43
+
44
+ context 'with a different reason' do
45
+ let(:reason) { Adhearsion::Event::Complete::Hangup.new }
46
+ let(:call_id) { '1234' }
47
+ let(:component_id) { 'abcd' }
48
+
49
+ it "should not be equal" do
50
+ expect(subject).not_to eq(other_complete)
51
+ end
52
+ end
53
+
54
+ context 'with a different call id' do
55
+ let(:reason) { Adhearsion::Event::Complete::Stop.new }
56
+ let(:call_id) { '5678' }
57
+ let(:component_id) { 'abcd' }
58
+
59
+ it "should not be equal" do
60
+ expect(subject).not_to eq(other_complete)
61
+ end
62
+ end
63
+
64
+ context 'with a different component id' do
65
+ let(:reason) { Adhearsion::Event::Complete::Stop.new }
66
+ let(:call_id) { '1234' }
67
+ let(:component_id) { 'efgh' }
68
+
69
+ it "should not be equal" do
70
+ expect(subject).not_to eq(other_complete)
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "from a stanza" do
76
+ let :stanza do
77
+ <<-MESSAGE
78
+ <complete xmlns='urn:xmpp:rayo:ext:1'>
79
+ <stop xmlns='urn:xmpp:rayo:ext:complete:1' />
80
+ </complete>
81
+ MESSAGE
82
+ end
83
+
84
+ subject { Adhearsion::Rayo::RayoNode.from_xml parse_stanza(stanza).root, '9f00061', '1' }
85
+
86
+ it { is_expected.to be_instance_of described_class }
87
+
88
+ it_should_behave_like 'event'
89
+
90
+ describe '#reason' do
91
+ subject { super().reason }
92
+ it { is_expected.to be_instance_of Adhearsion::Event::Complete::Stop }
93
+ end
94
+ end
95
+ end
96
+
97
+ describe Adhearsion::Event::Complete::Stop do
98
+ let :stanza do
99
+ <<-MESSAGE
100
+ <complete xmlns='urn:xmpp:rayo:ext:1'>
101
+ <stop xmlns='urn:xmpp:rayo:ext:complete:1' />
102
+ </complete>
103
+ MESSAGE
104
+ end
105
+
106
+ subject { Adhearsion::Rayo::RayoNode.from_xml(parse_stanza(stanza).root).reason }
107
+
108
+ it { is_expected.to be_instance_of described_class }
109
+
110
+ describe '#name' do
111
+ subject { super().name }
112
+ it { is_expected.to eq(:stop) }
113
+ end
114
+ end
115
+
116
+ describe Adhearsion::Event::Complete::Hangup do
117
+ let :stanza do
118
+ <<-MESSAGE
119
+ <complete xmlns='urn:xmpp:rayo:ext:1'>
120
+ <hangup xmlns='urn:xmpp:rayo:ext:complete:1' />
121
+ </complete>
122
+ MESSAGE
123
+ end
124
+
125
+ subject { Adhearsion::Rayo::RayoNode.from_xml(parse_stanza(stanza).root).reason }
126
+
127
+ it { is_expected.to be_instance_of described_class }
128
+
129
+ describe '#name' do
130
+ subject { super().name }
131
+ it { is_expected.to eq(:hangup) }
132
+ end
133
+ end
134
+
135
+ describe Adhearsion::Event::Complete::Error do
136
+ let :stanza do
137
+ <<-MESSAGE
138
+ <complete xmlns='urn:xmpp:rayo:ext:1'>
139
+ <error xmlns='urn:xmpp:rayo:ext:complete:1'>
140
+ Something really bad happened
141
+ </error>
142
+ </complete>
143
+ MESSAGE
144
+ end
145
+
146
+ subject { Adhearsion::Rayo::RayoNode.from_xml(parse_stanza(stanza).root).reason }
147
+
148
+ it { is_expected.to be_instance_of described_class }
149
+
150
+ describe '#name' do
151
+ subject { super().name }
152
+ it { is_expected.to eq(:error) }
153
+ end
154
+
155
+ describe '#details' do
156
+ subject { super().details }
157
+ it { is_expected.to eq("Something really bad happened") }
158
+ end
159
+
160
+ describe "when setting options in initializer" do
161
+ subject do
162
+ described_class.new :details => 'Ooops'
163
+ end
164
+
165
+ describe '#details' do
166
+ subject { super().details }
167
+ it { is_expected.to eq('Ooops') }
168
+ end
169
+ end
170
+ end
171
+
172
+ describe Adhearsion::Event::Complete::Reason do
173
+ subject { described_class.new name: "Foo" }
174
+
175
+ it { is_expected.to be_a Adhearsion::Event }
176
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adhearsion::Event::DTMF do
6
+ it 'registers itself' do
7
+ expect(Adhearsion::Rayo::RayoNode.class_from_registration(:dtmf, 'urn:xmpp:rayo:1')).to eq(described_class)
8
+ end
9
+
10
+ describe "from a stanza" do
11
+ let(:stanza) { "<dtmf xmlns='urn:xmpp:rayo:1' signal='#' />" }
12
+
13
+ subject { Adhearsion::Rayo::RayoNode.from_xml parse_stanza(stanza).root, '9f00061', '1' }
14
+
15
+ it { is_expected.to be_instance_of described_class }
16
+
17
+ it_should_behave_like 'event'
18
+
19
+ describe '#signal' do
20
+ subject { super().signal }
21
+ it { is_expected.to eq('#') }
22
+ end
23
+ end
24
+
25
+ describe "when setting options in initializer" do
26
+ subject do
27
+ described_class.new :signal => '#'
28
+ end
29
+
30
+ describe '#signal' do
31
+ subject { super().signal }
32
+ it { is_expected.to eq('#') }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,85 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adhearsion::Event::End do
6
+ it 'registers itself' do
7
+ expect(Adhearsion::Rayo::RayoNode.class_from_registration(:end, 'urn:xmpp:rayo:1')).to eq(described_class)
8
+ end
9
+
10
+ describe "from a stanza" do
11
+ let :stanza do
12
+ <<-MESSAGE
13
+ <end xmlns="urn:xmpp:rayo:1">
14
+ <timeout platform-code="18" />
15
+ <!-- Signaling (e.g. SIP) Headers -->
16
+ <header name="X-skill" value="agent" />
17
+ <header name="X-customer-id" value="8877" />
18
+ </end>
19
+ MESSAGE
20
+ end
21
+
22
+ subject { Adhearsion::Rayo::RayoNode.from_xml parse_stanza(stanza).root, '9f00061', '1' }
23
+
24
+ it { is_expected.to be_instance_of described_class }
25
+
26
+ it_should_behave_like 'event'
27
+
28
+ describe '#reason' do
29
+ subject { super().reason }
30
+ it { is_expected.to eq(:timeout) }
31
+ end
32
+
33
+ describe '#platform_code' do
34
+ subject { super().platform_code }
35
+ it { is_expected.to eq('18') }
36
+ end
37
+
38
+ describe '#headers' do
39
+ subject { super().headers }
40
+ it { is_expected.to eq({ 'X-skill' => 'agent', 'X-customer-id' => '8877' }) }
41
+ end
42
+
43
+ context "with no headers or reason provided" do
44
+ let(:stanza) { '<end xmlns="urn:xmpp:rayo:1"/>' }
45
+
46
+ describe '#reason' do
47
+ subject { super().reason }
48
+ it { is_expected.to be_nil}
49
+ end
50
+
51
+ describe '#platform_code' do
52
+ subject { super().platform_code }
53
+ it { is_expected.to be_nil }
54
+ end
55
+
56
+ describe '#headers' do
57
+ subject { super().headers }
58
+ it { is_expected.to eq({}) }
59
+ end
60
+ end
61
+ end
62
+
63
+ describe "when setting options in initializer" do
64
+ subject do
65
+ described_class.new reason: :hangup,
66
+ platform_code: 18,
67
+ headers: { 'X-skill' => 'agent', 'X-customer-id' => '8877' }
68
+ end
69
+
70
+ describe '#reason' do
71
+ subject { super().reason }
72
+ it { is_expected.to eq(:hangup) }
73
+ end
74
+
75
+ describe '#platform_code' do
76
+ subject { super().platform_code }
77
+ it { is_expected.to eq('18') }
78
+ end
79
+
80
+ describe '#headers' do
81
+ subject { super().headers }
82
+ it { is_expected.to eq({ 'X-skill' => 'agent', 'X-customer-id' => '8877' }) }
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adhearsion::Event::InputTimersStarted do
6
+ it 'registers itself' do
7
+ expect(Adhearsion::Rayo::RayoNode.class_from_registration(:'input-timers-started', 'urn:xmpp:rayo:prompt:1')).to eq(described_class)
8
+ end
9
+
10
+ describe "from a stanza" do
11
+ let(:stanza) { "<input-timers-started xmlns='urn:xmpp:rayo:prompt:1' />" }
12
+
13
+ subject { Adhearsion::Rayo::RayoNode.from_xml parse_stanza(stanza).root, '9f00061', '1' }
14
+
15
+ it { is_expected.to be_instance_of described_class }
16
+
17
+ it_should_behave_like 'event'
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Adhearsion::Event::Joined do
6
+ it 'registers itself' do
7
+ expect(Adhearsion::Rayo::RayoNode.class_from_registration(:joined, 'urn:xmpp:rayo:1')).to eq(described_class)
8
+ end
9
+
10
+ describe "from a stanza" do
11
+ let(:stanza) { '<joined xmlns="urn:xmpp:rayo:1" call-uri="b" mixer-name="m" />' }
12
+
13
+ subject { Adhearsion::Rayo::RayoNode.from_xml parse_stanza(stanza).root, '9f00061', '1' }
14
+
15
+ it { is_expected.to be_instance_of described_class }
16
+
17
+ it_should_behave_like 'event'
18
+
19
+ describe '#call_uri' do
20
+ subject { super().call_uri }
21
+ it { is_expected.to eq('b') }
22
+ end
23
+
24
+ describe '#call_id' do
25
+ subject { super().call_id }
26
+ it { is_expected.to eq('b') }
27
+ end
28
+
29
+ describe '#mixer_name' do
30
+ subject { super().mixer_name }
31
+ it { is_expected.to eq('m') }
32
+ end
33
+ end
34
+
35
+ describe "when setting options in initializer" do
36
+ subject { described_class.new :call_uri => 'abc123', :mixer_name => 'blah' }
37
+
38
+ describe '#call_uri' do
39
+ subject { super().call_uri }
40
+ it { is_expected.to eq('abc123') }
41
+ end
42
+
43
+ describe '#call_id' do
44
+ subject { super().call_id }
45
+ it { is_expected.to eq('abc123') }
46
+ end
47
+
48
+ describe '#mixer_name' do
49
+ subject { super().mixer_name }
50
+ it { is_expected.to eq('blah') }
51
+ end
52
+ end
53
+ end