rhoconnect 4.0.4 → 5.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +5 -13
  2. data/CHANGELOG.md +54 -5
  3. data/CREDITS +219 -219
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +68 -79
  6. data/Rakefile +1 -2
  7. data/bench/benchapp/spec/models/ruby/mock_adapter_spec.rb +17 -17
  8. data/bench/benchapp/spec/models/ruby/queue_mock_adapter_spec.rb +17 -17
  9. data/bench/benchapp/spec/spec_helper.rb +3 -3
  10. data/bench/blobapp/spec/models/ruby/blob_adapter_spec.rb +17 -17
  11. data/bench/blobapp/spec/spec_helper.rb +3 -3
  12. data/bench/lib/bench/runner.rb +1 -69
  13. data/bench/lib/bench.rb +18 -18
  14. data/bench/spec/mock_adapter_spec.rb +54 -55
  15. data/bench/spec/mock_client_spec.rb +47 -48
  16. data/bench/spec/result_spec.rb +41 -44
  17. data/bench/spec/utils_spec.rb +24 -25
  18. data/commands/generators/app.rb +7 -5
  19. data/commands/generators/controller.rb +7 -5
  20. data/commands/generators/model.rb +7 -5
  21. data/commands/generators/source.rb +7 -5
  22. data/commands/parser.rb +1 -1
  23. data/commands/redis/redis_download.rb +1 -1
  24. data/doc/async-jobs.txt +9 -9
  25. data/doc/supported-platforms.txt +0 -2
  26. data/generators/rhoconnect.rb +92 -212
  27. data/generators/templates/application/rcgemfile +3 -3
  28. data/generators/templates/application/spec/application_controller_spec.rb +14 -16
  29. data/generators/templates/application/spec/js_spec.rb +20 -20
  30. data/generators/templates/application/spec/spec_helper.rb +1 -1
  31. data/generators/templates/source/controllers/ruby/controller_spec.rb +18 -19
  32. data/generators/templates/source/models/ruby/model_spec.rb +17 -17
  33. data/install.sh +10 -21
  34. data/installer/unix-like/rho_connect_install_constants.rb +5 -5
  35. data/installer/unix-like/rho_connect_install_installers.rb +4 -4
  36. data/installer/utils/constants.rb +6 -6
  37. data/installer/utils/nix_install_test.rb +29 -29
  38. data/installer/utils/package_upload/repos.rake +16 -26
  39. data/js-adapters/node.rb +4 -4
  40. data/js-adapters/node_channel.rb +4 -8
  41. data/lib/rhoconnect/db_adapter.rb +13 -13
  42. data/lib/rhoconnect/handler/changes/engine.rb +1 -1
  43. data/lib/rhoconnect/jobs/bulk_data_job.rb +29 -29
  44. data/lib/rhoconnect/license.rb +7 -7
  45. data/lib/rhoconnect/model/helpers/find_duplicates_on_update.rb +13 -13
  46. data/lib/rhoconnect/ping/apple.rb +4 -4
  47. data/lib/rhoconnect/server.rb +2 -2
  48. data/lib/rhoconnect/source.rb +2 -2
  49. data/lib/rhoconnect/store.rb +12 -6
  50. data/lib/rhoconnect/utilities.rb +2 -2
  51. data/lib/rhoconnect/version.rb +1 -1
  52. data/lib/rhoconnect.rb +6 -4
  53. data/rhoconnect.gemspec +5 -6
  54. data/spec/api/api_helper.rb +1 -1
  55. data/spec/api/app/fast_delete_spec.rb +22 -22
  56. data/spec/api/app/fast_insert_spec.rb +23 -23
  57. data/spec/api/app/fast_update_spec.rb +63 -63
  58. data/spec/api/app/push_deletes_spec.rb +11 -13
  59. data/spec/api/app/push_objects_spec.rb +39 -39
  60. data/spec/api/client/client_get_db_doc_spec.rb +29 -29
  61. data/spec/api/client/client_set_db_doc_spec.rb +11 -11
  62. data/spec/api/client/get_client_params_spec.rb +29 -29
  63. data/spec/api/client/list_client_docs_spec.rb +32 -34
  64. data/spec/api/client/reset_spec.rb +30 -30
  65. data/spec/api/readstate/set_refresh_time_spec.rb +43 -43
  66. data/spec/api/source/get_source_params_spec.rb +32 -34
  67. data/spec/api/source/list_sources_spec.rb +13 -13
  68. data/spec/api/source/update_source_params_spec.rb +19 -19
  69. data/spec/api/store/get_db_doc_spec.rb +27 -27
  70. data/spec/api/store/set_db_doc_spec.rb +38 -38
  71. data/spec/api/system/adapter_spec.rb +27 -29
  72. data/spec/api/system/get_license_info_spec.rb +11 -11
  73. data/spec/api/system/login_spec.rb +37 -37
  74. data/spec/api/system/reset_spec.rb +15 -15
  75. data/spec/api/system/stats_spec.rb +70 -71
  76. data/spec/api/user/create_user_spec.rb +37 -37
  77. data/spec/api/user/delete_client_spec.rb +7 -7
  78. data/spec/api/user/delete_user_spec.rb +62 -62
  79. data/spec/api/user/list_clients_spec.rb +24 -24
  80. data/spec/api/user/list_source_docs_spec.rb +29 -29
  81. data/spec/api/user/list_users_spec.rb +22 -22
  82. data/spec/api/user/ping_spec.rb +18 -18
  83. data/spec/api/user/show_user_spec.rb +10 -10
  84. data/spec/api/user/update_user_spec.rb +43 -43
  85. data/spec/api/user/user_get_db_doc_spec.rb +12 -12
  86. data/spec/api/user/user_set_db_doc_spec.rb +37 -37
  87. data/spec/api_token_spec.rb +8 -8
  88. data/spec/app_spec.rb +18 -17
  89. data/spec/apps/jstestapp/settings/settings.yml +2 -0
  90. data/spec/async_spec.rb +9 -11
  91. data/spec/bulk_data/bulk_data_spec.rb +120 -120
  92. data/spec/cli/cli_spec.rb +50 -53
  93. data/spec/client_spec.rb +105 -105
  94. data/spec/client_sync_spec.rb +529 -528
  95. data/spec/controllers/js_base_spec.rb +147 -141
  96. data/spec/doc/doc_spec.rb +51 -52
  97. data/spec/document_spec.rb +58 -58
  98. data/spec/dynamic_adapter_spec.rb +33 -36
  99. data/spec/generator/generator_spec.rb +76 -42
  100. data/spec/jobs/bulk_data_job_spec.rb +101 -102
  101. data/spec/jobs/ping_job_spec.rb +176 -177
  102. data/spec/jobs/source_job_spec.rb +24 -25
  103. data/spec/license_spec.rb +54 -55
  104. data/spec/models/js_base_spec.rb +121 -120
  105. data/spec/perf/bulk_data_perf_spec.rb +23 -24
  106. data/spec/perf/perf_spec_helper.rb +7 -7
  107. data/spec/perf/store_perf_spec.rb +139 -140
  108. data/spec/ping/apple_spec.rb +65 -65
  109. data/spec/ping/gcm_spec.rb +83 -84
  110. data/spec/ping/rhoconnect_push_spec.rb +52 -53
  111. data/spec/predefined_adapters/rho_internal_bench_adapter_controller_js_spec.rb +100 -101
  112. data/spec/predefined_adapters/rho_internal_js_bench_adapter_js_spec.rb +29 -31
  113. data/spec/read_state_spec.rb +24 -25
  114. data/spec/rhoconnect_spec.rb +7 -7
  115. data/spec/server/server_spec.rb +664 -662
  116. data/spec/server/stats_spec.rb +12 -12
  117. data/spec/source_adapter_spec.rb +124 -125
  118. data/spec/source_spec.rb +148 -149
  119. data/spec/source_sync_spec.rb +736 -736
  120. data/spec/spec_helper.rb +4 -5
  121. data/spec/stats/record_spec.rb +22 -21
  122. data/spec/store_orm_spec.rb +48 -48
  123. data/spec/store_spec.rb +428 -426
  124. data/spec/support/shared_examples.rb +5 -7
  125. data/spec/sync_states_spec.rb +67 -67
  126. data/spec/test_methods_spec.rb +121 -123
  127. data/spec/testdata/10000-data.txt +0 -0
  128. data/spec/testdata/5000-data.txt +0 -0
  129. data/spec/user_spec.rb +102 -102
  130. data/tasks/redis.rake +3 -3
  131. metadata +154 -195
  132. data/bench/benchapp/tmp/pids/passenger.9292.pid.lock +0 -0
  133. data/bench/benchapp/tmp/restart.txt +0 -0
  134. data/bench/blobapp/settings/license.key.bak +0 -2
  135. data/bench/blobapp/tmp/restart.txt +0 -0
  136. data/bench/lib/testdata/1-data.txt +0 -0
  137. data/bench/lib/testdata/10-data.txt +0 -0
  138. data/bench/lib/testdata/2-data.txt +0 -0
  139. data/bench/lib/testdata/250-data.txt +0 -0
  140. data/bench/lib/testdata/5-blob_data.txt +0 -0
  141. data/bench/lib/testdata/5-data.txt +0 -0
  142. data/bench/lib/testdata/50-data.txt +0 -0
  143. data/bench/lib/testdata/500-data.txt +0 -0
  144. data/doc/protocol.html +0 -1993
  145. data/spec/coverage/rcov/assets/0.2.3/jquery-1.3.2.min.js +0 -19
  146. data/spec/coverage/rcov/assets/0.2.3/jquery.tablesorter.min.js +0 -15
  147. data/spec/coverage/rcov/assets/0.2.3/print.css +0 -12
  148. data/spec/coverage/rcov/assets/0.2.3/rcov.js +0 -42
  149. data/spec/coverage/rcov/assets/0.2.3/screen.css +0 -270
  150. data/spec/coverage/rcov/index.html +0 -88
  151. data/spec/generator/generator_spec_helper.rb +0 -9
@@ -1,76 +1,76 @@
1
1
  require File.join(File.dirname(__FILE__),'..','spec_helper')
2
2
 
3
3
  describe "Ping Apple" do
4
- it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => false do
5
- before do
6
- @params = {"user_id" => @u.id, "api_token" => @api_token,
7
- "sources" => [@s.name], "message" => 'hello world',
8
- "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3',
9
- "device_pin" => @c.device_pin, "device_port" => @c.device_port}
10
- ssl_ctx = mock("ssl_ctx")
11
- ssl_ctx.stub!(:key=).and_return('key')
12
- ssl_ctx.stub!(:cert=).and_return('cert')
13
- OpenSSL::SSL::SSLContext.stub!(:new).and_return(ssl_ctx)
14
- OpenSSL::PKey::RSA.stub!(:new)
15
- OpenSSL::X509::Certificate.stub!(:new)
4
+ include_examples "SharedRhoconnectHelper", :rhoconnect_data => false
16
5
 
17
- tcp_socket = mock("tcp_socket")
18
- tcp_socket.stub!(:close)
19
- TCPSocket.stub!(:new).and_return(tcp_socket)
6
+ before do
7
+ @params = {"user_id" => @u.id, "api_token" => @api_token,
8
+ "sources" => [@s.name], "message" => 'hello world',
9
+ "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3',
10
+ "device_pin" => @c.device_pin, "device_port" => @c.device_port}
11
+ ssl_ctx = double("ssl_ctx")
12
+ ssl_ctx.stub(:key=).and_return('key')
13
+ ssl_ctx.stub(:cert=).and_return('cert')
14
+ OpenSSL::SSL::SSLContext.stub(:new).and_return(ssl_ctx)
15
+ OpenSSL::PKey::RSA.stub(:new)
16
+ OpenSSL::X509::Certificate.stub(:new)
20
17
 
21
- @ssl_socket = mock("ssl_socket")
22
- @ssl_socket.stub!(:sync=)
23
- @ssl_socket.stub!(:connect)
24
- @ssl_socket.stub!(:write)
25
- @ssl_socket.stub!(:close)
26
- OpenSSL::SSL::SSLSocket.stub!(:new).and_return(@ssl_socket)
27
- end
18
+ tcp_socket = double("tcp_socket")
19
+ tcp_socket.stub(:close)
20
+ TCPSocket.stub(:new).and_return(tcp_socket)
28
21
 
29
- # TODO: This should really test SSLSocket.write
30
- it "should ping apple" do
31
- Apple.ping(@params)
32
- end
22
+ @ssl_socket = double("ssl_socket")
23
+ @ssl_socket.stub(:sync=)
24
+ @ssl_socket.stub(:connect)
25
+ @ssl_socket.stub(:write)
26
+ @ssl_socket.stub(:close)
27
+ OpenSSL::SSL::SSLSocket.stub(:new).and_return(@ssl_socket)
28
+ end
33
29
 
34
- it "should log deprecation on iphone ping" do
35
- Iphone.should_receive(
36
- :log
37
- ).once.with("DEPRECATION WARNING: 'iphone' is a deprecated device_type, use 'apple' instead")
38
- Iphone.ping(@params)
39
- end
30
+ # TODO: This should really test SSLSocket.write
31
+ it "should ping apple" do
32
+ Apple.ping(@params)
33
+ end
40
34
 
41
- it "should compute apn_message" do
42
- expected_hash = {
43
- "aps"=>{"vibrate"=>"5", "badge"=>5, "alert"=>"hello world", "sound"=>"hello.mp3"},
44
- "do_sync"=>["SampleAdapter"]
45
- }
46
- apn_message = Apple.apn_message(@params)
47
- apn_message.start_with?("\000\000 \253\315\000g").should be_true
48
- JSON.parse(apn_message.sub("\000\000 \253\315\000g","")).should == expected_hash
49
- end
35
+ it "should log deprecation on iphone ping" do
36
+ Iphone.should_receive(
37
+ :log
38
+ ).once.with("DEPRECATION WARNING: 'iphone' is a deprecated device_type, use 'apple' instead")
39
+ Iphone.ping(@params)
40
+ end
50
41
 
51
- it "should compute apn_message with source array" do
52
- @params['sources'] << 'SimpleAdapter'
53
- expected_hash = {
54
- "aps"=>{"vibrate"=>"5", "badge"=>5, "alert"=>"hello world", "sound"=>"hello.mp3"},
55
- "do_sync"=>["SampleAdapter", "SimpleAdapter"]
56
- }
57
- apn_message = Apple.apn_message(@params)
58
- apn_message.start_with?("\000\000 \253\315\000w").should be_true
59
- JSON.parse(apn_message.sub("\000\000 \253\315\000w","")).should == expected_hash
60
- end
42
+ it "should compute apn_message" do
43
+ expected_hash = {
44
+ "aps"=>{"vibrate"=>"5", "badge"=>5, "alert"=>"hello world", "sound"=>"hello.mp3"},
45
+ "do_sync"=>["SampleAdapter"]
46
+ }
47
+ apn_message = Apple.apn_message(@params)
48
+ apn_message[0, 7].inspect.gsub("\"", "").should == "\\x00\\x00 \\xAB\\xCD\\x00g"
49
+ JSON.parse(apn_message[7, apn_message.length]).should == expected_hash
50
+ end
61
51
 
62
- it "should raise SocketError if socket fails" do
63
- error = 'socket error'
64
- @ssl_socket.stub!(:write).and_return { raise SocketError.new(error) }
65
- Apple.should_receive(:log).once.with("Error while sending ping: #{error}")
66
- lambda { Apple.ping(@params) }.should raise_error(SocketError,error)
67
- end
68
-
69
- it "should do nothing if no cert or host or port" do
70
- Rhoconnect::Apple.stub!(:get_config).and_return({:test => {:iphonecertfile=>"none"}})
71
- Rhoconnect::Apple.should_receive(:get_config).once
72
- OpenSSL::SSL::SSLContext.should_receive(:new).exactly(0).times
73
- Apple.ping(@params)
74
- end
75
- end
52
+ it "should compute apn_message with source array" do
53
+ @params['sources'] << 'SimpleAdapter'
54
+ expected_hash = {
55
+ "aps"=>{"vibrate"=>"5", "badge"=>5, "alert"=>"hello world", "sound"=>"hello.mp3"},
56
+ "do_sync"=>["SampleAdapter", "SimpleAdapter"]
57
+ }
58
+ apn_message = Apple.apn_message(@params)
59
+ apn_message[0, 7].inspect.gsub("\"", "").should == "\\x00\\x00 \\xAB\\xCD\\x00w"
60
+ JSON.parse(apn_message[7, apn_message.length]).should == expected_hash
61
+ end
62
+
63
+ it "should raise SocketError if socket fails" do
64
+ error = 'socket error'
65
+ @ssl_socket.stub(:write).and_return { raise SocketError.new(error) }
66
+ Apple.should_receive(:log).once.with("Error while sending ping: #{error}")
67
+ lambda { Apple.ping(@params) }.should raise_error(SocketError,error)
68
+ end
69
+
70
+ it "should do nothing if no cert or host or port" do
71
+ Rhoconnect::Apple.stub(:get_config).and_return({:test => {:iphonecertfile=>"none"}})
72
+ Rhoconnect::Apple.should_receive(:get_config).once
73
+ OpenSSL::SSL::SSLContext.should_receive(:new).exactly(0).times
74
+ Apple.ping(@params)
75
+ end
76
76
  end
@@ -1,99 +1,98 @@
1
1
  require File.join(File.dirname(__FILE__),'..','spec_helper')
2
2
 
3
3
  describe "Ping Android GCM" do
4
- it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => false do
4
+ include_examples "SharedRhoconnectHelper", :rhoconnect_data => false
5
5
 
6
- before(:each) do
7
- @params = {"device_pin" => @c.device_pin,
8
- "sources" => [@s.name], "message" => 'hello world',
9
- "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
10
- @response = mock('response')
11
- Rhoconnect.settings[:gcm_api_key] = 'validkey'
12
- end
6
+ before(:each) do
7
+ @params = {"device_pin" => @c.device_pin,
8
+ "sources" => [@s.name], "message" => 'hello world',
9
+ "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
10
+ @response = double('response')
11
+ Rhoconnect.settings[:gcm_api_key] = 'validkey'
12
+ end
13
13
 
14
- it "should ping gcm successfully" do
15
- result = 'id=0:34234234134254%abc123\n'
16
- @response.stub!(:code).and_return(200)
17
- @response.stub!(:body).and_return(result)
18
- @response.stub!(:headers).and_return({})
19
- @response.stub!(:return!).and_return(@response)
20
- setup_post_yield(@response)
21
- Gcm.ping(@params).body.should == result
22
- end
14
+ it "should ping gcm successfully" do
15
+ result = 'id=0:34234234134254%abc123\n'
16
+ @response.stub(:code).and_return(200)
17
+ @response.stub(:body).and_return(result)
18
+ @response.stub(:headers).and_return({})
19
+ @response.stub(:return!).and_return(@response)
20
+ setup_post_yield(@response)
21
+ Gcm.ping(@params).body.should == result
22
+ end
23
23
 
24
- it "should raise error on missing gcm_api_key setting" do
25
- key = Rhoconnect.settings[:gcm_api_key].dup
26
- Rhoconnect.settings[:gcm_api_key] = nil
27
- lambda { Gcm.ping(@params) }.should raise_error(
28
- Gcm::InvalidApiKey, 'Missing `:gcm_api_key:` option in settings/settings.yml'
29
- )
30
- Rhoconnect.settings[:gcm_api_key] = key
31
- end
24
+ it "should raise error on missing gcm_api_key setting" do
25
+ key = Rhoconnect.settings[:gcm_api_key].dup
26
+ Rhoconnect.settings[:gcm_api_key] = nil
27
+ lambda { Gcm.ping(@params) }.should raise_error(
28
+ Gcm::InvalidApiKey, 'Missing `:gcm_api_key:` option in settings/settings.yml'
29
+ )
30
+ Rhoconnect.settings[:gcm_api_key] = key
31
+ end
32
32
 
33
- it "should ping gcm with 503 connection error" do
34
- error = 'Connection refused'
35
- @response.stub!(:body).and_return(error)
36
- RestClient.stub!(:post).and_return { raise RestClient::Exception.new(@response,503) }
37
- Gcm.should_receive(:log).twice
38
- lambda { Gcm.ping(@params) }.should raise_error(RestClient::Exception)
39
- end
33
+ it "should ping gcm with 503 connection error" do
34
+ error = 'Connection refused'
35
+ @response.stub(:body).and_return(error)
36
+ RestClient.stub(:post).and_return { raise RestClient::Exception.new(@response,503) }
37
+ Gcm.should_receive(:log).twice
38
+ lambda { Gcm.ping(@params) }.should raise_error(RestClient::Exception)
39
+ end
40
40
 
41
- it "should ping gcm with 200 error message" do
42
- error = 'Error=QuotaExceeded'
43
- @response.stub!(:code).and_return(200)
44
- @response.stub!(:body).and_return(error)
45
- @response.stub!(:headers).and_return(nil)
46
- setup_post_yield(@response)
47
- Gcm.should_receive(:log).twice
48
- lambda { Gcm.ping(@params) }.should raise_error(Gcm::GCMPingError, "GCM ping error: QuotaExceeded")
49
- end
41
+ it "should ping gcm with 200 error message" do
42
+ error = 'Error=QuotaExceeded'
43
+ @response.stub(:code).and_return(200)
44
+ @response.stub(:body).and_return(error)
45
+ @response.stub(:headers).and_return(nil)
46
+ setup_post_yield(@response)
47
+ Gcm.should_receive(:log).twice
48
+ lambda { Gcm.ping(@params) }.should raise_error(Gcm::GCMPingError, "GCM ping error: QuotaExceeded")
49
+ end
50
50
 
51
- it "should fail to ping with bad authentication" do
52
- error = 'Error=BadAuthentication'
53
- @response.stub!(:code).and_return(403)
54
- @response.stub!(:body).and_return(error)
55
- @response.stub!(:headers).and_return({})
56
- setup_post_yield(@response)
57
- Gcm.should_receive(:log).twice
58
- lambda { Gcm.ping(@params) }.should raise_error(
59
- Gcm::InvalidApiKey, "Invalid GCM api key. Obtain new api key from GCM service."
60
- )
61
- end
51
+ it "should fail to ping with bad authentication" do
52
+ error = 'Error=BadAuthentication'
53
+ @response.stub(:code).and_return(403)
54
+ @response.stub(:body).and_return(error)
55
+ @response.stub(:headers).and_return({})
56
+ setup_post_yield(@response)
57
+ Gcm.should_receive(:log).twice
58
+ lambda { Gcm.ping(@params) }.should raise_error(
59
+ Gcm::InvalidApiKey, "Invalid GCM api key. Obtain new api key from GCM service."
60
+ )
61
+ end
62
62
 
63
- it "should ping gcm with 401 error message" do
64
- @response.stub!(:code).and_return(401)
65
- @response.stub!(:body).and_return('')
66
- setup_post_yield(@response)
67
- Gcm.should_receive(:log).twice
68
- lambda { Gcm.ping(@params) }.should raise_error(
69
- Gcm::InvalidApiKey, "Invalid GCM api key. Obtain new api key from GCM service."
70
- )
71
- end
63
+ it "should ping gcm with 401 error message" do
64
+ @response.stub(:code).and_return(401)
65
+ @response.stub(:body).and_return('')
66
+ setup_post_yield(@response)
67
+ Gcm.should_receive(:log).twice
68
+ lambda { Gcm.ping(@params) }.should raise_error(
69
+ Gcm::InvalidApiKey, "Invalid GCM api key. Obtain new api key from GCM service."
70
+ )
71
+ end
72
72
 
73
- it "should compute gcm_message" do
74
- expected = {
75
- 'registration_ids' => [@c.device_pin],
76
- 'collapse_key' => "RAND_KEY",
77
- 'data' => {
78
- 'do_sync' => @s.name,
79
- 'alert' => "hello world",
80
- 'vibrate' => '5',
81
- 'sound' => "hello.mp3"
82
- }
73
+ it "should compute gcm_message" do
74
+ expected = {
75
+ 'registration_ids' => [@c.device_pin],
76
+ 'collapse_key' => "RAND_KEY",
77
+ 'data' => {
78
+ 'do_sync' => @s.name,
79
+ 'alert' => "hello world",
80
+ 'vibrate' => '5',
81
+ 'sound' => "hello.mp3"
83
82
  }
84
- actual = Gcm.gcm_message(@params)
85
- actual['collapse_key'] = "RAND_KEY" unless actual['collapse_key'].nil?
86
- actual.should == expected
87
- end
83
+ }
84
+ actual = Gcm.gcm_message(@params)
85
+ actual['collapse_key'] = "RAND_KEY" unless actual['collapse_key'].nil?
86
+ actual.should == expected
87
+ end
88
88
 
89
- it "should trim empty or nil params from gcm_message" do
90
- expected = {'registration_ids' => [@c.device_pin], 'collapse_key' => "RAND_KEY",
91
- 'data' => {'vibrate' => '5', 'do_sync' => '', 'sound' => "hello.mp3"} }
92
- params = {"device_pin" => @c.device_pin,
93
- "sources" => [], "message" => '', "vibrate" => '5', "sound" => 'hello.mp3'}
94
- actual = Gcm.gcm_message(params)
95
- actual['collapse_key'] = "RAND_KEY" unless actual['collapse_key'].nil?
96
- actual.should == expected
97
- end
89
+ it "should trim empty or nil params from gcm_message" do
90
+ expected = {'registration_ids' => [@c.device_pin], 'collapse_key' => "RAND_KEY",
91
+ 'data' => {'vibrate' => '5', 'do_sync' => '', 'sound' => "hello.mp3"} }
92
+ params = {"device_pin" => @c.device_pin,
93
+ "sources" => [], "message" => '', "vibrate" => '5', "sound" => 'hello.mp3'}
94
+ actual = Gcm.gcm_message(params)
95
+ actual['collapse_key'] = "RAND_KEY" unless actual['collapse_key'].nil?
96
+ actual.should == expected
98
97
  end
99
98
  end
@@ -1,58 +1,57 @@
1
1
  require File.join(File.dirname(__FILE__),'..','spec_helper')
2
2
 
3
3
  describe "Ping using RhoConnect push" do
4
- it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => false do
5
-
6
- before do
7
- @params = {"device_pin" => @c.device_pin,
8
- "sources" => [@s.name], "message" => 'hello world',
9
- "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
10
- @response = mock('response')
11
-
12
- end
13
-
14
- it "should ping rhoconnect push successfully" do
15
- result = ''
16
- @response.stub!(:code).and_return(204)
17
- @response.stub!(:body).and_return(result)
18
- @response.stub!(:return!).and_return(@response)
19
- RestClient.stub!(:post).and_return(@response)
20
- res = RhoconnectPush.ping(@params)
21
- res.body.should == result
22
- res.code.should == 204
23
- end
24
-
25
- it "should ping rhoconnect push with missing push_server property" do
26
- RhoconnectPush.stub!(:get_config).and_return({:test => {}})
27
- lambda { RhoconnectPush.ping(@params) }.should raise_error(
28
- RhoconnectPush::InvalidPushServer, "Missing or invalid `:push_server` in settings/settings.yml."
29
- )
30
- end
31
-
32
-
33
- it "should ping rhoconnect push with 400 response" do
34
- result = ''
35
- @response.stub!(:code).and_return(400)
36
- @response.stub!(:body).and_return(result)
37
- @response.stub!(:return!).and_return(@response)
38
- setup_post_yield(@response)
39
- lambda { RhoconnectPush.ping(@params) }.should raise_error(
40
- RhoconnectPush::InvalidPushRequest, "Invalid push request."
41
- )
42
- end
43
-
44
- it "should compute push_message" do
45
- expected = {
46
- 'collapseId' => 5,
47
- 'data' => {
48
- 'do_sync' => [@s.name],
49
- 'alert' => "hello world",
50
- 'vibrate' => '5',
51
- 'sound' => "hello.mp3"
52
- }
4
+ include_examples "SharedRhoconnectHelper", :rhoconnect_data => false
5
+
6
+ before do
7
+ @params = {"device_pin" => @c.device_pin,
8
+ "sources" => [@s.name], "message" => 'hello world',
9
+ "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
10
+ @response = double('response')
11
+
12
+ end
13
+
14
+ it "should ping rhoconnect push successfully" do
15
+ result = ''
16
+ @response.stub(:code).and_return(204)
17
+ @response.stub(:body).and_return(result)
18
+ @response.stub(:return!).and_return(@response)
19
+ RestClient.stub(:post).and_return(@response)
20
+ res = RhoconnectPush.ping(@params)
21
+ res.body.should == result
22
+ res.code.should == 204
23
+ end
24
+
25
+ it "should ping rhoconnect push with missing push_server property" do
26
+ RhoconnectPush.stub(:get_config).and_return({:test => {}})
27
+ lambda { RhoconnectPush.ping(@params) }.should raise_error(
28
+ RhoconnectPush::InvalidPushServer, "Missing or invalid `:push_server` in settings/settings.yml."
29
+ )
30
+ end
31
+
32
+
33
+ it "should ping rhoconnect push with 400 response" do
34
+ result = ''
35
+ @response.stub(:code).and_return(400)
36
+ @response.stub(:body).and_return(result)
37
+ @response.stub(:return!).and_return(@response)
38
+ setup_post_yield(@response)
39
+ lambda { RhoconnectPush.ping(@params) }.should raise_error(
40
+ RhoconnectPush::InvalidPushRequest, "Invalid push request."
41
+ )
42
+ end
43
+
44
+ it "should compute push_message" do
45
+ expected = {
46
+ 'collapseId' => 5,
47
+ 'data' => {
48
+ 'do_sync' => [@s.name],
49
+ 'alert' => "hello world",
50
+ 'vibrate' => '5',
51
+ 'sound' => "hello.mp3"
53
52
  }
54
- actual = RhoconnectPush.push_message(@params)
55
- JSON.parse(actual).should == expected
56
- end
57
- end
53
+ }
54
+ actual = RhoconnectPush.push_message(@params)
55
+ JSON.parse(actual).should == expected
56
+ end
58
57
  end