rhoconnect 3.2.1 → 3.3.1.beta2

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 (221) hide show
  1. data/CHANGELOG.md +24 -5
  2. data/Gemfile +2 -2
  3. data/Gemfile.lock +20 -20
  4. data/bench/benchapp/Gemfile +17 -20
  5. data/bench/benchapp/config.ru +2 -2
  6. data/bench/benchapp/settings/settings.yml +3 -3
  7. data/bench/blobapp/Gemfile +16 -13
  8. data/bench/blobapp/config.ru +2 -2
  9. data/bench/blobapp/settings/settings.yml +5 -3
  10. data/bench/lib/bench.rb +35 -32
  11. data/bench/lib/bench/session.rb +9 -1
  12. data/bench/scripts/blob_cud_script.rb +13 -17
  13. data/bench/scripts/cud_script.rb +11 -12
  14. data/bench/scripts/helpers.rb +5 -7
  15. data/bench/scripts/query_md_script.rb +18 -12
  16. data/bench/scripts/query_only_script.rb +19 -11
  17. data/bench/scripts/query_script.rb +17 -13
  18. data/bench/scripts/test_query_script.rb +46 -17
  19. data/bench/scripts/test_source_script.rb +7 -7
  20. data/commands/commands/dtach_commands/dtach_install.rb +44 -16
  21. data/commands/commands/rhoconnect/spec.rb +13 -9
  22. data/commands/commands/rhoconnect/version.rb +6 -0
  23. data/commands/execute.rb +10 -6
  24. data/doc/deploying.txt +75 -13
  25. data/doc/install.txt +3 -3
  26. data/doc/push-client-setup.txt +1 -1
  27. data/doc/rest-api.txt +4 -23
  28. data/doc/rhoconnect-redis-stack.txt +26 -7
  29. data/doc/settings.txt +9 -3
  30. data/examples/simple/Gemfile +3 -1
  31. data/examples/simple/application.rb +5 -0
  32. data/examples/simple/config.ru +3 -2
  33. data/examples/simple/my_server.rb +14 -0
  34. data/examples/simple/settings/settings.yml +1 -0
  35. data/generators/templates/application/Gemfile +4 -4
  36. data/generators/templates/application/application.rb +4 -0
  37. data/generators/templates/application/settings/settings.yml +4 -1
  38. data/installer/unix-like/create_texts.rb +39 -1
  39. data/installer/unix-like/rho_connect_install_constants.rb +1 -1
  40. data/installer/utils/package_upload/repos.rake +7 -5
  41. data/lib/rhoconnect.rb +3 -2
  42. data/lib/rhoconnect/api/app/ans_login.rb +3 -0
  43. data/lib/rhoconnect/api/app/bulk_data.rb +6 -0
  44. data/lib/rhoconnect/api/{source → app}/fast_delete.rb +1 -1
  45. data/lib/rhoconnect/api/{source → app}/fast_insert.rb +2 -2
  46. data/lib/rhoconnect/api/{source → app}/fast_update.rb +2 -2
  47. data/lib/rhoconnect/api/app/login.rb +5 -0
  48. data/lib/rhoconnect/api/{source → app}/push_deletes.rb +1 -1
  49. data/lib/rhoconnect/api/{source → app}/push_objects.rb +1 -1
  50. data/lib/rhoconnect/api/app/query.rb +4 -0
  51. data/lib/rhoconnect/api/app/queue_updates.rb +94 -0
  52. data/lib/rhoconnect/api/app/search.rb +4 -0
  53. data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -0
  54. data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -0
  55. data/lib/rhoconnect/api/client/create.rb +7 -0
  56. data/lib/rhoconnect/api/client/get_client_params.rb +2 -1
  57. data/lib/rhoconnect/api/client/list_client_docs.rb +2 -1
  58. data/lib/rhoconnect/api/client/register.rb +12 -0
  59. data/lib/rhoconnect/api/client/reset.rb +5 -0
  60. data/lib/rhoconnect/api/{source → readstate}/set_refresh_time.rb +2 -1
  61. data/lib/rhoconnect/api/source/get_source_params.rb +3 -2
  62. data/lib/rhoconnect/api/source/list_sources.rb +2 -1
  63. data/lib/rhoconnect/api/source/update_source_params.rb +3 -3
  64. data/lib/rhoconnect/api/store/get_db_doc.rb +4 -0
  65. data/lib/rhoconnect/api/store/set_db_doc.rb +7 -0
  66. data/lib/rhoconnect/api/system/get_adapter.rb +4 -0
  67. data/lib/rhoconnect/api/{admin → system}/get_license_info.rb +2 -1
  68. data/lib/rhoconnect/api/system/login.rb +15 -0
  69. data/lib/rhoconnect/api/{admin → system}/reset.rb +3 -2
  70. data/lib/rhoconnect/api/system/save_adapter.rb +4 -0
  71. data/lib/rhoconnect/api/{admin → system}/stats.rb +2 -1
  72. data/lib/rhoconnect/api/user/create_user.rb +2 -2
  73. data/lib/rhoconnect/api/user/delete_client.rb +6 -0
  74. data/lib/rhoconnect/api/user/delete_user.rb +2 -1
  75. data/lib/rhoconnect/api/user/list_clients.rb +4 -0
  76. data/lib/rhoconnect/api/user/list_source_docs.rb +11 -0
  77. data/lib/rhoconnect/api/user/list_users.rb +1 -1
  78. data/lib/rhoconnect/api/user/ping.rb +7 -0
  79. data/lib/rhoconnect/api/user/show_user.rb +3 -0
  80. data/lib/rhoconnect/api/user/update_user.rb +3 -2
  81. data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -0
  82. data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -0
  83. data/lib/rhoconnect/app.rb +12 -2
  84. data/lib/rhoconnect/async.rb +6 -10
  85. data/lib/rhoconnect/bulk_data/bulk_data.rb +4 -4
  86. data/lib/rhoconnect/client.rb +10 -9
  87. data/lib/rhoconnect/client_sync.rb +24 -19
  88. data/lib/rhoconnect/document.rb +18 -4
  89. data/lib/rhoconnect/graph_helper.rb +4 -2
  90. data/lib/rhoconnect/jobs/bulk_data_job.rb +1 -1
  91. data/lib/rhoconnect/jobs/ping_job.rb +39 -29
  92. data/lib/rhoconnect/middleware/admin_user.rb +23 -0
  93. data/lib/rhoconnect/middleware/body_content_type_parser.rb +35 -0
  94. data/lib/rhoconnect/{cors.rb → middleware/cors.rb} +1 -0
  95. data/lib/rhoconnect/middleware/current_app.rb +16 -0
  96. data/lib/rhoconnect/middleware/current_request.rb +16 -0
  97. data/lib/rhoconnect/middleware/current_user.rb +17 -0
  98. data/lib/rhoconnect/middleware/helpers.rb +105 -0
  99. data/lib/rhoconnect/middleware/login_required.rb +22 -0
  100. data/lib/rhoconnect/{stats/middleware.rb → middleware/stats.rb} +5 -3
  101. data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +58 -0
  102. data/lib/rhoconnect/ping.rb +1 -0
  103. data/lib/rhoconnect/ping/apple.rb +18 -16
  104. data/lib/rhoconnect/ping/blackberry.rb +9 -9
  105. data/lib/rhoconnect/ping/rhoconnect_push.rb +45 -0
  106. data/lib/rhoconnect/server.rb +98 -91
  107. data/lib/rhoconnect/source.rb +5 -1
  108. data/lib/rhoconnect/source_sync.rb +4 -3
  109. data/lib/rhoconnect/stats/record.rb +15 -15
  110. data/lib/rhoconnect/store.rb +253 -75
  111. data/lib/rhoconnect/tasks.rb +3 -3
  112. data/lib/rhoconnect/version.rb +1 -1
  113. data/lib/rhoconnect/web-console/controllers/admins.js +1 -14
  114. data/lib/rhoconnect/web-console/models/adapter.js +18 -8
  115. data/lib/rhoconnect/web-console/models/client.js +15 -9
  116. data/lib/rhoconnect/web-console/models/doc.js +7 -11
  117. data/lib/rhoconnect/web-console/models/session.js +5 -2
  118. data/lib/rhoconnect/web-console/models/source.js +55 -36
  119. data/lib/rhoconnect/web-console/models/user.js +20 -11
  120. data/lib/rhoconnect/web-console/public/backbone.js +8 -2
  121. data/lib/rhoconnect/web-console/templates/index.erb +11 -5
  122. data/lib/rhoconnect/web-console/views/doc.js +6 -8
  123. data/lib/rhoconnect/web-console/views/edit_user.js +6 -3
  124. data/lib/rhoconnect/web-console/views/home.js +98 -25
  125. data/lib/rhoconnect/web-console/views/index.js +1 -1
  126. data/lib/rhoconnect/web-console/views/new_ping.js +6 -3
  127. data/lib/rhoconnect/web-console/views/server_doc.js +12 -4
  128. data/lib/rhoconnect/web-console/views/show_device.js +6 -3
  129. data/rhoconnect.gemspec +1 -2
  130. data/spec/api/{source → app}/fast_delete_spec.rb +4 -4
  131. data/spec/api/{source → app}/fast_insert_spec.rb +4 -4
  132. data/spec/api/{source → app}/fast_update_spec.rb +22 -6
  133. data/spec/api/{source → app}/push_deletes_spec.rb +2 -2
  134. data/spec/api/app/push_objects_spec.rb +45 -0
  135. data/spec/api/client/client_get_db_doc_spec.rb +31 -0
  136. data/spec/api/client/client_set_db_doc_spec.rb +14 -0
  137. data/spec/api/client/get_client_params_spec.rb +3 -2
  138. data/spec/api/client/list_client_docs_spec.rb +2 -2
  139. data/spec/api/{source → readstate}/set_refresh_time_spec.rb +15 -9
  140. data/spec/api/source/get_source_params_spec.rb +3 -2
  141. data/spec/api/source/list_sources_spec.rb +3 -9
  142. data/spec/api/source/update_source_params_spec.rb +4 -4
  143. data/spec/api/store/get_db_doc_spec.rb +32 -0
  144. data/spec/api/store/set_db_doc_spec.rb +43 -0
  145. data/spec/api/system/adapter_spec.rb +33 -0
  146. data/spec/api/{admin → system}/get_license_info_spec.rb +2 -5
  147. data/spec/api/{admin/get_api_token_spec.rb → system/login_spec.rb} +4 -11
  148. data/spec/api/{admin → system}/reset_spec.rb +2 -2
  149. data/spec/api/{admin → system}/stats_spec.rb +19 -13
  150. data/spec/api/user/create_user_spec.rb +15 -8
  151. data/spec/api/{client → user}/delete_client_spec.rb +3 -4
  152. data/spec/api/user/delete_user_spec.rb +33 -4
  153. data/spec/api/user/list_clients_spec.rb +30 -0
  154. data/spec/api/user/list_source_docs_spec.rb +35 -0
  155. data/spec/api/user/list_users_spec.rb +5 -6
  156. data/spec/api/{client → user}/ping_spec.rb +4 -6
  157. data/spec/api/user/show_user_spec.rb +14 -0
  158. data/spec/api/user/update_user_spec.rb +28 -10
  159. data/spec/api/user/user_get_db_doc_spec.rb +16 -0
  160. data/spec/api/user/user_set_db_doc_spec.rb +41 -0
  161. data/spec/apps/rhotestapp/application.rb +4 -0
  162. data/spec/apps/rhotestapp/settings/settings.yml +3 -1
  163. data/spec/bulk_data/bulk_data_spec.rb +13 -0
  164. data/spec/client_sync_spec.rb +41 -59
  165. data/spec/document_spec.rb +23 -0
  166. data/spec/javascripts/doc_view_spec.js +1 -1
  167. data/spec/javascripts/home_view_spec.js +10 -5
  168. data/spec/javascripts/index_view_spec.js +1 -1
  169. data/spec/jobs/ping_job_spec.rb +26 -0
  170. data/spec/perf/store_perf_spec.rb +1 -1
  171. data/spec/ping/android_spec.rb +0 -7
  172. data/spec/ping/apple_spec.rb +7 -0
  173. data/spec/ping/blackberry_spec.rb +10 -0
  174. data/spec/ping/rhoconnect_push_spec.rb +58 -0
  175. data/spec/server/cors_spec.rb +1 -1
  176. data/spec/server/server_spec.rb +152 -104
  177. data/spec/{stats/middleware_spec.rb → server/stats_spec.rb} +4 -5
  178. data/spec/server/x_domain_session_wrapper_spec.rb +3 -3
  179. data/spec/source_spec.rb +2 -2
  180. data/spec/source_sync_spec.rb +2 -0
  181. data/spec/spec_helper.rb +17 -3
  182. data/spec/stats/record_spec.rb +18 -19
  183. data/spec/store_spec.rb +51 -26
  184. data/spec/support/shared_examples.rb +4 -0
  185. data/spec/sync_states_spec.rb +2 -2
  186. metadata +104 -88
  187. data/bench/benchapp/Gemfile.lock +0 -87
  188. data/bench/blobapp/Gemfile.lock +0 -107
  189. data/bench/lib/testdata/5-data.txt +0 -8
  190. data/doc/release.txt +0 -41
  191. data/lib/rhoconnect/api/admin/get_api_token.rb +0 -14
  192. data/lib/rhoconnect/api/admin/login.rb +0 -6
  193. data/lib/rhoconnect/api/application/bulk_data.rb +0 -7
  194. data/lib/rhoconnect/api/application/clientcreate.rb +0 -8
  195. data/lib/rhoconnect/api/application/clientlogin.rb +0 -6
  196. data/lib/rhoconnect/api/application/clientregister.rb +0 -13
  197. data/lib/rhoconnect/api/application/clientreset.rb +0 -6
  198. data/lib/rhoconnect/api/application/query.rb +0 -7
  199. data/lib/rhoconnect/api/application/queue_updates.rb +0 -20
  200. data/lib/rhoconnect/api/application/search.rb +0 -6
  201. data/lib/rhoconnect/api/client/create_client.rb +0 -3
  202. data/lib/rhoconnect/api/client/delete_client.rb +0 -5
  203. data/lib/rhoconnect/api/client/list_clients.rb +0 -3
  204. data/lib/rhoconnect/api/client/ping.rb +0 -7
  205. data/lib/rhoconnect/api/source/get_adapter.rb +0 -3
  206. data/lib/rhoconnect/api/source/get_db_doc.rb +0 -7
  207. data/lib/rhoconnect/api/source/list_source_docs.rb +0 -10
  208. data/lib/rhoconnect/api/source/save_adapter.rb +0 -3
  209. data/lib/rhoconnect/api/source/set_db_doc.rb +0 -10
  210. data/lib/rhoconnect/api/source/upload_file.rb +0 -4
  211. data/lib/rhoconnect/body_content_type_parser.rb +0 -32
  212. data/lib/rhoconnect/x_domain_session_wrapper.rb +0 -53
  213. data/spec/api/admin/api_token_spec.rb +0 -13
  214. data/spec/api/client/create_client_spec.rb +0 -13
  215. data/spec/api/client/list_clients_spec.rb +0 -22
  216. data/spec/api/source/adapter_spec.rb +0 -29
  217. data/spec/api/source/get_db_doc_spec.rb +0 -21
  218. data/spec/api/source/list_source_docs_spec.rb +0 -25
  219. data/spec/api/source/push_objects_spec.rb +0 -27
  220. data/spec/api/source/set_db_doc_spec.rb +0 -32
  221. data/spec/api/source/upload_file_spec.rb +0 -26
@@ -1,10 +1,9 @@
1
1
  require File.join(File.dirname(__FILE__),'..','api_helper')
2
2
 
3
- describe "RhoconnectApiDeleteUser" do
3
+ describe "RhoconnectApiDeleteClient" do
4
4
  it_should_behave_like "ApiHelper" do
5
- it "should delete client" do
6
- post "/api/client/delete_client", {:api_token => @api_token,
7
- :user_id => @u_fields[:login], :client_id => @c.id}
5
+ it "should delete client for the user" do
6
+ delete "/rc/#{Rhoconnect::API_VERSION}/users/#{@u_fields[:login]}/clients/#{@c.id}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
8
7
  last_response.should be_ok
9
8
  Client.is_exist?(@c.id).should == false
10
9
  User.load(@u_fields[:login]).clients.members.should == []
@@ -3,9 +3,37 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
3
3
  describe "RhoconnectApiDeleteUser" do
4
4
  it_should_behave_like "ApiHelper" do
5
5
  it "should delete user" do
6
- params = {:api_token => @api_token,
7
- :attributes => {:login => 'testuser1', :password => 'testpass1'}}
8
- post "/api/user/create_user", params
6
+ params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
7
+ post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
8
+ last_response.should be_ok
9
+ User.is_exist?(params[:attributes][:login]).should == true
10
+
11
+ #set up two users with data for the same source
12
+ params2 = {:app_id => APP_NAME,:user_id => 'testuser1'}
13
+ params3 = {:app_id => APP_NAME,:user_id => 'testuser'}
14
+ time = Time.now.to_i
15
+ s = Source.load('SampleAdapter', params2)
16
+ s.read_state.refresh_time = time
17
+ s2 = Source.load('SampleAdapter', params3)
18
+ s2.read_state.refresh_time = time
19
+ set_state(s.docname(:delete) => {'4'=>@product4})
20
+ set_state(s2.docname(:delete) => {'4'=>@product4})
21
+ verify_result(s.docname(:delete) => {'4'=>@product4})
22
+ verify_result(s2.docname(:delete) => {'4'=>@product4})
23
+
24
+ delete "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
25
+ last_response.should be_ok
26
+ verify_result(s.docname(:delete) => {})
27
+ verify_result(s2.docname(:delete) => {'4'=>@product4})
28
+ s.load_read_state.should == nil
29
+ s2.load_read_state.refresh_time.should == time
30
+ User.is_exist?(params[:attributes][:login]).should == false
31
+ App.load(test_app_name).users.members.should == ["testuser"]
32
+ end
33
+
34
+ it "should delete user and print deprecation warning with the old route" do
35
+ params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
36
+ post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
9
37
  last_response.should be_ok
10
38
  User.is_exist?(params[:attributes][:login]).should == true
11
39
 
@@ -23,8 +51,9 @@ describe "RhoconnectApiDeleteUser" do
23
51
  verify_result(s2.docname(:delete) => {'4'=>@product4})
24
52
 
25
53
 
26
- post "/api/user/delete_user", {:api_token => @api_token, :user_id => params[:attributes][:login]}
54
+ post "/api/delete_user", {:user_id => params[:attributes][:login]}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
27
55
  last_response.should be_ok
56
+ last_response.headers['Warning'].index('deprecated').should_not == nil
28
57
  verify_result(s.docname(:delete) => {})
29
58
  verify_result(s2.docname(:delete) => {'4'=>@product4})
30
59
  s.load_read_state.should == nil
@@ -0,0 +1,30 @@
1
+ require File.join(File.dirname(__FILE__),'..','api_helper')
2
+
3
+ describe "RhoconnectApiListUserClients" do
4
+ it_should_behave_like "ApiHelper" do
5
+ it "should list user's clients" do
6
+ get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u_fields[:login]}/clients", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
7
+ res = JSON.parse(last_response.body)
8
+ res.is_a?(Array).should == true
9
+ res.size.should == 1
10
+ res[0].is_a?(String) == true
11
+ res[0].length.should == 32
12
+ end
13
+
14
+ it "should list user's clients with old route and show deprecation warning" do
15
+ post "/api/list_clients", {:api_token => @api_token,
16
+ :user_id => @u_fields[:login]}
17
+ res = JSON.parse(last_response.body)
18
+ res.is_a?(Array).should == true
19
+ res.size.should == 1
20
+ res[0].is_a?(String) == true
21
+ res[0].length.should == 32
22
+ end
23
+
24
+ it "should handle empty client's list" do
25
+ @u.clients.delete(@c.id)
26
+ get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u_fields[:login]}/clients", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
27
+ JSON.parse(last_response.body).should == []
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ require File.join(File.dirname(__FILE__),'..','api_helper')
2
+
3
+ describe "RhoconnectApiListSourceDocs" do
4
+ it_should_behave_like "ApiHelper" do
5
+ it "should list of shared source documents" do
6
+ sourcename = "SimpleAdapter"
7
+ user_id = '*'
8
+ get "/rc/#{Rhoconnect::API_VERSION}/users/#{user_id}/sources/#{sourcename}/docnames", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
9
+ JSON.parse(last_response.body).should == {
10
+ "md"=>"source:application:__shared__:SimpleAdapter:md",
11
+ "errors"=>"source:application:__shared__:SimpleAdapter:errors",
12
+ "md_size"=>"source:application:__shared__:SimpleAdapter:md_size",
13
+ "md_copy"=>"source:application:__shared__:SimpleAdapter:md_copy"}
14
+ end
15
+
16
+ it "should list of shared source documents with old route and deprecation warning" do
17
+ post "/api/list_source_docs", {:source_id => "SimpleAdapter", :user_id => '*'}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
18
+ JSON.parse(last_response.body).should == {
19
+ "md"=>"source:application:__shared__:SimpleAdapter:md",
20
+ "errors"=>"source:application:__shared__:SimpleAdapter:errors",
21
+ "md_size"=>"source:application:__shared__:SimpleAdapter:md_size",
22
+ "md_copy"=>"source:application:__shared__:SimpleAdapter:md_copy"}
23
+ end
24
+
25
+ it "should list user source documents" do
26
+ sourcename = "SampleAdapter"
27
+ get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{sourcename}/docnames", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
28
+ JSON.parse(last_response.body).should == {
29
+ "md"=>"source:application:testuser:SampleAdapter:md",
30
+ "errors"=>"source:application:testuser:SampleAdapter:errors",
31
+ "md_size"=>"source:application:testuser:SampleAdapter:md_size",
32
+ "md_copy"=>"source:application:testuser:SampleAdapter:md_copy"}
33
+ end
34
+ end
35
+ end
@@ -3,24 +3,23 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
3
3
  describe "RhoconnectApiListUsers" do
4
4
  it_should_behave_like "ApiHelper" do
5
5
  it "should list users" do
6
- params = {:api_token => @api_token,
7
- :attributes => {:login => 'testuser1', :password => 'testpass1'}}
8
- post "/api/user/create_user", params
6
+ params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
7
+ post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
9
8
  last_response.should be_ok
10
- post "/api/user/list_users", {:api_token => @api_token}
9
+ get "/rc/#{Rhoconnect::API_VERSION}/users", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
11
10
  JSON.parse(last_response.body).sort.should == ["testuser", "testuser1"].sort
12
11
  end
13
12
 
14
13
  it "should handle empty user's list" do
15
14
  @a.delete; @a = App.create(@a_fields)
16
- post "/api/user/list_users", {:api_token => @api_token}
15
+ get "/rc/#{Rhoconnect::API_VERSION}/users", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
17
16
  JSON.parse(last_response.body).should == []
18
17
  end
19
18
 
20
19
  it "should show the deprecation warning on /api/list users" do
21
20
  params = {:api_token => @api_token,
22
21
  :attributes => {:login => 'testuser1', :password => 'testpass1'}}
23
- post "/api/user/create_user", params
22
+ post "/rc/#{Rhoconnect::API_VERSION}/users", params
24
23
  last_response.should be_ok
25
24
  post "/api/list_users", {:api_token => @api_token}
26
25
  JSON.parse(last_response.body).sort.should == ["testuser", "testuser1"].sort
@@ -3,20 +3,18 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
3
3
  describe "RhoconnectApiPing" do
4
4
  it_should_behave_like "ApiHelper" do
5
5
  it "should do ping synchronously" do
6
- params = {"user_id" => @u.id, "api_token" => @api_token,
7
- "sources" => [@s.name], "message" => 'hello world',
6
+ params = {"user_id" => @u.id, "sources" => [@s.name], "message" => 'hello world',
8
7
  "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
9
8
  PingJob.should_receive(:perform).once.with(params)
10
- post "/api/client/ping", params
9
+ post "/rc/#{Rhoconnect::API_VERSION}/users/ping", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
11
10
  last_response.should be_ok
12
11
  end
13
12
 
14
13
  it "should do ping asynchronously" do
15
- params = {"user_id" => @u.id, "api_token" => @api_token,
16
- "async" => "true","sources" => [@s.name], "message" => 'hello world',
14
+ params = {"user_id" => @u.id, "async" => "true","sources" => [@s.name], "message" => 'hello world',
17
15
  "vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3'}
18
16
  PingJob.should_receive(:enqueue).once.with(params)
19
- post "/api/client/ping", params
17
+ post "/rc/#{Rhoconnect::API_VERSION}/users/ping", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
20
18
  last_response.should be_ok
21
19
  end
22
20
  end
@@ -0,0 +1,14 @@
1
+ require File.join(File.dirname(__FILE__),'..','api_helper')
2
+
3
+ describe "RhoconnectApiShowUser" do
4
+ it_should_behave_like "ApiHelper" do
5
+ it "should show user" do
6
+ params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
7
+ post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
8
+ last_response.should be_ok
9
+ get "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
10
+ last_response.should be_ok
11
+ JSON.parse(last_response.body).should include({"name"=>"login", "value"=>"testuser1", "type"=>"string"})
12
+ end
13
+ end
14
+ end
@@ -3,8 +3,18 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
3
3
  describe "RhoconnectApiUpdateUser" do
4
4
  it_should_behave_like "ApiHelper" do
5
5
  it "should update user successfully" do
6
- post "/api/user/update_user", :api_token => @api_token,
7
- :attributes => {:new_password => '123'}
6
+ login = 'rhoadmin'
7
+ put "/rc/#{Rhoconnect::API_VERSION}/users/#{login}", {:attributes => {:new_password => '123'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
8
+ last_response.should be_ok
9
+ user = User.authenticate('rhoadmin','123')
10
+ user.login.should == 'rhoadmin'
11
+ user.admin.should == 1
12
+ end
13
+
14
+ it "should update user successfully with old route and print deprecation warning" do
15
+ login = 'rhoadmin'
16
+ post "/api/update_user", {:user_id => login,
17
+ :attributes => {:new_password => '123'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
8
18
  last_response.should be_ok
9
19
  user = User.authenticate('rhoadmin','123')
10
20
  user.login.should == 'rhoadmin'
@@ -12,20 +22,28 @@ describe "RhoconnectApiUpdateUser" do
12
22
  end
13
23
 
14
24
  it "should fail to update user with wrong attributes" do
15
- post "/api/user/update_user", :api_token => @api_token,
16
- :attributes => {:missingattrib => '123'}
25
+ params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
26
+ post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
27
+ last_response.should be_ok
28
+ User.is_exist?(params[:attributes][:login]).should == true
29
+
30
+ put "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {:attributes => {:missingattrib => '123'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
17
31
  last_response.status.should == 500
18
32
  last_response.body.match('undefined method').should_not be_nil
19
33
  end
20
34
 
21
35
  it "should not update login attribute for user" do
22
- post "/api/user/update_user", :api_token => @api_token,
23
- :attributes => {:new_password => '123', :login => 'admin1'}
36
+ params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
37
+ post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
24
38
  last_response.should be_ok
25
- user = User.authenticate('rhoadmin','123')
26
- user.login.should == 'rhoadmin'
27
- user.admin.should == 1
28
- User.is_exist?('admin1').should == false
39
+ User.is_exist?(params[:attributes][:login]).should == true
40
+
41
+ put "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {:attributes => {:new_password => '123', :login => 'someotheruser1'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
42
+ last_response.should be_ok
43
+ user = User.authenticate('testuser1','123')
44
+ user.login.should == 'testuser1'
45
+ user.admin.should_not == 1
46
+ User.is_exist?('someotheruser1').should == false
29
47
  end
30
48
  end
31
49
  end
@@ -0,0 +1,16 @@
1
+ require File.join(File.dirname(__FILE__),'..','api_helper')
2
+
3
+ describe "RhoconnectApiUserGetDbDoc" do
4
+ it_should_behave_like "ApiHelper" do
5
+ it "should get user's db document by doc key and data" do
6
+ data = {'1' => {'foo' => 'bar'}}
7
+ dockey = 'myuserdoc'
8
+ post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
9
+ last_response.should be_ok
10
+
11
+ get "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
12
+ last_response.should be_ok
13
+ JSON.parse(last_response.body).should == data
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__),'..','api_helper')
2
+
3
+ describe "RhoconnectApiUserSetDbDoc" do
4
+ it_should_behave_like "ApiHelper" do
5
+ it "should set user's db document by doc key and data" do
6
+ data = {'1' => {'foo' => 'bar'}}
7
+ dockey = 'myuserdoc'
8
+ sdocname = @s2.docname(dockey)
9
+
10
+ post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
11
+ last_response.should be_ok
12
+ verify_result(sdocname => data)
13
+ end
14
+
15
+ it "should append data to the user's db document by doc name and data" do
16
+ data = {'1' => {'foo' => 'bar'}}
17
+ data2 = {'2' => {'foo1' => 'bar1'}}
18
+ data3 = data.merge(data2)
19
+ dockey = 'abc:abc'
20
+ sdocname = @s2.docname(dockey)
21
+ post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
22
+ last_response.should be_ok
23
+ verify_result(sdocname => data)
24
+
25
+ post "/rc/#{Rhoconnect::API_VERSION}/users/#{@u.id}/sources/#{@s2.name}/docs/#{dockey}", {:data => data2, :append => true}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
26
+ last_response.should be_ok
27
+ verify_result(sdocname => data3)
28
+ end
29
+
30
+ it "should error out in ateempt to set a db doc for a non-existent user" do
31
+ data = {'1' => {'foo' => 'bar'}}
32
+ data2 = {'2' => {'foo1' => 'bar1'}}
33
+ data3 = data.merge(data2)
34
+ dockey = 'abc:abc'
35
+ sdocname = @s2.docname(dockey)
36
+ post "/rc/#{Rhoconnect::API_VERSION}/users/invalid_user/sources/#{@s2.name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
37
+ last_response.status.should == 500
38
+ last_response.should_not be_ok
39
+ end
40
+ end
41
+ end
@@ -13,6 +13,10 @@ class Application < Rhoconnect::Base
13
13
  def initializer(path)
14
14
  super
15
15
  end
16
+
17
+ def ans_authenticate(username, password)
18
+ 'ansuser:secret' == [username,password].join(':')
19
+ end
16
20
  end
17
21
  end
18
22
 
@@ -1,11 +1,13 @@
1
1
  :sources:
2
2
  SampleAdapter:
3
3
  :poll_interval: 300
4
+ :priority: 1
4
5
  SimpleAdapter:
5
6
  :poll_interval: 600
6
7
  partition_type: 'app'
7
8
  FixedSchemaAdapter:
8
9
  :poll_interval: 300
10
+ :priority: 5
9
11
  sync_type: 'incremental'
10
12
  belongs_to:
11
13
  - brand: 'SampleAdapter'
@@ -19,7 +21,6 @@
19
21
  :bulk_sync_poll_interval: 3600
20
22
  :redis: localhost:6379
21
23
  :syncserver: http://localhost:9292/application/
22
- :api_token: b6f22608fa8b4acf84e844808845e2fe
23
24
  :test:
24
25
  :licensefile: settings/license.key
25
26
  :iphonecertfile: settings/apple_fake_cert.pem
@@ -30,6 +31,7 @@
30
31
  :redis: localhost:6379
31
32
  :syncserver: http://localhost:9292/application/
32
33
  :api_token: b6f22608fa8b4acf84e844808845e2fe
34
+ :push_server: http://user:pwd@localhost:8675
33
35
  :cookie_expire: 9999999
34
36
  :poll_interval_default: 201
35
37
  :production:
@@ -59,6 +59,19 @@ describe "BulkData" do
59
59
  File.join(@a_fields[:name],@a_fields[:name])
60
60
  end
61
61
 
62
+ it "should have ordered sources list by priority" do
63
+ data = BulkData.create(:name => bulk_data_docname(@a.id,@u.id),
64
+ :state => :inprogress,
65
+ :app_id => @a.id,
66
+ :user_id => @u.id,
67
+ :sources => @a.partition_sources(:user, @u.id))
68
+
69
+ data.sources[0, -1].should == ["SampleAdapter", "FixedSchemaAdapter"]
70
+ p1 = Source.load("SampleAdapter", {:app_id => data.app_id, :user_id => data.user_id}).priority
71
+ p2 = Source.load("FixedSchemaAdapter", {:app_id => data.app_id, :user_id => data.user_id}).priority
72
+ p1.should < p2
73
+ end
74
+
62
75
  it "should process_sources for bulk data" do
63
76
  current = Time.now.to_i
64
77
  @s.read_state.refresh_time = current
@@ -28,8 +28,7 @@ describe "ClientSync" do
28
28
  @c.source_name = 'Product'
29
29
  @cs1 = ClientSync.new(@s2,@c,2)
30
30
 
31
- @cs1.send_cud.should == [{'version'=>ClientSync::VERSION},
32
- {'token'=>@c.get_value(:page_token)},
31
+ @cs1.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
33
32
  {'count'=>data.size},{'progress_count'=>0},
34
33
  {'total_count'=>data.size},expected]
35
34
 
@@ -89,8 +88,7 @@ describe "ClientSync" do
89
88
  expected = {'insert'=>data}
90
89
  set_test_data('test_db_storage',data)
91
90
 
92
- @cs.send_cud.should == [{'version'=>ClientSync::VERSION},
93
- {'token'=>@c.get_value(:page_token)},
91
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
94
92
  {'count'=>data.size},{'progress_count'=>0},
95
93
  {'total_count'=>data.size},expected]
96
94
  verify_result(@cs.client.docname(:page) => data,
@@ -103,8 +101,7 @@ describe "ClientSync" do
103
101
  expected = {'insert'=>data}
104
102
  set_test_data('test_db_storage',data)
105
103
  @s.pass_through = 'true'
106
- @cs.send_cud.should == [{'version'=>ClientSync::VERSION},
107
- {'token'=>@c.get_value(:page_token)},
104
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
108
105
  {'count'=>data.size},{'progress_count'=>0},
109
106
  {'total_count'=>data.size},expected]
110
107
  verify_result(@cs.client.docname(:page) => {},
@@ -116,8 +113,7 @@ describe "ClientSync" do
116
113
  expected = {}
117
114
  #set_test_data('test_db_storage',data)
118
115
  @s.pass_through = 'true'
119
- @cs.send_cud.should == [{'version'=>ClientSync::VERSION},
120
- {'token'=>""},
116
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>""},
121
117
  {'count'=>data.size},{'progress_count'=>0},
122
118
  {'total_count'=>data.size},expected]
123
119
  verify_result(@cs.client.docname(:page) => {},
@@ -128,14 +124,13 @@ describe "ClientSync" do
128
124
  msg = "Error during query"
129
125
  data = {'1'=>@product1,'2'=>@product2}
130
126
  set_test_data('test_db_storage',data,msg,'query error')
131
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
132
- {"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
127
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
133
128
  {"source-error"=>{"query-error"=>{"message"=>msg}}}]
134
129
  end
135
130
 
136
131
  it "should return login errors in send cud" do
137
132
  @u.login = nil
138
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},{"token"=>""},
133
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
139
134
  {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
140
135
  {'source-error'=>{"login-error"=>{"message"=>"Error logging in"}}}]
141
136
  end
@@ -143,8 +138,7 @@ describe "ClientSync" do
143
138
  it "should return logoff errors in send cud" do
144
139
  msg = "Error logging off"
145
140
  set_test_data('test_db_storage',{},msg,'logoff error')
146
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
147
- {"token"=>@c.get_value(:page_token)},
141
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
148
142
  {"count"=>1}, {"progress_count"=>0}, {"total_count"=>1},
149
143
  {"source-error"=>{"logoff-error"=>{"message"=>msg}},
150
144
  "insert"=>{ERROR=>{"name"=>"logoff error", "an_attribute"=>msg}}}]
@@ -159,8 +153,7 @@ describe "ClientSync" do
159
153
  data = {'1'=>@product1,'2'=>@product2}
160
154
  expected = {'insert'=>data}
161
155
  set_test_data('test_db_storage',data)
162
- @cs.send_cud.should == [{'version'=>ClientSync::VERSION},
163
- {'token'=>@c.get_value(:page_token)},
156
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
164
157
  {'count'=>data.size},{'progress_count'=>0},
165
158
  {'total_count'=>data.size},expected]
166
159
  verify_result(@cs.client.docname(:page) => data,
@@ -172,14 +165,13 @@ describe "ClientSync" do
172
165
  msg = "Error during query"
173
166
  data = {'1'=>@product1,'2'=>@product2}
174
167
  set_test_data('test_db_storage',data,msg,'query error')
175
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
176
- {"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
168
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
177
169
  {"source-error"=>{"query-error"=>{"message"=>msg}}}]
178
170
  end
179
171
 
180
172
  it "should return login errors in send cud" do
181
173
  @u.login = nil
182
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},{"token"=>""},
174
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
183
175
  {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
184
176
  {'source-error'=>{"login-error"=>{"message"=>"Error logging in"}}}]
185
177
  end
@@ -187,8 +179,7 @@ describe "ClientSync" do
187
179
  it "should return logoff errors in send cud" do
188
180
  msg = "Error logging off"
189
181
  set_test_data('test_db_storage',{},msg,'logoff error')
190
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
191
- {"token"=>@c.get_value(:page_token)},
182
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
192
183
  {"count"=>1}, {"progress_count"=>0}, {"total_count"=>1},
193
184
  {"source-error"=>{"logoff-error"=>{"message"=>msg}},
194
185
  "insert"=>{ERROR=>{"name"=>"logoff error", "an_attribute"=>msg}}}]
@@ -211,8 +202,7 @@ describe "ClientSync" do
211
202
  error_objs = add_error_object({},"Error delete record")
212
203
  op_data = {'delete'=>error_objs}
213
204
  @cs.receive_cud(op_data)
214
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
215
- {"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
205
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
216
206
  {"delete-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>error_objs[ERROR]}}]
217
207
  end
218
208
 
@@ -221,12 +211,10 @@ describe "ClientSync" do
221
211
  error_objs = add_error_object({},"Error delete record")
222
212
  op_data = {'delete'=>error_objs}
223
213
  @cs.receive_cud(op_data)
224
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
225
- {"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
214
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
226
215
  {"delete-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>error_objs[ERROR]}}]
227
216
  verify_result(@c.docname(:delete_errors) => {})
228
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
229
- {"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},{}]
217
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},{}]
230
218
  end
231
219
 
232
220
 
@@ -295,7 +283,7 @@ describe "ClientSync" do
295
283
  def search_and_verify_res(params)
296
284
  res = @cs.search(params)
297
285
  token = @c.get_value(:search_token)
298
- res[0]['version'].should == ClientSync::VERSION
286
+ res[0]['version'].should == ClientSync::SYNC_VERSION
299
287
  res[1]['token'].should == token
300
288
  res[2]['source'].should == @s.name
301
289
  res[3]['count'].should == 1
@@ -307,7 +295,7 @@ describe "ClientSync" do
307
295
  set_state('test_db_storage' => @data)
308
296
  res = @cs.search(params)
309
297
  token = @c.get_value(:search_token)
310
- res.should == [{'version'=>ClientSync::VERSION},{'token'=>token},
298
+ res.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
311
299
  {'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
312
300
  verify_result(@c.docname(:search) => {'1'=>@product1},
313
301
  @c.docname(:search_errors) => {})
@@ -318,7 +306,7 @@ describe "ClientSync" do
318
306
  set_state('test_db_storage' => @data)
319
307
  res = @cs.search(nil)
320
308
  token = @c.get_value(:search_token)
321
- res.should == [{'version'=>ClientSync::VERSION},{'token'=>token},
309
+ res.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
322
310
  {'source'=>@s.name},{'count'=>@data.size},{'insert'=>@data}]
323
311
  verify_result(@c.docname(:search) => @data,
324
312
  @c.docname(:search_errors) => {})
@@ -371,8 +359,7 @@ describe "ClientSync" do
371
359
  @source = @s
372
360
  set_state({@c.docname(:search_page) => {'1'=>@product1}})
373
361
  token = compute_token @cs.client.docname(:search_token)
374
- @cs.search({:resend => true,:token => token}).should == [{'version'=>ClientSync::VERSION},
375
- {'token'=>token},{'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
362
+ @cs.search({:resend => true,:token => token}).should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},{'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
376
363
  verify_result(@c.docname(:search_page) => {'1'=>@product1},
377
364
  @c.docname(:search_errors) => {},
378
365
  @cs.client.docname(:search_token) => token)
@@ -395,8 +382,7 @@ describe "ClientSync" do
395
382
  @cs.search(
396
383
  {:token => 'abc',
397
384
  :search => {'name' => 'iPhone'}}
398
- ).should == [{'version'=>ClientSync::VERSION},
399
- {'source'=>@s.name},{'search-error'=>{'search-error'=>
385
+ ).should == [{'version'=>ClientSync::SYNC_VERSION},{'source'=>@s.name},{'search-error'=>{'search-error'=>
400
386
  {'message'=>"Search error - invalid token"}}}]
401
387
  verify_result(@c.docname(:search) => {},
402
388
  @c.docname(:search_errors) => {},
@@ -408,7 +394,7 @@ describe "ClientSync" do
408
394
  set_state('test_db_storage' => @data)
409
395
  res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
410
396
  token = Store.get_value(@cs.client.docname(:search_token))
411
- res.should == [[{'version'=>ClientSync::VERSION},{'token'=>token},
397
+ res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
412
398
  {'source'=>sources[0]['name']},{'count'=>1},{'insert'=>{'1'=>@product1}}]]
413
399
  verify_result(@c.docname(:search) => {'1'=>@product1},
414
400
  @c.docname(:search_errors) => {})
@@ -420,7 +406,7 @@ describe "ClientSync" do
420
406
  @s.pass_through = 'true'
421
407
  res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
422
408
  token = Store.get_value(@cs.client.docname(:search_token))
423
- res.should == [[{'version'=>ClientSync::VERSION},{'token'=>token},
409
+ res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
424
410
  {'source'=>sources[0]['name']},{'count'=>1},{'insert'=>{'1'=>@product1}}]]
425
411
  verify_result(@c.docname(:search) => {},
426
412
  @c.docname(:search_errors) => {})
@@ -432,8 +418,7 @@ describe "ClientSync" do
432
418
  error = set_test_data('test_db_storage',@data,msg,'search error')
433
419
  res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
434
420
  token = Store.get_value(@cs.client.docname(:search_token))
435
- res.should == [[{'version'=>ClientSync::VERSION},
436
- {'source'=>sources[0]['name']},{'search-error'=>{'search-error'=>{'message'=>msg}}}]]
421
+ res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'source'=>sources[0]['name']},{'search-error'=>{'search-error'=>{'message'=>msg}}}]]
437
422
  verify_result(@c.docname(:search) => {})
438
423
  end
439
424
 
@@ -443,7 +428,7 @@ describe "ClientSync" do
443
428
  msg = "Error logging in"
444
429
  error = set_test_data('test_db_storage',@data,msg,'search error')
445
430
  ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}}).should == [
446
- [{'version'=>ClientSync::VERSION},{'source'=>sources[0]['name']},
431
+ [{'version'=>ClientSync::SYNC_VERSION},{'source'=>sources[0]['name']},
447
432
  {'search-error'=>{'login-error'=>{'message'=>msg}}}]]
448
433
  verify_result(@c.docname(:search) => {},
449
434
  @c.docname(:search_token) => nil)
@@ -455,7 +440,7 @@ describe "ClientSync" do
455
440
  res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
456
441
  @c.source_name = 'SampleAdapter'
457
442
  token = Store.get_value(@c.docname(:search_token))
458
- res.sort.should == [[{"version"=>ClientSync::VERSION},{'token'=>token},
443
+ res.sort.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
459
444
  {"source"=>"SampleAdapter"},{"count"=>1},{"insert"=>{'1'=>@product1}}],[]].sort
460
445
  end
461
446
 
@@ -467,9 +452,9 @@ describe "ClientSync" do
467
452
  token = Store.get_value(@c.docname(:search_token))
468
453
  @c.source_name = 'SampleAdapter'
469
454
  token1 = Store.get_value(@c.docname(:search_token))
470
- res.should == [[{"version"=>ClientSync::VERSION}, {'token'=>token},
455
+ res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
471
456
  {"source"=>"SimpleAdapter"},{"count"=>1},{"insert"=>{'obj'=>{'foo'=>'bar'}}}],
472
- [{"version"=>ClientSync::VERSION},{'token'=>token1},{"source"=>"SampleAdapter"},
457
+ [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token1},{"source"=>"SampleAdapter"},
473
458
  {"count"=>1}, {"insert"=>{'1'=>@product1}}]]
474
459
  end
475
460
 
@@ -507,8 +492,7 @@ describe "ClientSync" do
507
492
  Store.get_data(@s.docname(:md)).should == @data
508
493
  Store.put_value(@s.docname(:md_size),@data.size)
509
494
 
510
- progress_count, total_count, res = @cs.compute_page
511
- progress_count.to_i.should == 0
495
+ total_count, res = @cs.compute_page
512
496
  total_count.to_i.should == 3
513
497
  res.each do |key, value|
514
498
  @data.has_key?(key).should == true
@@ -565,10 +549,10 @@ describe "ClientSync" do
565
549
  params = {'name' => 'iPhone'}
566
550
  @cs.send_cud(nil,params)
567
551
  token = @c.get_value(:page_token)
568
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},{"token"=>token},
552
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
569
553
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},{'insert' => expected}]
570
- @cs.send_cud(token).should == [{"version"=>ClientSync::VERSION},{"token"=>""},
571
- {"count"=>0}, {"progress_count"=>1}, {"total_count"=>1}, {}]
554
+ @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
555
+ {"count"=>0}, {"progress_count"=>0}, {"total_count"=>1}, {}]
572
556
  Store.get_data(@cs.client.docname(:page)).should == {}
573
557
  @c.get_value(:page_token).should be_nil
574
558
  end
@@ -580,7 +564,7 @@ describe "ClientSync" do
580
564
  mock_metadata_method([SampleAdapter]) do
581
565
  result = @cs.send_cud
582
566
  token = @c.get_value(:page_token)
583
- result.should == [{"version"=>ClientSync::VERSION},{"token"=>token},
567
+ result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
584
568
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},
585
569
  {'metadata'=>metadata,'insert'=>expected}]
586
570
  @c.get_value(:metadata_page).should == metadata
@@ -593,7 +577,7 @@ describe "ClientSync" do
593
577
  mock_metadata_method([SampleAdapter]) do
594
578
  result = @cs.send_cud
595
579
  token = @c.get_value(:page_token)
596
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},{"token"=>token},
580
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
597
581
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},
598
582
  {'metadata'=>"{\"foo\":\"bar\"}",'insert'=>expected}]
599
583
  end
@@ -605,8 +589,8 @@ describe "ClientSync" do
605
589
  mock_metadata_method([SampleAdapter]) do
606
590
  result = @cs.send_cud
607
591
  token = @c.get_value(:page_token)
608
- @cs.send_cud(token).should == [{"version"=>ClientSync::VERSION},{"token"=>""},
609
- {"count"=>0}, {"progress_count"=>1},{"total_count"=>1},{}]
592
+ @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
593
+ {"count"=>0}, {"progress_count"=>0},{"total_count"=>1},{}]
610
594
  @c.get_value(:metadata_page).should be_nil
611
595
  end
612
596
  end
@@ -617,7 +601,7 @@ describe "ClientSync" do
617
601
  mock_schema_method([SampleAdapter]) do
618
602
  result = @cs.send_cud
619
603
  token = @c.get_value(:page_token)
620
- result.should == [{"version"=>ClientSync::VERSION},{"token"=>token},
604
+ result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
621
605
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},{'insert'=>expected}]
622
606
  @c.get_value(:schema_sha1).should == sha1
623
607
  end
@@ -628,7 +612,7 @@ describe "ClientSync" do
628
612
  @c.put_value(:schema_sha1,'foo')
629
613
  result = @cs.send_cud
630
614
  token = @c.get_value(:page_token)
631
- result.should == [{"version"=>ClientSync::VERSION},{"token"=>token},
615
+ result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
632
616
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{'schema-changed'=>'true'}]
633
617
  @c.get_value(:schema_page).should == sha1
634
618
  @c.get_value(:schema_sha1).should == sha1
@@ -640,7 +624,7 @@ describe "ClientSync" do
640
624
  @c.put_value(:schema_sha1,'foo')
641
625
  result = @cs.send_cud
642
626
  token = @c.get_value(:page_token)
643
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},{"token"=>token},
627
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
644
628
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{'schema-changed'=>'true'}]
645
629
  @c.get_value(:schema_page).should == sha1
646
630
  @c.get_value(:schema_sha1).should == sha1
@@ -652,7 +636,7 @@ describe "ClientSync" do
652
636
  @c.put_value(:schema_sha1,'foo')
653
637
  result = @cs.send_cud
654
638
  token = @c.get_value(:page_token)
655
- @cs.send_cud(token).should == [{"version"=>ClientSync::VERSION},{"token"=>""},
639
+ @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
656
640
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{}]
657
641
  @c.get_value(:schema_page).should be_nil
658
642
  @c.get_value(:schema_sha1).should == sha1
@@ -671,7 +655,7 @@ describe "ClientSync" do
671
655
  @c.put_value(:schema_sha1,'foo')
672
656
  result = @cs.send_cud
673
657
  token = @c.get_value(:page_token)
674
- @cs.send_cud(token).should == [{"version"=>ClientSync::VERSION},{"token"=>""},
658
+ @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
675
659
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{}]
676
660
  @c.get_value(:schema_page).should be_nil
677
661
  @c.get_value(:schema_sha1).should == sha1
@@ -790,15 +774,13 @@ describe "ClientSync" do
790
774
  op_data = {operation=>{ERROR=>{'an_attribute'=>msg,'name'=>'wrongname'}}}
791
775
  @cs.receive_cud(op_data)
792
776
  if operation == 'update'
793
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
794
- {"token"=>""}, {"count"=>0}, {"progress_count"=>1}, {"total_count"=>1},
777
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>1},
795
778
  {
796
779
  "update-rollback"=>{"0_broken_object_id"=>{"price"=>"99.99"}},
797
780
  "#{operation}-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>op_data[operation][ERROR]}
798
781
  }]
799
782
  else
800
- @cs.send_cud.should == [{"version"=>ClientSync::VERSION},
801
- {"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
783
+ @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
802
784
  {"#{operation}-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>op_data[operation][ERROR]}}]
803
785
  end
804
786
  end