rhoconnect 3.2.1 → 3.3.1.beta2

Sign up to get free protection for your applications and to get access to all the features.
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