hkroger-websocket-rails 0.7.1
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +328 -0
- data/Gemfile +27 -0
- data/MIT-LICENSE +20 -0
- data/README.md +237 -0
- data/Rakefile +72 -0
- data/bin/thin-socketrails +45 -0
- data/lib/assets/javascripts/websocket_rails/abstract_connection.js.coffee +45 -0
- data/lib/assets/javascripts/websocket_rails/channel.js.coffee +70 -0
- data/lib/assets/javascripts/websocket_rails/event.js.coffee +42 -0
- data/lib/assets/javascripts/websocket_rails/http_connection.js.coffee +66 -0
- data/lib/assets/javascripts/websocket_rails/main.js +6 -0
- data/lib/assets/javascripts/websocket_rails/websocket_connection.js.coffee +29 -0
- data/lib/assets/javascripts/websocket_rails/websocket_rails.js.coffee +158 -0
- data/lib/config.ru +3 -0
- data/lib/generators/websocket_rails/install/install_generator.rb +33 -0
- data/lib/generators/websocket_rails/install/templates/events.rb +14 -0
- data/lib/generators/websocket_rails/install/templates/websocket_rails.rb +63 -0
- data/lib/hkroger-websocket-rails.rb +1 -0
- data/lib/rails/app/controllers/websocket_rails/delegation_controller.rb +13 -0
- data/lib/rails/config/routes.rb +7 -0
- data/lib/rails/tasks/websocket_rails.tasks +42 -0
- data/lib/spec_helpers/matchers/route_matchers.rb +65 -0
- data/lib/spec_helpers/matchers/trigger_matchers.rb +113 -0
- data/lib/spec_helpers/spec_helper_event.rb +34 -0
- data/lib/websocket-rails.rb +108 -0
- data/lib/websocket_rails/base_controller.rb +197 -0
- data/lib/websocket_rails/channel.rb +97 -0
- data/lib/websocket_rails/channel_manager.rb +55 -0
- data/lib/websocket_rails/configuration.rb +169 -0
- data/lib/websocket_rails/connection_adapters.rb +195 -0
- data/lib/websocket_rails/connection_adapters/http.rb +120 -0
- data/lib/websocket_rails/connection_adapters/web_socket.rb +36 -0
- data/lib/websocket_rails/connection_manager.rb +119 -0
- data/lib/websocket_rails/controller_factory.rb +80 -0
- data/lib/websocket_rails/data_store.rb +145 -0
- data/lib/websocket_rails/dispatcher.rb +129 -0
- data/lib/websocket_rails/engine.rb +26 -0
- data/lib/websocket_rails/event.rb +189 -0
- data/lib/websocket_rails/event_map.rb +184 -0
- data/lib/websocket_rails/event_queue.rb +33 -0
- data/lib/websocket_rails/internal_events.rb +37 -0
- data/lib/websocket_rails/logging.rb +133 -0
- data/lib/websocket_rails/spec_helpers.rb +3 -0
- data/lib/websocket_rails/synchronization.rb +182 -0
- data/lib/websocket_rails/user_manager.rb +276 -0
- data/lib/websocket_rails/version.rb +3 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/chat_controller.rb +53 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/user.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +45 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +22 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +26 -0
- data/spec/dummy/config/environments/production.rb +49 -0
- data/spec/dummy/config/environments/test.rb +34 -0
- data/spec/dummy/config/events.rb +7 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20130902222552_create_users.rb +10 -0
- data/spec/dummy/db/schema.rb +23 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +17 -0
- data/spec/dummy/log/production.log +0 -0
- data/spec/dummy/log/server.log +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/public/javascripts/application.js +2 -0
- data/spec/dummy/public/javascripts/controls.js +965 -0
- data/spec/dummy/public/javascripts/dragdrop.js +974 -0
- data/spec/dummy/public/javascripts/effects.js +1123 -0
- data/spec/dummy/public/javascripts/prototype.js +6001 -0
- data/spec/dummy/public/javascripts/rails.js +202 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/integration/connection_manager_spec.rb +135 -0
- data/spec/javascripts/support/jasmine.yml +52 -0
- data/spec/javascripts/support/jasmine_helper.rb +38 -0
- data/spec/javascripts/support/vendor/sinon-1.7.1.js +4343 -0
- data/spec/javascripts/websocket_rails/channel_spec.coffee +112 -0
- data/spec/javascripts/websocket_rails/event_spec.coffee +69 -0
- data/spec/javascripts/websocket_rails/helpers.coffee +6 -0
- data/spec/javascripts/websocket_rails/websocket_connection_spec.coffee +158 -0
- data/spec/javascripts/websocket_rails/websocket_rails_spec.coffee +274 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/spec_helpers/matchers/route_matchers_spec.rb +109 -0
- data/spec/spec_helpers/matchers/trigger_matchers_spec.rb +247 -0
- data/spec/spec_helpers/spec_helper_event_spec.rb +66 -0
- data/spec/support/helper_methods.rb +42 -0
- data/spec/support/mock_web_socket.rb +41 -0
- data/spec/unit/base_controller_spec.rb +74 -0
- data/spec/unit/channel_manager_spec.rb +58 -0
- data/spec/unit/channel_spec.rb +169 -0
- data/spec/unit/connection_adapters/http_spec.rb +88 -0
- data/spec/unit/connection_adapters/web_socket_spec.rb +30 -0
- data/spec/unit/connection_adapters_spec.rb +259 -0
- data/spec/unit/connection_manager_spec.rb +148 -0
- data/spec/unit/controller_factory_spec.rb +76 -0
- data/spec/unit/data_store_spec.rb +106 -0
- data/spec/unit/dispatcher_spec.rb +203 -0
- data/spec/unit/event_map_spec.rb +120 -0
- data/spec/unit/event_queue_spec.rb +36 -0
- data/spec/unit/event_spec.rb +181 -0
- data/spec/unit/logging_spec.rb +162 -0
- data/spec/unit/synchronization_spec.rb +150 -0
- data/spec/unit/target_validator_spec.rb +88 -0
- data/spec/unit/user_manager_spec.rb +165 -0
- metadata +320 -0
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
ENV["RAILS_ENV"] ||= 'test'
|
|
2
|
+
|
|
3
|
+
require 'simplecov'
|
|
4
|
+
SimpleCov.start if ENV["COVERAGE"]
|
|
5
|
+
|
|
6
|
+
require File.expand_path("../../spec/dummy/config/environment", __FILE__)
|
|
7
|
+
require 'rspec/rails'
|
|
8
|
+
require 'rspec/autorun'
|
|
9
|
+
require 'thin'
|
|
10
|
+
|
|
11
|
+
$:.push File.expand_path("../../lib", __FILE__)
|
|
12
|
+
require 'websocket-rails'
|
|
13
|
+
|
|
14
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
15
|
+
# in spec/support/ and its subdirectories.
|
|
16
|
+
Dir["./spec/support/**/*.rb"].each {|f| require f}
|
|
17
|
+
require 'websocket_rails/spec_helpers'
|
|
18
|
+
require 'rspec-matchers-matchers'
|
|
19
|
+
|
|
20
|
+
RSpec.configure do |config|
|
|
21
|
+
# == Mock Framework
|
|
22
|
+
#
|
|
23
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
|
24
|
+
#
|
|
25
|
+
# config.mock_with :mocha
|
|
26
|
+
# config.mock_with :flexmock
|
|
27
|
+
# config.mock_with :rr
|
|
28
|
+
config.mock_with :rspec
|
|
29
|
+
|
|
30
|
+
config.include WebsocketRails::HelperMethods
|
|
31
|
+
|
|
32
|
+
# If true, the base class of anonymous controllers will be inferred
|
|
33
|
+
# automatically. This will be the default behavior in future versions of
|
|
34
|
+
# rspec-rails.
|
|
35
|
+
config.infer_base_class_for_anonymous_controllers = false
|
|
36
|
+
|
|
37
|
+
config.before(:each) do
|
|
38
|
+
WebsocketRails.config.logger = Logger.new(StringIO.new)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'Route Matchers' do
|
|
4
|
+
|
|
5
|
+
class RouteSpecProductController < WebsocketRails::BaseController
|
|
6
|
+
|
|
7
|
+
def update_product
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def delete_product
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class RouteSpecWarehouseController < WebsocketRails::BaseController
|
|
16
|
+
|
|
17
|
+
def remove_product
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def define_route_test_events
|
|
23
|
+
WebsocketRails.config.route_block = nil
|
|
24
|
+
WebsocketRails::EventMap.describe do
|
|
25
|
+
|
|
26
|
+
namespace :product do
|
|
27
|
+
subscribe :update, :to => RouteSpecProductController, :with_method => :update_product
|
|
28
|
+
subscribe :delete, :to => RouteSpecProductController, :with_method => :delete_product
|
|
29
|
+
subscribe :delete, :to => RouteSpecWarehouseController, :with_method => :remove_product
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
before { define_route_test_events }
|
|
35
|
+
|
|
36
|
+
describe 'be_routed_to' do
|
|
37
|
+
|
|
38
|
+
it 'should return true when the event is routed only to the specified controller' do
|
|
39
|
+
create_event('product.update', nil).should be_routed_to 'route_spec_product#update_product'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'should return true when the event is routed also to the specified controller' do
|
|
43
|
+
create_event('product.delete', nil).should be_routed_to 'route_spec_product#delete_product'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should return false when the event is not routed to the specified controller' do
|
|
47
|
+
create_event('product.update', nil).should_not be_routed_to 'route_spec_product#delete_product'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'should produce the correct failure message' do
|
|
51
|
+
event = create_event('route_spec_product.update', nil)
|
|
52
|
+
matcher = be_routed_to 'route_spec_product#delete_product'
|
|
53
|
+
cache_messages_for_matcher(matcher, event)
|
|
54
|
+
matcher.should produce_as_failure_message 'expected event update to be routed to target route_spec_product#delete_product'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should produce the correct negative failure message' do
|
|
58
|
+
event = create_event('product.update', nil)
|
|
59
|
+
matcher = be_routed_to 'route_spec_product#update_product'
|
|
60
|
+
cache_messages_for_matcher(matcher, event)
|
|
61
|
+
matcher.should produce_as_negative_failure_message 'expected event update not to be routed to target route_spec_product#update_product'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should produce the correct description' do
|
|
65
|
+
event = create_event('product.update', nil)
|
|
66
|
+
matcher = be_routed_to 'route_spec_product#update_product'
|
|
67
|
+
cache_messages_for_matcher(matcher, event)
|
|
68
|
+
matcher.should produce_as_description 'be routed to target route_spec_product#update_product'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
describe 'be_routed_only_to' do
|
|
74
|
+
|
|
75
|
+
it 'should return true when the event is routed only to the specified controller' do
|
|
76
|
+
create_event('product.update', nil).should be_routed_only_to 'route_spec_product#update_product'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'should return false when the event is routed also to the specified controller' do
|
|
80
|
+
create_event('product.delete', nil).should_not be_routed_only_to 'route_spec_product#delete_product'
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'should return false when the event is not routed to the specified controller' do
|
|
84
|
+
create_event('product.update', nil).should_not be_routed_only_to 'route_spec_product#delete_product'
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it 'should produce the correct failure message' do
|
|
88
|
+
event = create_event('product.update', nil)
|
|
89
|
+
matcher = be_routed_only_to 'route_spec_product#delete_product'
|
|
90
|
+
cache_messages_for_matcher(matcher, event)
|
|
91
|
+
matcher.should produce_as_failure_message 'expected event update to be routed only to target route_spec_product#delete_product'
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it 'should produce the correct negative failure message' do
|
|
95
|
+
event = create_event('product.update', nil)
|
|
96
|
+
matcher = be_routed_only_to 'route_spec_product#update_product'
|
|
97
|
+
cache_messages_for_matcher(matcher, event)
|
|
98
|
+
matcher.should produce_as_negative_failure_message 'expected event update not to be routed only to target route_spec_product#update_product'
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'should produce the correct description' do
|
|
102
|
+
event = create_event('product.update', nil)
|
|
103
|
+
matcher = be_routed_only_to 'route_spec_product#update_product'
|
|
104
|
+
cache_messages_for_matcher(matcher, event)
|
|
105
|
+
matcher.should produce_as_description 'be routed only to target route_spec_product#update_product'
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'Trigger Matchers' do
|
|
4
|
+
|
|
5
|
+
class TriggerSpecProductController < WebsocketRails::BaseController
|
|
6
|
+
|
|
7
|
+
# a method that does not trigger messages
|
|
8
|
+
def update_product
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def delete_product
|
|
12
|
+
data = message[:data] ? 'Return Data' : nil
|
|
13
|
+
if message[:confirm_delete]
|
|
14
|
+
trigger_success(data)
|
|
15
|
+
else
|
|
16
|
+
trigger_failure(data)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def define_test_events
|
|
23
|
+
WebsocketRails.config.route_block = nil
|
|
24
|
+
WebsocketRails::EventMap.describe do
|
|
25
|
+
|
|
26
|
+
namespace :product do
|
|
27
|
+
subscribe :update, :to => TriggerSpecProductController, :with_method => :update_product
|
|
28
|
+
subscribe :delete, :to => TriggerSpecProductController, :with_method => :delete_product
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
before { define_test_events }
|
|
34
|
+
|
|
35
|
+
# as we have have 16 possible combinations of trigger messages and data matching pattern (data|no_data, success|failure,
|
|
36
|
+
# no_checking|checking_with_any|checking_with_nil|checking_with_exact_data) plus the case of no message at all
|
|
37
|
+
# for EACH of the matchers, resulting in a total 51 cases, we will not extensively test all cases for all matchers
|
|
38
|
+
# but we just make sure that coverage is 100%
|
|
39
|
+
|
|
40
|
+
describe 'trigger_message' do
|
|
41
|
+
|
|
42
|
+
it 'should return false when the event does not trigger any message' do
|
|
43
|
+
create_event('product.update', nil).dispatch.should_not trigger_message
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should produce the correct failure message when no trigger is generated' do
|
|
47
|
+
event = create_event('product.update', nil).dispatch
|
|
48
|
+
matcher = trigger_message
|
|
49
|
+
cache_messages_for_matcher(matcher, event)
|
|
50
|
+
matcher.should produce_as_failure_message 'expected product.update to trigger message, instead it did not trigger any message'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'should return true when the message is a failure' do
|
|
54
|
+
create_event('product.delete', {confirm_delete: false, data: true}).dispatch.should trigger_message
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'should return true when the message is a success' do
|
|
58
|
+
create_event('product.delete', {confirm_delete: true, data: false}).dispatch.should trigger_message
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when a message is triggered with no data' do
|
|
62
|
+
|
|
63
|
+
it 'should return true when no check is done' do
|
|
64
|
+
create_event('product.delete', {confirm_delete: true, data: false}).dispatch.should trigger_message
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'should produce the correct negative failure message when no check on data is done' do
|
|
68
|
+
event = create_event('product.delete', {confirm_delete: true, data: false}).dispatch
|
|
69
|
+
matcher = trigger_message
|
|
70
|
+
cache_messages_for_matcher(matcher, event)
|
|
71
|
+
matcher.should produce_as_negative_failure_message 'expected product.delete not to trigger message'
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'should return true when explicitly checking no data' do
|
|
75
|
+
create_event('product.delete', {confirm_delete: false, data: false}).dispatch.should trigger_message :nil
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'should produce the correct negative failure message when explicitly checking no data' do
|
|
79
|
+
event = create_event('product.delete', {confirm_delete: true, data: false}).dispatch
|
|
80
|
+
matcher = trigger_message :nil
|
|
81
|
+
cache_messages_for_matcher(matcher, event)
|
|
82
|
+
matcher.should produce_as_negative_failure_message 'expected product.delete not to trigger message with no data'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'should return false when checking for some data' do
|
|
86
|
+
create_event('product.delete', {confirm_delete: true, data: false}).dispatch.should_not trigger_message :any
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'should return the correct failure message when checking for some data' do
|
|
90
|
+
event = create_event('product.delete', {confirm_delete: true, data: false}).dispatch
|
|
91
|
+
matcher = trigger_message :any
|
|
92
|
+
cache_messages_for_matcher(matcher, event)
|
|
93
|
+
matcher.should produce_as_failure_message 'expected product.delete to trigger message with some data, instead it triggered message with no data'
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'should return false when checking for specific data' do
|
|
97
|
+
create_event('product.delete', {confirm_delete: false, data: false}).dispatch.should_not trigger_message 'Expected Data'
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'should return the correct failure message when checking for specific data' do
|
|
101
|
+
event = create_event('product.delete', {confirm_delete: true, data: false}).dispatch
|
|
102
|
+
matcher = trigger_message 'Expected Data'
|
|
103
|
+
cache_messages_for_matcher(matcher, event)
|
|
104
|
+
matcher.should produce_as_failure_message 'expected product.delete to trigger message with data Expected Data, instead it triggered message with no data'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context 'when a message is triggered with some data' do
|
|
110
|
+
|
|
111
|
+
it 'should return true when no check is done' do
|
|
112
|
+
create_event('product.delete', {confirm_delete: true, data: true}).dispatch.should trigger_message
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'should return false when explicitly checking no data' do
|
|
116
|
+
create_event('product.delete', {confirm_delete: false, data: true}).dispatch.should_not trigger_message :nil
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it 'should produce the correct failure message when explicitly checking for no data' do
|
|
120
|
+
event = create_event('product.delete', {confirm_delete: false, data: true}).dispatch
|
|
121
|
+
matcher = trigger_message :nil
|
|
122
|
+
cache_messages_for_matcher(matcher, event)
|
|
123
|
+
matcher.should produce_as_failure_message 'expected product.delete to trigger message with no data, instead it triggered message with data Return Data'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'should return true when checking for some data' do
|
|
127
|
+
create_event('product.delete', {confirm_delete: true, data: true}).dispatch.should trigger_message :any
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
it 'should produce the correct negative failure message when checking for some data' do
|
|
131
|
+
event = create_event('product.delete', {confirm_delete: false, data: true}).dispatch
|
|
132
|
+
matcher = trigger_message :any
|
|
133
|
+
cache_messages_for_matcher(matcher, event)
|
|
134
|
+
matcher.should produce_as_negative_failure_message 'expected product.delete not to trigger message with some data'
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
it 'should return false when checking for specific data with wrong data' do
|
|
138
|
+
create_event('product.delete', {confirm_delete: false, data: true}).dispatch.should_not trigger_message 'Wrong Data'
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'should produce the correct failure message when checking for specific data' do
|
|
142
|
+
event = create_event('product.delete', {confirm_delete: false, data: true}).dispatch
|
|
143
|
+
matcher = trigger_message 'Wrong Data'
|
|
144
|
+
cache_messages_for_matcher(matcher, event)
|
|
145
|
+
matcher.should produce_as_failure_message 'expected product.delete to trigger message with data Wrong Data, instead it triggered message with data Return Data'
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it 'should return true when checking for specific data with correct data' do
|
|
149
|
+
create_event('product.delete', {confirm_delete: true, data: true}).dispatch.should trigger_message 'Return Data'
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it 'should produce the correct negative failure message when checking for specific data' do
|
|
153
|
+
event = create_event('product.delete', {confirm_delete: false, data: true}).dispatch
|
|
154
|
+
matcher = trigger_message 'Return Data'
|
|
155
|
+
cache_messages_for_matcher(matcher, event)
|
|
156
|
+
matcher.should produce_as_negative_failure_message 'expected product.delete not to trigger message with data Return Data'
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it 'should produce the correct description' do
|
|
162
|
+
event = create_event('product.update', nil)
|
|
163
|
+
matcher = trigger_message 'Return Data'
|
|
164
|
+
cache_messages_for_matcher(matcher, event)
|
|
165
|
+
matcher.should produce_as_description 'trigger message with data Return Data'
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
describe 'trigger_success_message' do
|
|
172
|
+
|
|
173
|
+
it 'should return false when the method does not trigger any message' do
|
|
174
|
+
create_event('product.update', nil).dispatch.should_not trigger_success_message
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it 'should produce the correct failure message when the method does not trigger any message' do
|
|
178
|
+
event = create_event('product.update', nil).dispatch
|
|
179
|
+
matcher = trigger_success_message 'Return Data'
|
|
180
|
+
cache_messages_for_matcher(matcher, event)
|
|
181
|
+
matcher.should produce_as_failure_message 'expected product.update to trigger success message with data Return Data, instead it did not trigger any message'
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it 'should return true when the method triggers a success message' do
|
|
185
|
+
create_event('product.delete', {confirm_delete: true, data: true}).dispatch.should trigger_success_message
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it 'should produce the correct negative failure message when the method triggers a success message' do
|
|
189
|
+
event = create_event('product.delete', {confirm_delete: true, data: true}).dispatch
|
|
190
|
+
matcher = trigger_success_message :any
|
|
191
|
+
cache_messages_for_matcher(matcher, event)
|
|
192
|
+
matcher.should produce_as_negative_failure_message 'expected product.delete not to trigger success message with some data'
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
it 'should return false when the method triggers a failure message' do
|
|
196
|
+
create_event('product.delete', {confirm_delete: false, data: true}).dispatch.should_not trigger_success_message
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
it 'should produce the correct failure message when the method triggers a failure message' do
|
|
200
|
+
event = create_event('product.delete', {confirm_delete: false, data: true}).dispatch
|
|
201
|
+
matcher = trigger_success_message
|
|
202
|
+
cache_messages_for_matcher(matcher, event)
|
|
203
|
+
matcher.should produce_as_failure_message 'expected product.delete to trigger success message, instead it triggered a failure message with data Return Data'
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe 'trigger_failure_message' do
|
|
209
|
+
|
|
210
|
+
it 'should return false when the method does not trigger any message' do
|
|
211
|
+
create_event('product.update', nil).dispatch.should_not trigger_failure_message
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
it 'should produce the correct failure message when the method does not trigger any message' do
|
|
215
|
+
event = create_event('product.update', nil).dispatch
|
|
216
|
+
matcher = trigger_failure_message 'Return Data'
|
|
217
|
+
cache_messages_for_matcher(matcher, event)
|
|
218
|
+
matcher.should produce_as_failure_message 'expected product.update to trigger failure message with data Return Data, instead it did not trigger any message'
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
it 'should return false when the method triggers a success message' do
|
|
222
|
+
create_event('product.delete', {confirm_delete: true, data: true}).dispatch.should_not trigger_failure_message
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it 'should produce the correct failure message when the method triggers a success message' do
|
|
226
|
+
event = create_event('product.delete', {confirm_delete: true, data: false}).dispatch
|
|
227
|
+
matcher = trigger_failure_message :any
|
|
228
|
+
cache_messages_for_matcher(matcher, event)
|
|
229
|
+
matcher.should produce_as_failure_message 'expected product.delete to trigger failure message with some data, instead it triggered a success message with no data'
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
it 'should return true when the method triggers a failure message' do
|
|
234
|
+
create_event('product.delete', {confirm_delete: false, data: true}).dispatch.should trigger_failure_message
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
it 'should produce the correct negative failure message when the method triggers a failure message' do
|
|
238
|
+
event = create_event('product.delete', {confirm_delete: false, data: true}).dispatch
|
|
239
|
+
matcher = trigger_failure_message
|
|
240
|
+
cache_messages_for_matcher(matcher, event)
|
|
241
|
+
matcher.should produce_as_negative_failure_message 'expected product.delete not to trigger failure message'
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module WebsocketRails
|
|
4
|
+
|
|
5
|
+
describe SpecHelperEvent do
|
|
6
|
+
|
|
7
|
+
before do
|
|
8
|
+
@dispatcher = double(:dispatcher)
|
|
9
|
+
Dispatcher.stub(:new).and_return @dispatcher
|
|
10
|
+
@event = SpecHelperEvent.new('my_event', data: 'my_data')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe 'initialize' do
|
|
14
|
+
|
|
15
|
+
it 'should initialize the name and namespace of the event' do
|
|
16
|
+
@event.namespace.should == [:global]
|
|
17
|
+
@event.name.should == :my_event
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'should initialize the data of the event' do
|
|
21
|
+
@event.data.should == 'my_data'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'should set the event to not triggered' do
|
|
25
|
+
@event.should_not be_triggered
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'trigger' do
|
|
31
|
+
|
|
32
|
+
it 'should set the triggered variable to true' do
|
|
33
|
+
@event.trigger
|
|
34
|
+
@event.should be_triggered
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe 'dispatch' do
|
|
40
|
+
|
|
41
|
+
it 'should invoke dispatch on the dispatcher object' do
|
|
42
|
+
@dispatcher.should_receive(:dispatch).with(@event)
|
|
43
|
+
@event.dispatch
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'should return itself to be able to chain matchers' do
|
|
47
|
+
@dispatcher.stub(:dispatch)
|
|
48
|
+
@event.dispatch.should == @event
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe 'create_event' do
|
|
58
|
+
|
|
59
|
+
it 'should create a SpecHelperEvent with the correct parameters' do
|
|
60
|
+
event = create_event('my_event','my_data')
|
|
61
|
+
event.should be_a WebsocketRails::SpecHelperEvent
|
|
62
|
+
event.name.should == :my_event
|
|
63
|
+
event.data.should == 'my_data'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|