rhoconnect 3.4.5 → 4.0.0.beta.10

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 (337) hide show
  1. data/CHANGELOG.md +57 -3
  2. data/Gemfile +9 -7
  3. data/Gemfile.lock +37 -37
  4. data/Rakefile +18 -7
  5. data/bench/benchapp/Gemfile +1 -1
  6. data/bench/benchapp/config.ru +0 -3
  7. data/bench/benchapp/controllers/ruby/application.rb +17 -0
  8. data/bench/benchapp/controllers/ruby/application_controller.rb +17 -0
  9. data/bench/benchapp/controllers/ruby/mock_adapter_controller.rb +8 -0
  10. data/bench/benchapp/controllers/ruby/queue_mock_adapter_controller.rb +8 -0
  11. data/bench/benchapp/{sources → models/ruby}/mock_adapter.rb +1 -1
  12. data/bench/benchapp/{sources → models/ruby}/queue_mock_adapter.rb +0 -0
  13. data/bench/benchapp/spec/{sources → models/ruby}/mock_adapter_spec.rb +1 -1
  14. data/bench/benchapp/spec/{sources → models/ruby}/queue_mock_adapter_spec.rb +1 -1
  15. data/bench/benchapp/spec/spec_helper.rb +2 -2
  16. data/bench/blobapp/Gemfile +1 -1
  17. data/bench/blobapp/config.ru +0 -3
  18. data/bench/blobapp/controllers/ruby/application_controller.rb +17 -0
  19. data/bench/blobapp/controllers/ruby/blob_adapter_controller.rb +8 -0
  20. data/bench/blobapp/{sources → models/ruby}/blob_adapter.rb +9 -2
  21. data/bench/blobapp/spec/{sources → models/ruby}/blob_adapter_spec.rb +1 -1
  22. data/bench/blobapp/spec/spec_helper.rb +1 -1
  23. data/bench/lib/bench/cli.rb +1 -1
  24. data/bench/scripts/blob_cud_script.rb +1 -1
  25. data/bench/scripts/query_md_script.rb +1 -1
  26. data/bench/scripts/query_only_script.rb +1 -1
  27. data/bench/scripts/query_script.rb +1 -1
  28. data/bench/scripts/test_query_script.rb +7 -1
  29. data/bench/spec/mock_adapter_spec.rb +1 -1
  30. data/bench/spec/result_spec.rb +3 -3
  31. data/bin/rhoconnect +5 -3
  32. data/commands/dtach/dtach_install.rb +2 -2
  33. data/commands/execute.rb +8 -3
  34. data/commands/generators/app.rb +3 -3
  35. data/commands/generators/controller.rb +6 -0
  36. data/commands/generators/model.rb +6 -0
  37. data/commands/generators/source.rb +3 -3
  38. data/commands/generators/update.rb +1 -1
  39. data/commands/redis/redis_about.rb +2 -2
  40. data/commands/redis/redis_download.rb +1 -1
  41. data/commands/redis/redis_install.rb +4 -3
  42. data/commands/redis/redis_restart.rb +4 -4
  43. data/commands/redis/redis_start.rb +5 -4
  44. data/commands/redis/redis_startbg.rb +5 -4
  45. data/commands/redis/redis_status.rb +13 -0
  46. data/commands/redis/redis_stop.rb +3 -3
  47. data/commands/rhoconnect/config.rb +28 -16
  48. data/commands/rhoconnect/flushdb.rb +1 -2
  49. data/commands/rhoconnect/get_token.rb +15 -11
  50. data/commands/rhoconnect/restart.rb +13 -5
  51. data/commands/rhoconnect/set_admin_password.rb +8 -8
  52. data/commands/rhoconnect/start.rb +74 -16
  53. data/commands/rhoconnect/startbg.rb +1 -1
  54. data/commands/rhoconnect/startdebug.rb +1 -1
  55. data/commands/rhoconnect/stop.rb +13 -1
  56. data/commands/rhoconnect/web.rb +5 -5
  57. data/commands/rhoconnect_console/console.rb +7 -5
  58. data/commands/{rhoconnect → rhoconnect_spec}/spec.rb +0 -0
  59. data/commands/rhoconnect_war/war.rb +9 -9
  60. data/commands/utilities/blank_app.ru +56 -0
  61. data/commands/utilities/redis_runner.rb +54 -19
  62. data/doc/authentication.txt +80 -6
  63. data/doc/blob-sync.txt +104 -97
  64. data/doc/bulk-sync.txt +1 -1
  65. data/doc/client-java.txt +3 -3
  66. data/doc/client-objc.txt +2 -2
  67. data/doc/client.txt +4 -4
  68. data/doc/command-line.txt +105 -200
  69. data/doc/data-partitioning.txt +40 -0
  70. data/doc/deploying.txt +249 -77
  71. data/doc/extending-rhoconnect-server.txt +40 -57
  72. data/doc/heroku-addon.txt +2 -0
  73. data/doc/install.txt +45 -95
  74. data/doc/introduction.txt +1 -1
  75. data/doc/java-plugin.txt +365 -190
  76. data/doc/metadata.txt +1 -1
  77. data/doc/migration.txt +108 -142
  78. data/doc/preparing-production.txt +1 -1
  79. data/doc/push-backend-setup.txt +2 -0
  80. data/doc/push-client-setup-android.txt +78 -0
  81. data/doc/push-client-setup-bb.txt +81 -0
  82. data/doc/push-client-setup-ios.txt +70 -0
  83. data/doc/push-client-setup-rps.txt +200 -0
  84. data/doc/push-client-setup.txt +63 -66
  85. data/doc/push-server-setup.txt +67 -40
  86. data/doc/push-testing.txt +29 -0
  87. data/doc/push.txt +21 -6
  88. data/doc/rest-api.txt +128 -55
  89. data/doc/rhoconnect-redis-stack.txt +120 -0
  90. data/doc/settings.txt +4 -12
  91. data/doc/source-adapters-intro.txt +28 -0
  92. data/doc/source-adapters.txt +235 -272
  93. data/doc/stats-middleware.txt +9 -29
  94. data/doc/supported-platforms.txt +21 -30
  95. data/doc/testing.txt +40 -42
  96. data/doc/tutorial.txt +72 -57
  97. data/examples/simple/Gemfile +1 -1
  98. data/examples/simple/application.rb +4 -5
  99. data/examples/simple/my_server.rb +2 -2
  100. data/examples/simple/settings/settings.yml +1 -1
  101. data/generators/rhoconnect.rb +151 -50
  102. data/generators/templates/application/Gemfile +1 -1
  103. data/generators/templates/application/Rakefile +3 -3
  104. data/generators/templates/application/config.ru +1 -4
  105. data/generators/templates/application/controllers/application_controller.rb +17 -0
  106. data/generators/templates/application/controllers/js/application_controller.js +14 -0
  107. data/generators/templates/application/controllers/ruby/application_controller.rb +17 -0
  108. data/generators/templates/application/package.json +8 -0
  109. data/generators/templates/application/rcgemfile +2 -5
  110. data/generators/templates/application/settings/settings.yml +3 -3
  111. data/generators/templates/application/spec/application_controller_spec.rb +23 -0
  112. data/generators/templates/application/spec/js_spec.rb +25 -0
  113. data/generators/templates/application/spec/spec_helper.rb +21 -7
  114. data/generators/templates/source/controllers/js/controller.js +7 -0
  115. data/generators/templates/source/controllers/ruby/controller.rb +8 -0
  116. data/generators/templates/source/controllers/ruby/controller_spec.rb +27 -0
  117. data/generators/templates/source/models/js/model.js +46 -0
  118. data/generators/templates/source/{source_adapter.rb → models/ruby/model.rb} +15 -10
  119. data/generators/templates/source/{source_spec.rb → models/ruby/model_spec.rb} +1 -1
  120. data/install.sh +5 -5
  121. data/installer/unix-like/create_texts.rb +2 -2
  122. data/installer/unix-like/rho_connect_install_constants.rb +2 -2
  123. data/installer/unix-like/rho_connect_install_utilities.rb +1 -1
  124. data/installer/utils/constants.rb +4 -4
  125. data/js-adapters/ballroom.js +216 -0
  126. data/js-adapters/node.rb +52 -0
  127. data/js-adapters/node_channel.rb +181 -0
  128. data/js-adapters/request.js +27 -0
  129. data/js-adapters/response.js +57 -0
  130. data/js-adapters/rhoconnect_helpers.js +60 -0
  131. data/js-adapters/router.js +60 -0
  132. data/js-adapters/server.js +5 -0
  133. data/lib/rhoconnect/api/app/ans_login.rb +3 -3
  134. data/lib/rhoconnect/api/app/bulk_data.rb +10 -10
  135. data/lib/rhoconnect/api/app/fast_delete.rb +11 -10
  136. data/lib/rhoconnect/api/app/fast_insert.rb +11 -10
  137. data/lib/rhoconnect/api/app/fast_update.rb +11 -10
  138. data/lib/rhoconnect/api/app/login.rb +5 -5
  139. data/lib/rhoconnect/api/app/push_deletes.rb +12 -11
  140. data/lib/rhoconnect/api/app/push_objects.rb +12 -11
  141. data/lib/rhoconnect/api/app/query.rb +8 -7
  142. data/lib/rhoconnect/api/app/queue_updates.rb +98 -94
  143. data/lib/rhoconnect/api/app/search.rb +8 -7
  144. data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -5
  145. data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -8
  146. data/lib/rhoconnect/api/client/create.rb +7 -7
  147. data/lib/rhoconnect/api/client/get_client_params.rb +4 -4
  148. data/lib/rhoconnect/api/client/list_client_docs.rb +17 -17
  149. data/lib/rhoconnect/api/client/register.rb +12 -12
  150. data/lib/rhoconnect/api/client/reset.rb +5 -5
  151. data/lib/rhoconnect/api/readstate/set_refresh_time.rb +9 -9
  152. data/lib/rhoconnect/api/source/get_source_params.rb +4 -4
  153. data/lib/rhoconnect/api/source/list_sources.rb +16 -16
  154. data/lib/rhoconnect/api/source/update_source_params.rb +6 -6
  155. data/lib/rhoconnect/api/store/get_db_doc.rb +4 -4
  156. data/lib/rhoconnect/api/store/set_db_doc.rb +7 -7
  157. data/lib/rhoconnect/api/system/get_adapter.rb +4 -4
  158. data/lib/rhoconnect/api/system/get_license_info.rb +8 -8
  159. data/lib/rhoconnect/api/system/login.rb +15 -15
  160. data/lib/rhoconnect/api/system/reset.rb +11 -11
  161. data/lib/rhoconnect/api/system/save_adapter.rb +4 -4
  162. data/lib/rhoconnect/api/system/stats.rb +22 -22
  163. data/lib/rhoconnect/api/user/create_user.rb +7 -7
  164. data/lib/rhoconnect/api/user/delete_client.rb +6 -6
  165. data/lib/rhoconnect/api/user/delete_user.rb +11 -10
  166. data/lib/rhoconnect/api/user/list_clients.rb +4 -4
  167. data/lib/rhoconnect/api/user/list_source_docs.rb +10 -10
  168. data/lib/rhoconnect/api/user/list_users.rb +3 -3
  169. data/lib/rhoconnect/api/user/ping.rb +3 -3
  170. data/lib/rhoconnect/api/user/show_user.rb +3 -3
  171. data/lib/rhoconnect/api/user/update_user.rb +5 -5
  172. data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -5
  173. data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -10
  174. data/lib/rhoconnect/api_token.rb +5 -6
  175. data/lib/rhoconnect/app.rb +6 -46
  176. data/lib/rhoconnect/application/init.rb +5 -2
  177. data/lib/rhoconnect/async.rb +76 -39
  178. data/lib/rhoconnect/bulk_data/bulk_data.rb +6 -4
  179. data/lib/rhoconnect/client.rb +59 -9
  180. data/lib/rhoconnect/condition/admin_required.rb +27 -0
  181. data/lib/rhoconnect/condition/client_required.rb +50 -0
  182. data/lib/rhoconnect/condition/login_required.rb +22 -0
  183. data/lib/rhoconnect/condition/source_required.rb +49 -0
  184. data/lib/rhoconnect/condition/verbs.rb +17 -0
  185. data/lib/rhoconnect/condition/verify_success.rb +19 -0
  186. data/lib/rhoconnect/controller/app_base.rb +74 -0
  187. data/lib/rhoconnect/controller/base.rb +68 -0
  188. data/lib/rhoconnect/controller/clients_controller.rb +79 -0
  189. data/lib/rhoconnect/controller/dynamic_adapter_controller.rb +93 -0
  190. data/lib/rhoconnect/controller/js_base.rb +124 -0
  191. data/lib/rhoconnect/controller/read_state_controller.rb +22 -0
  192. data/lib/rhoconnect/controller/source_adapter_base.rb +14 -0
  193. data/lib/rhoconnect/controller/sources_controller.rb +44 -0
  194. data/lib/rhoconnect/controller/store_controller.rb +25 -0
  195. data/lib/rhoconnect/controller/system_controller.rb +67 -0
  196. data/lib/rhoconnect/controller/users_controller.rb +99 -0
  197. data/lib/rhoconnect/db_adapter.rb +1 -3
  198. data/lib/rhoconnect/document.rb +159 -50
  199. data/lib/rhoconnect/handler/authenticate/execute_methods.rb +77 -0
  200. data/lib/rhoconnect/handler/authenticate/runner.rb +49 -0
  201. data/lib/rhoconnect/handler/authenticate.rb +3 -0
  202. data/lib/rhoconnect/handler/bulk_data.rb +28 -0
  203. data/lib/rhoconnect/handler/changes/engine.rb +271 -0
  204. data/lib/rhoconnect/handler/changes/execute_methods.rb +88 -0
  205. data/lib/rhoconnect/handler/changes/pass_through_runner.rb +11 -0
  206. data/lib/rhoconnect/handler/changes/runner.rb +53 -0
  207. data/lib/rhoconnect/handler/changes.rb +31 -0
  208. data/lib/rhoconnect/handler/helpers/auth_method.rb +29 -0
  209. data/lib/rhoconnect/handler/helpers/binding.rb +18 -0
  210. data/lib/rhoconnect/handler/helpers/bulk_data.rb +53 -0
  211. data/lib/rhoconnect/handler/helpers/source_job.rb +14 -0
  212. data/lib/rhoconnect/handler/helpers.rb +4 -0
  213. data/lib/rhoconnect/handler/plugin_callbacks/execute_methods.rb +99 -0
  214. data/lib/rhoconnect/handler/plugin_callbacks/runner.rb +28 -0
  215. data/lib/rhoconnect/handler/plugin_callbacks.rb +67 -0
  216. data/lib/rhoconnect/handler/query/engine.rb +93 -0
  217. data/lib/rhoconnect/handler/query/execute_methods.rb +21 -0
  218. data/lib/rhoconnect/handler/query/pass_through_runner.rb +35 -0
  219. data/lib/rhoconnect/handler/query/runner.rb +270 -0
  220. data/lib/rhoconnect/handler/query.rb +19 -0
  221. data/lib/rhoconnect/handler/search/engine.rb +60 -0
  222. data/lib/rhoconnect/handler/search/execute_methods.rb +32 -0
  223. data/lib/rhoconnect/handler/search/pass_through_runner.rb +18 -0
  224. data/lib/rhoconnect/handler/search/runner.rb +104 -0
  225. data/lib/rhoconnect/handler/search.rb +26 -0
  226. data/lib/rhoconnect/handler/sync.rb +29 -0
  227. data/lib/rhoconnect/jobs/source_job.rb +13 -4
  228. data/lib/rhoconnect/js_adapter.rb +79 -0
  229. data/lib/rhoconnect/license.rb +10 -2
  230. data/lib/rhoconnect/middleware/current_user.rb +14 -1
  231. data/lib/rhoconnect/middleware/helpers.rb +10 -93
  232. data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +1 -1
  233. data/lib/rhoconnect/model/base.rb +229 -0
  234. data/lib/rhoconnect/model/dynamic_adapter_model.rb +90 -0
  235. data/lib/rhoconnect/model/js_base.rb +121 -0
  236. data/lib/rhoconnect/ping/android.rb +1 -1
  237. data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -4
  238. data/lib/rhoconnect/read_state.rb +3 -3
  239. data/lib/rhoconnect/server.rb +159 -190
  240. data/lib/rhoconnect/source.rb +100 -11
  241. data/lib/rhoconnect/stats/record.rb +10 -10
  242. data/lib/rhoconnect/store.rb +905 -591
  243. data/lib/rhoconnect/{model.rb → store_orm.rb} +53 -115
  244. data/lib/rhoconnect/tasks.rb +18 -4
  245. data/lib/rhoconnect/test_methods.rb +30 -17
  246. data/lib/rhoconnect/user.rb +35 -17
  247. data/lib/rhoconnect/utilities.rb +1 -1
  248. data/lib/rhoconnect/version.rb +2 -2
  249. data/lib/rhoconnect/web-console/server.rb +29 -14
  250. data/lib/rhoconnect/web-console/views/home.js +10 -10
  251. data/lib/rhoconnect/web-console/views/new_ping.js +1 -1
  252. data/lib/rhoconnect.rb +120 -51
  253. data/rhoconnect.gemspec +4 -3
  254. data/spec/api/api_helper.rb +1 -6
  255. data/spec/api/app/fast_delete_spec.rb +4 -4
  256. data/spec/api/app/fast_insert_spec.rb +4 -4
  257. data/spec/api/app/fast_update_spec.rb +8 -8
  258. data/spec/api/app/push_deletes_spec.rb +2 -2
  259. data/spec/api/app/push_objects_spec.rb +5 -5
  260. data/spec/api/client/client_get_db_doc_spec.rb +6 -4
  261. data/spec/api/client/client_set_db_doc_spec.rb +3 -2
  262. data/spec/api/client/get_client_params_spec.rb +14 -0
  263. data/spec/api/client/list_client_docs_spec.rb +30 -20
  264. data/spec/api/client/reset_spec.rb +36 -0
  265. data/spec/api/source/get_source_params_spec.rb +23 -17
  266. data/spec/api/system/get_license_info_spec.rb +0 -20
  267. data/spec/api/system/login_spec.rb +8 -0
  268. data/spec/api/system/reset_spec.rb +0 -1
  269. data/spec/api/system/stats_spec.rb +5 -5
  270. data/spec/api/user/create_user_spec.rb +14 -6
  271. data/spec/api/user/delete_user_spec.rb +20 -18
  272. data/spec/api/user/list_users_spec.rb +5 -6
  273. data/spec/api/user/update_user_spec.rb +5 -4
  274. data/spec/apps/rhotestapp/config.ru +16 -1
  275. data/spec/apps/rhotestapp/controllers/js/js_sample_controller.js +23 -0
  276. data/spec/apps/rhotestapp/controllers/js/sample2_controller.js +32 -0
  277. data/spec/apps/rhotestapp/controllers/ruby/application_controller.rb +21 -0
  278. data/spec/apps/rhotestapp/controllers/ruby/sample_adapter_controller.rb +8 -0
  279. data/spec/apps/rhotestapp/models/js/js_sample.js +55 -0
  280. data/spec/apps/rhotestapp/models/js/sample2.js +25 -0
  281. data/spec/apps/rhotestapp/{sources → models/ruby}/base_adapter.rb +0 -0
  282. data/spec/apps/rhotestapp/{sources → models/ruby}/fixed_schema_adapter.rb +0 -0
  283. data/spec/apps/rhotestapp/{sources → models/ruby}/other_adapter.rb +0 -0
  284. data/spec/apps/rhotestapp/{sources → models/ruby}/sample_adapter.rb +0 -0
  285. data/spec/apps/rhotestapp/{sources → models/ruby}/simple_adapter.rb +2 -2
  286. data/spec/apps/rhotestapp/{sources → models/ruby}/sub_adapter.rb +0 -0
  287. data/spec/apps/rhotestapp/settings/settings.yml +0 -1
  288. data/spec/bulk_data/bulk_data_spec.rb +20 -5
  289. data/spec/cli/cli_spec.rb +83 -0
  290. data/spec/client_spec.rb +20 -17
  291. data/spec/client_sync_spec.rb +244 -406
  292. data/spec/controllers/js_base_spec.rb +89 -0
  293. data/spec/doc/doc_spec.rb +18 -18
  294. data/spec/document_spec.rb +29 -13
  295. data/spec/dynamic_adapter_spec.rb +6 -6
  296. data/spec/generator/generator_spec.rb +7 -4
  297. data/spec/jobs/bulk_data_job_spec.rb +14 -10
  298. data/spec/jobs/source_job_spec.rb +8 -8
  299. data/spec/license_spec.rb +5 -2
  300. data/spec/models/js_model_spec.rb +39 -0
  301. data/spec/node_spec.rb +42 -0
  302. data/spec/perf/store_perf_spec.rb +67 -12
  303. data/spec/ping/android_spec.rb +1 -1
  304. data/spec/read_state_spec.rb +1 -1
  305. data/spec/rhoconnect_spec.rb +1 -1
  306. data/spec/server/cors_spec.rb +14 -18
  307. data/spec/server/server_spec.rb +265 -88
  308. data/spec/server/stats_spec.rb +1 -1
  309. data/spec/source_adapter_spec.rb +54 -27
  310. data/spec/source_spec.rb +8 -3
  311. data/spec/source_sync_spec.rb +538 -468
  312. data/spec/spec_helper.rb +35 -4
  313. data/spec/stats/record_spec.rb +10 -10
  314. data/spec/{model_spec.rb → store_orm_spec.rb} +56 -54
  315. data/spec/store_spec.rb +159 -179
  316. data/spec/support/shared_examples.rb +36 -27
  317. data/spec/sync_states_spec.rb +40 -33
  318. data/spec/test_methods_spec.rb +18 -14
  319. data/spec/user_spec.rb +17 -30
  320. metadata +156 -52
  321. data/bench/benchapp/application.rb +0 -39
  322. data/bench/blobapp/application.rb +0 -44
  323. data/commands/rhoconnect/clean_start.rb +0 -9
  324. data/commands/rhoconnect/create_user.rb +0 -18
  325. data/commands/rhoconnect/delete_device.rb +0 -9
  326. data/commands/rhoconnect/delete_user.rb +0 -8
  327. data/commands/rhoconnect/reset.rb +0 -16
  328. data/commands/rhoconnect/reset_refresh.rb +0 -11
  329. data/generators/templates/application/application.rb +0 -43
  330. data/lib/rhoconnect/client_sync.rb +0 -434
  331. data/lib/rhoconnect/dynamic_adapter.rb +0 -91
  332. data/lib/rhoconnect/middleware/admin_user.rb +0 -23
  333. data/lib/rhoconnect/middleware/current_request.rb +0 -16
  334. data/lib/rhoconnect/middleware/login_required.rb +0 -22
  335. data/lib/rhoconnect/source_adapter.rb +0 -132
  336. data/lib/rhoconnect/source_sync.rb +0 -464
  337. data/spec/apps/rhotestapp/application.rb +0 -23
@@ -2,39 +2,21 @@ require File.join(File.dirname(__FILE__),'spec_helper')
2
2
 
3
3
  describe "ClientSync" do
4
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
5
- it "should raise Argument error if no client is provided" do
6
- lambda { ClientSync.new(@s,nil,2) }.should raise_error(ArgumentError,'Unknown client')
7
- end
8
-
9
5
  it "should handle receive cud for dynamic adapter" do
6
+ Rhoconnect.appserver = "http://test.com"
10
7
  params = {'create'=>{'1'=>@product1}}
11
8
  @c.source_name = 'Product2'
12
- @cs1 = ClientSync.new(@s2,@c,2)
9
+ # create handler
10
+ params = {:p_size => 2}
11
+ lv = lambda { @model.create(@params[:create_object]) }
12
+ @model = Rhoconnect::Model::Base.create(@s2)
13
+ @cs1 = Rhoconnect::Handler::Changes::Runner.new(['create'],@model,@c,lv,params)
13
14
  stub_request(:post, "http://test.com/rhoconnect/authenticate")
14
15
  stub_request(:post, "http://test.com/rhoconnect/create").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
15
- @cs1.receive_cud(params)
16
- verify_result(@cs1.client.docname(:create) => {},
17
- @cs1.client.docname(:update) => {},
18
- @cs1.client.docname(:delete) => {})
19
- end
20
-
21
- it "should handle send cud for dynamic adapter" do
22
- Rhoconnect.appserver = "http://test.com"
23
- data = {'1'=>@product1}
24
- expected = {'insert'=>data}
25
- stub_request(:post, "http://test.com/rhoconnect/authenticate")
26
- stub_request(:post, "http://test.com/rhoconnect/query").with(:headers => {'Content-Type' => 'application/json'}).to_return(:status => 200, :body => data.to_json)
27
-
28
- @c.source_name = 'Product'
29
- @cs1 = ClientSync.new(@s2,@c,2)
30
-
31
- @cs1.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
32
- {'count'=>data.size},{'progress_count'=>0},
33
- {'total_count'=>data.size},expected]
34
-
35
- verify_result(@cs1.client.docname(:page) => data,
36
- @cs1.client.docname(:delete_page) => {},
37
- @cs1.client.docname(:cd) => data)
16
+ @cs1.run
17
+ verify_source_queue_data(@s2, {:create => [],
18
+ :update => [],
19
+ :delete => []})
38
20
  end
39
21
 
40
22
  let(:mock_schema) { {"property" => { "name" => "string", "brand" => "string" }, "version" => "1.0"} }
@@ -42,58 +24,105 @@ describe "ClientSync" do
42
24
 
43
25
  before(:each) do
44
26
  @s = Source.load(@s_fields[:name],@s_params)
45
- @cs = ClientSync.new(@s,@c,2)
27
+ # CUD handler
28
+ rhcud = lambda { @model.send params[:operation].to_sym, params["#{params[:operation]}_object".to_sym] }
29
+ @model = Rhoconnect::Model::Base.create(@s)
30
+ @cud_handler = Rhoconnect::Handler::Changes::Runner.new(['create','update','delete'],@model,@c,rhcud,{})
31
+
32
+ # query handler
33
+ params = {:p_size => 2}
34
+ lv = lambda { @model.query(@params[:query]) }
35
+ @sync_handler = Rhoconnect::Handler::Query::Runner.new(@model,@c, lv, params)
46
36
  end
47
37
 
48
38
  it "should handle receive cud" do
49
- params = {'create'=>{'1'=>@product1},'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
50
- @cs.receive_cud(params)
51
- verify_zresult(@s.docname(:create) => [],
52
- @s.docname(:update) => [],
53
- @s.docname(:delete) => [])
39
+ @cud_handler.params = {'create'=>{'1'=>@product1},'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
40
+ @cud_handler.run
41
+ verify_source_queue_data(@s, {:create => [],
42
+ :update => [],
43
+ :delete => []})
54
44
  end
55
45
 
56
46
  it "should handle receive cud that triggers processing of the previously queued data" do
57
47
  queued_create_data = {'1'=>@product1}
58
- set_zstate({@s.docname(:create) => queued_create_data}, @c.id)
59
- verify_zresult(@s.docname(:create) => [queued_create_data],
60
- @cs.client.docname(:update) => [],
61
- @cs.client.docname(:delete) => [])
62
- @cs.receive_cud({:source_name => @s_fields[:name]})
63
- verify_zresult(@s.docname(:create) => [],
64
- @s.docname(:update) => [],
65
- @s.docname(:delete) => [])
48
+ set_source_queue_state(@s, {:create => queued_create_data}, @c.id)
49
+ verify_source_queue_data(@s, {:create => [queued_create_data],
50
+ :update => [],
51
+ :delete => []})
52
+ @cud_handler.run
53
+ verify_source_queue_data(@s, {:create => [],
54
+ :update => [],
55
+ :delete => []})
66
56
  end
67
57
 
68
58
  it "should handle receive cud with pass through" do
69
59
  params = {'create'=>{'1'=>@product1},'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
70
60
  @s.pass_through = 'true'
71
- @cs.receive_cud(params)
72
- verify_zresult(@s.docname(:create) => [],
73
- @s.docname(:update) => [],
74
- @s.docname(:delete) => [])
61
+
62
+ rhcud = lambda { @model.send params[:operation].to_sym, params["#{params[:operation]}_object".to_sym] }
63
+ @cud_handler = Rhoconnect::Handler::Changes::PassThroughRunner.new(['create','update','delete'],@model,@c,rhcud,params)
64
+ @cud_handler.run
65
+ verify_source_queue_data(@s, {:create => [],
66
+ :update => [],
67
+ :delete => []})
75
68
  end
76
69
 
77
70
  it "should handle exeptions in receive cud with pass through" do
78
71
  params = {'create'=>{'1'=>@error},'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
79
72
  @s.pass_through = 'true'
80
- @cs.receive_cud(params)
81
- verify_zresult(@s.docname(:create) => [],
82
- @s.docname(:update) => [],
83
- @s.docname(:delete) => [])
73
+ rhcud = lambda { @model.send params[:operation].to_sym, params["#{params[:operation]}_object".to_sym] }
74
+ @cud_handler = Rhoconnect::Handler::Changes::PassThroughRunner.new(['create','update','delete'],@model,@c,rhcud,params)
75
+ @cud_handler.run
76
+ verify_source_queue_data(@s, {:create => [],
77
+ :update => [],
78
+ :delete => []})
84
79
  end
85
80
 
86
81
  it "should handle send cud" do
87
82
  data = {'1'=>@product1,'2'=>@product2}
88
83
  expected = {'insert'=>data}
89
84
  set_test_data('test_db_storage',data)
90
-
91
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
85
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
86
+ {'count'=>data.size},{'progress_count'=>0},
87
+ {'total_count'=>data.size},expected]
88
+ verify_doc_result(@sync_handler.client, {:page => data,
89
+ :delete_page => {},
90
+ :cd => data})
91
+ end
92
+
93
+ it "should handle send cud with page size 0" do
94
+ data = {'1'=>@product1,'2'=>@product2}
95
+ expected = {}
96
+ set_test_data('test_db_storage',data)
97
+ @sync_handler.p_size = 0
98
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>''},
99
+ {'count'=>0},{'progress_count'=>0},
100
+ {'total_count'=>data.size},expected]
101
+ verify_doc_result(@sync_handler.client, {:page => expected,
102
+ :delete_page => {},
103
+ :cd => expected})
104
+ end
105
+
106
+ it "should handle send cud for dynamic adapter" do
107
+ Rhoconnect.appserver = "http://test.com"
108
+ data = {'1'=>@product1}
109
+ expected = {'insert'=>data}
110
+ stub_request(:post, "http://test.com/rhoconnect/authenticate")
111
+ stub_request(:post, "http://test.com/rhoconnect/query").with(:headers => {'Content-Type' => 'application/json'}).to_return(:status => 200, :body => data.to_json)
112
+
113
+ @c.source_name = 'Product2'
114
+ # query handler
115
+ lv = lambda { @model.query(params[:query]) }
116
+ params = { :p_size => 2 }
117
+ @model = Rhoconnect::Model::Base.create(@s2)
118
+ @cs1 = Rhoconnect::Handler::Query::Runner.new(@model,@c, lv, params)
119
+ @cs1.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
92
120
  {'count'=>data.size},{'progress_count'=>0},
93
121
  {'total_count'=>data.size},expected]
94
- verify_result(@cs.client.docname(:page) => data,
95
- @cs.client.docname(:delete_page) => {},
96
- @cs.client.docname(:cd) => data)
122
+
123
+ verify_doc_result(@cs1.client, {:page => data,
124
+ :delete_page => {},
125
+ :cd => data})
97
126
  end
98
127
 
99
128
  it "should handle send cud with pass_through" do
@@ -101,11 +130,14 @@ describe "ClientSync" do
101
130
  expected = {'insert'=>data}
102
131
  set_test_data('test_db_storage',data)
103
132
  @s.pass_through = 'true'
104
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
133
+ lv = lambda { @model.query(params[:query]) }
134
+ params = { :p_size => 2 }
135
+ @ptsync = Rhoconnect::Handler::Query::PassThroughRunner.new(@model, @c, lv, params)
136
+ @ptsync.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
105
137
  {'count'=>data.size},{'progress_count'=>0},
106
138
  {'total_count'=>data.size},expected]
107
- verify_result(@cs.client.docname(:page) => {},
108
- @cs.client.docname(:cd) => {})
139
+ verify_doc_result(@ptsync.client, {:page => {},
140
+ :cd => {}})
109
141
  end
110
142
 
111
143
  it "should handle send cud if with pass_through no data" do
@@ -113,24 +145,27 @@ describe "ClientSync" do
113
145
  expected = {}
114
146
  #set_test_data('test_db_storage',data)
115
147
  @s.pass_through = 'true'
116
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>""},
148
+ lv = lambda { @model.query(params[:query]) }
149
+ params = { :p_size => 2 }
150
+ @ptsync = Rhoconnect::Handler::Query::PassThroughRunner.new(@model, @c, lv, params)
151
+ @ptsync.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>""},
117
152
  {'count'=>data.size},{'progress_count'=>0},
118
153
  {'total_count'=>data.size},expected]
119
- verify_result(@cs.client.docname(:page) => {},
120
- @cs.client.docname(:cd) => {})
154
+ verify_doc_result(@ptsync.client, {:page => {},
155
+ :cd => {}})
121
156
  end
122
157
 
123
158
  it "should return read errors in send cud" do
124
159
  msg = "Error during query"
125
160
  data = {'1'=>@product1,'2'=>@product2}
126
161
  set_test_data('test_db_storage',data,msg,'query error')
127
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
162
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
128
163
  {"source-error"=>{"query-error"=>{"message"=>msg}}}]
129
164
  end
130
165
 
131
166
  it "should return login errors in send cud" do
132
167
  @u.login = nil
133
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
168
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""},
134
169
  {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
135
170
  {'source-error'=>{"login-error"=>{"message"=>"Error logging in"}}}]
136
171
  end
@@ -138,7 +173,7 @@ describe "ClientSync" do
138
173
  it "should return logoff errors in send cud" do
139
174
  msg = "Error logging off"
140
175
  set_test_data('test_db_storage',{},msg,'logoff error')
141
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
176
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
142
177
  {"count"=>1}, {"progress_count"=>0}, {"total_count"=>1},
143
178
  {"source-error"=>{"logoff-error"=>{"message"=>msg}},
144
179
  "insert"=>{ERROR=>{"name"=>"logoff error", "an_attribute"=>msg}}}]
@@ -153,25 +188,25 @@ describe "ClientSync" do
153
188
  data = {'1'=>@product1,'2'=>@product2}
154
189
  expected = {'insert'=>data}
155
190
  set_test_data('test_db_storage',data)
156
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
191
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>@c.get_value(:page_token)},
157
192
  {'count'=>data.size},{'progress_count'=>0},
158
193
  {'total_count'=>data.size},expected]
159
- verify_result(@cs.client.docname(:page) => data,
160
- @cs.client.docname(:delete_page) => {},
161
- @cs.client.docname(:cd) => data)
194
+ verify_doc_result(@sync_handler.client, {:page => data,
195
+ :delete_page => {},
196
+ :cd => data})
162
197
  end
163
198
 
164
199
  it "should return read errors in send cud" do
165
200
  msg = "Error during query"
166
201
  data = {'1'=>@product1,'2'=>@product2}
167
202
  set_test_data('test_db_storage',data,msg,'query error')
168
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
203
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},
169
204
  {"source-error"=>{"query-error"=>{"message"=>msg}}}]
170
205
  end
171
206
 
172
207
  it "should return login errors in send cud" do
173
208
  @u.login = nil
174
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
209
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""},
175
210
  {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
176
211
  {'source-error'=>{"login-error"=>{"message"=>"Error logging in"}}}]
177
212
  end
@@ -179,7 +214,7 @@ describe "ClientSync" do
179
214
  it "should return logoff errors in send cud" do
180
215
  msg = "Error logging off"
181
216
  set_test_data('test_db_storage',{},msg,'logoff error')
182
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
217
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>@c.get_value(:page_token)},
183
218
  {"count"=>1}, {"progress_count"=>0}, {"total_count"=>1},
184
219
  {"source-error"=>{"logoff-error"=>{"message"=>msg}},
185
220
  "insert"=>{ERROR=>{"name"=>"logoff error", "an_attribute"=>msg}}}]
@@ -192,7 +227,7 @@ describe "ClientSync" do
192
227
 
193
228
  it "should handle update errors" do
194
229
  broken_object = { ERROR => { 'price' => '99.99' } }
195
- set_state(@c.docname(:cd) => broken_object)
230
+ set_doc_state(@c, :cd => broken_object)
196
231
  set_test_data('test_db_storage',broken_object)
197
232
  receive_and_send_cud('update')
198
233
  end
@@ -201,8 +236,9 @@ describe "ClientSync" do
201
236
  msg = "Error delete record"
202
237
  error_objs = add_error_object({},"Error delete record")
203
238
  op_data = {'delete'=>error_objs}
204
- @cs.receive_cud(op_data)
205
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
239
+ @cud_handler.params = op_data
240
+ @cud_handler.run
241
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
206
242
  {"delete-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>error_objs[ERROR]}}]
207
243
  end
208
244
 
@@ -210,64 +246,39 @@ describe "ClientSync" do
210
246
  msg = "Error delete record"
211
247
  error_objs = add_error_object({},"Error delete record")
212
248
  op_data = {'delete'=>error_objs}
213
- @cs.receive_cud(op_data)
214
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
249
+ @cud_handler.params = op_data
250
+ @cud_handler.run
251
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
215
252
  {"delete-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>error_objs[ERROR]}}]
216
253
  verify_result(@c.docname(:delete_errors) => {})
217
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},{}]
254
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},{}]
218
255
  end
219
256
 
220
257
 
221
258
  end
222
259
 
223
260
  it "should handle receive_cud" do
224
- set_state(@s.docname(:md) => {'3'=>@product3},
225
- @c.docname(:cd) => {'3'=>@product3})
261
+ set_doc_state(@s, :md => {'3'=>@product3})
262
+ set_doc_state(@c, :cd => {'3'=>@product3})
226
263
  params = {'create'=>{'1'=>@product1},
227
264
  'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
228
- @cs.receive_cud(params)
229
- verify_zresult(@s.docname(:create) => [],
230
- @s.docname(:update) => [],
231
- @s.docname(:delete) => [])
232
- verify_result(
233
- @s.docname(:md) => {},
234
- @c.docname(:cd) => {})
265
+ @cud_handler.params = params
266
+ @cud_handler.run
267
+ verify_source_queue_data(@s, {:create => [],
268
+ :update => [],
269
+ :delete => []})
270
+ verify_doc_result(@s, :md => {})
271
+ verify_doc_result(@c, :cd => {})
235
272
  end
236
273
 
237
274
  it "should handle send_cud with query_params" do
238
275
  expected = {'1'=>@product1}
239
276
  set_state('test_db_storage' => {'1'=>@product1,'2'=>@product2,'4'=>@product4})
240
277
  params = {'name' => 'iPhone'}
241
- @cs.send_cud(nil,params)
242
- verify_result(@s.docname(:md) => expected,
243
- @cs.client.docname(:page) => expected)
244
- end
245
- end
246
-
247
- describe "reset" do
248
- it "should handle reset" do
249
- set_state(@c.docname(:cd) => @data)
250
- ClientSync.reset(@c)
251
- verify_result(@c.docname(:cd) => {})
252
- Client.load(@c.id,{:source_name => @s.name}).should_not be_nil
253
- end
254
-
255
- it "should handle reset on individual source adapters" do
256
- @c.source_name = 'SampleAdapter'
257
- set_state(@c.docname(:cd) => @data)
258
- verify_result(@c.docname(:cd) => @data)
259
-
260
- @c.source_name = 'SimpleAdapter'
261
- set_state(@c.docname(:cd) => @data)
262
- verify_result(@c.docname(:cd) => @data)
263
-
264
- sources = [{'name'=>'SimpleAdapter'}]
265
- ClientSync.reset(@c, {:sources => sources})
266
-
267
- @c.source_name = 'SampleAdapter'
268
- verify_result(@c.docname(:cd) => @data)
269
- @c.source_name = 'SimpleAdapter'
270
- verify_result(@c.docname(:cd) => {})
278
+ @sync_handler.engine.params = {:query => params}
279
+ @sync_handler.run
280
+ verify_doc_result(@s, :md => expected)
281
+ verify_doc_result(@sync_handler.client, :cd => expected)
271
282
  end
272
283
  end
273
284
 
@@ -277,13 +288,18 @@ describe "ClientSync" do
277
288
  @c_fields.delete(:id)
278
289
  @c1 = Client.create(@c_fields,{:source_name => @s_fields[:name]})
279
290
  @s1 = Source.create(@s_fields,@s_params)
280
- @cs1 = ClientSync.new(@s1,@c1,2)
291
+ search_handler = lambda { @model.search(params[:search]) }
292
+ @model1 = Rhoconnect::Model::Base.create(@s2)
293
+ @cs = Rhoconnect::Handler::Search::Runner.new(@model, @c, search_handler, {})
294
+ @cs1 = Rhoconnect::Handler::Search::Runner.new(@model1,@c1, search_handler, { :p_size => 2 })
281
295
  end
282
296
 
283
297
  def search_and_verify_res(params)
284
- res = @cs.search(params)
298
+ @cs.params = params
299
+ @cs.engine.params = params
300
+ res = @cs.run
285
301
  token = @c.get_value(:search_token)
286
- res[0]['version'].should == ClientSync::SYNC_VERSION
302
+ res[0]['version'].should == Rhoconnect::SYNC_VERSION
287
303
  res[1]['token'].should == token
288
304
  res[2]['source'].should == @s.name
289
305
  res[3]['count'].should == 1
@@ -293,23 +309,24 @@ describe "ClientSync" do
293
309
  it "should handle search" do
294
310
  params = {:search => {'name' => 'iPhone'}}
295
311
  set_state('test_db_storage' => @data)
296
- res = @cs.search(params)
312
+ @cs.engine.params = params
313
+ res = @cs.run
297
314
  token = @c.get_value(:search_token)
298
- res.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
315
+ res.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>token},
299
316
  {'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
300
- verify_result(@c.docname(:search) => {'1'=>@product1},
301
- @c.docname(:search_errors) => {})
317
+ verify_doc_result(@c, {:search => {'1'=>@product1},
318
+ :search_errors => {}})
302
319
  end
303
320
 
304
321
  it "should handle search with no params" do
305
322
  @cs.p_size = @data.size
306
323
  set_state('test_db_storage' => @data)
307
- res = @cs.search(nil)
324
+ res = @cs.run
308
325
  token = @c.get_value(:search_token)
309
- res.should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
326
+ res.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>token},
310
327
  {'source'=>@s.name},{'count'=>@data.size},{'insert'=>@data}]
311
- verify_result(@c.docname(:search) => @data,
312
- @c.docname(:search_errors) => {})
328
+ verify_doc_result(@c, {:search => @data,
329
+ :search_errors => {}})
313
330
  end
314
331
 
315
332
  it "should handle search with more than one page" do
@@ -319,188 +336,107 @@ describe "ClientSync" do
319
336
  @data['4'] = product4
320
337
  set_state('test_db_storage' => @data)
321
338
  inserts = search_and_verify_res(params)
322
- verify_result(@c.docname(:search) => {'1'=>@product1,'4'=>product4},
323
- @c.docname(:cd_size) => '1',
324
- @s.docname(:md_size) => '1',
325
- @c.docname(:cd) => @c.get_data(:search_page),
326
- @s.docname(:md) => @c.get_data(:search_page),
327
- @c.docname(:search_errors) => {})
328
-
339
+ verify_doc_result(@c, {:search => {'1'=>@product1,'4'=>product4},
340
+ :cd_size => '1',
341
+ :cd => @c.get_data(:search_page),
342
+ :search_errors => {}})
343
+ verify_doc_result(@s, {:md_size => '1',
344
+ :md => @c.get_data(:search_page)})
345
+
329
346
  # ack the token
330
347
  params[:token] = @c.get_value(:search_token)
331
348
  new_inserts = search_and_verify_res(params)
332
349
  inserts.merge!(new_inserts)
333
- verify_result(@c.docname(:search) => {'1'=>@product1,'4'=>product4},
334
- @c.docname(:cd) => inserts,
335
- @s.docname(:md) => inserts,
336
- @c.docname(:search_errors) => {})
350
+ verify_doc_result(@c, {:search => {'1'=>@product1,'4'=>product4},
351
+ :cd => inserts,
352
+ :search_errors => {}})
353
+ verify_doc_result(@s, :md => inserts)
337
354
  @c.get_data(:search_page).size.should == 1
338
355
 
339
356
  # ack the last token
340
357
  params[:token] = @c.get_value(:search_token)
341
- @cs.search(params).should == []
342
- verify_result(@c.docname(:search) => {},
343
- @c.docname(:cd) => inserts,
344
- @s.docname(:md) => inserts,
345
- @c.docname(:search_errors) => {},
346
- @c.docname(:search_page) => {},
347
- @cs.client.docname(:search_token) => nil)
358
+ @cs.params = params
359
+ @cs.run.should == []
360
+ verify_doc_result(@c, {:search => {},
361
+ :cd => inserts,
362
+ :search_errors => {},
363
+ :search_page => {},
364
+ :search_token => nil})
365
+ verify_doc_result(@s, :md => inserts)
348
366
  end
349
367
 
350
368
  it "should handle search with nil result" do
351
369
  params = {:search => {'name' => 'foo'}}
352
370
  set_state('test_db_storage' => @data)
353
- @cs.search(params).should == []
354
- verify_result(@c.docname(:search) => {},
355
- @c.docname(:search_errors) => {})
371
+ @cs.engine.params = params
372
+ @cs.run.should == []
373
+ verify_doc_result(@c, {:search => {},
374
+ :search_errors => {}})
356
375
  end
357
376
 
358
377
  it "should resend search by search_token" do
359
378
  @source = @s
360
- set_state({@c.docname(:search_page) => {'1'=>@product1}})
361
- token = compute_token @cs.client.docname(:search_token)
362
- @cs.search({:resend => true,:token => token}).should == [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},{'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
363
- verify_result(@c.docname(:search_page) => {'1'=>@product1},
364
- @c.docname(:search_errors) => {},
365
- @cs.client.docname(:search_token) => token)
379
+ set_doc_state(@c, :search_page => {'1'=>@product1})
380
+ token = @cs.client.compute_token(:search_token)
381
+ @cs.params = {:resend => true,:token => token}
382
+ @cs.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'token'=>token},{'source'=>@s.name},{'count'=>1},{'insert'=>{'1'=>@product1}}]
383
+ verify_doc_result(@c, {:search_page => {'1'=>@product1},
384
+ :search_errors => {},
385
+ :search_token => token})
366
386
  end
367
387
 
368
388
  it "should handle search ack" do
369
- @source = @s
370
- set_state({@c.docname(:search) => {'1'=>@product1}})
371
- set_state({@c.docname(:cd) => {'1'=>@product1}})
372
- token = compute_token @cs.client.docname(:search_token)
373
- @cs.search({:token => token}).should == []
374
- verify_result(@c.docname(:search) => {},
375
- @c.docname(:search_errors) => {},
376
- @cs.client.docname(:search_token) => nil)
389
+ set_doc_state(@c, {:search => {'1'=>@product1}})
390
+ set_doc_state(@c, {:cd => {'1'=>@product1}})
391
+ token = @cs.client.compute_token(:search_token)
392
+ @cs.params = {:token => token}
393
+ @cs.run.should == []
394
+ verify_doc_result(@c, {:search => {},
395
+ :search_errors => {},
396
+ :search_token => nil})
377
397
  end
378
398
 
379
399
  it "should return error on invalid ack token" do
380
- set_state({@c.docname(:search_page) => {'1'=>@product1}})
381
- set_state({@c.docname(:search_token) => 'validtoken'})
382
- @cs.search(
383
- {:token => 'abc',
384
- :search => {'name' => 'iPhone'}}
385
- ).should == [{'version'=>ClientSync::SYNC_VERSION},{'source'=>@s.name},{'search-error'=>{'search-error'=>
400
+ set_doc_state(@c, {:search_page => {'1'=>@product1}})
401
+ set_doc_state(@c, :search_token => 'validtoken')
402
+ params = {:token => 'abc',
403
+ :search => {'name' => 'iPhone'}}
404
+ @cs.params = params
405
+ @cs.engine.params = params
406
+ @cs.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'source'=>@s.name},{'search-error'=>{'search-error'=>
386
407
  {'message'=>"Search error - invalid token"}}}]
387
- verify_result(@c.docname(:search) => {},
388
- @c.docname(:search_errors) => {},
389
- @cs.client.docname(:search_token) => nil)
390
- end
391
-
392
- it "should handle search all" do
393
- sources = [{'name'=>'SampleAdapter'}]
394
- set_state('test_db_storage' => @data)
395
- res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
396
- token = Store.get_value(@cs.client.docname(:search_token))
397
- res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
398
- {'source'=>sources[0]['name']},{'count'=>1},{'insert'=>{'1'=>@product1}}]]
399
- verify_result(@c.docname(:search) => {'1'=>@product1},
400
- @c.docname(:search_errors) => {})
401
- end
402
-
403
- it "should handle search all for pass through" do
404
- sources = [{'name'=>'SampleAdapter'}]
405
- set_state('test_db_storage' => @data)
406
- @s.pass_through = 'true'
407
- res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
408
- token = Store.get_value(@cs.client.docname(:search_token))
409
- res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
410
- {'source'=>sources[0]['name']},{'count'=>1},{'insert'=>{'1'=>@product1}}]]
411
- verify_result(@c.docname(:search) => {},
412
- @c.docname(:search_errors) => {})
413
- end
414
-
415
- it "should handle search all error" do
416
- sources = [{'name'=>'SampleAdapter'}]
417
- msg = "Error during search"
418
- error = set_test_data('test_db_storage',@data,msg,'search error')
419
- res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
420
- token = Store.get_value(@cs.client.docname(:search_token))
421
- res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'source'=>sources[0]['name']},{'search-error'=>{'search-error'=>{'message'=>msg}}}]]
422
- verify_result(@c.docname(:search) => {})
408
+ verify_doc_result(@c, {:search => {},
409
+ :search_errors => {},
410
+ :search_token => nil})
423
411
  end
424
412
 
425
- it "should handle search all login error" do
413
+ it "should handle search login error" do
426
414
  @u.login = nil
427
- sources = [{'name'=>'SampleAdapter'}]
428
415
  msg = "Error logging in"
429
416
  error = set_test_data('test_db_storage',@data,msg,'search error')
430
- ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}}).should == [
431
- [{'version'=>ClientSync::SYNC_VERSION},{'source'=>sources[0]['name']},
432
- {'search-error'=>{'login-error'=>{'message'=>msg}}}]]
433
- verify_result(@c.docname(:search) => {},
434
- @c.docname(:search_token) => nil)
417
+ @cs.engine.params = {:search => {'name' => 'iPhone'}}
418
+ @cs.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{'source'=>@s.name},
419
+ {'search-error'=>{'login-error'=>{'message'=>msg}}}]
420
+ verify_doc_result(@c, {:search => {},
421
+ :search_token => nil})
435
422
  end
436
-
437
- it "should handle multiple source search all" do
438
- set_test_data('test_db_storage',@data)
439
- sources = [{'name'=>'SimpleAdapter'},{'name'=>'SampleAdapter'}]
440
- res = ClientSync.search_all(@c,{:sources => sources,:search => {'name' => 'iPhone'}})
441
- @c.source_name = 'SampleAdapter'
442
- token = Store.get_value(@c.docname(:search_token))
443
- res.sort.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
444
- {"source"=>"SampleAdapter"},{"count"=>1},{"insert"=>{'1'=>@product1}}],[]].sort
445
- end
446
-
447
- it "should handle search and accumulate params" do
448
- set_test_data('test_db_storage',@data)
449
- sources = [{'name'=>'SimpleAdapter'},{'name'=>'SampleAdapter'}]
450
- res = ClientSync.search_all(@c,{:sources => sources,:search => {'search'=>'bar'}})
451
- @c.source_name = 'SimpleAdapter'
452
- token = Store.get_value(@c.docname(:search_token))
453
- @c.source_name = 'SampleAdapter'
454
- token1 = Store.get_value(@c.docname(:search_token))
455
- res.should == [[{'version'=>ClientSync::SYNC_VERSION},{'token'=>token},
456
- {"source"=>"SimpleAdapter"},{"count"=>1},{"insert"=>{'obj'=>{'foo'=>'bar'}}}],
457
- [{'version'=>ClientSync::SYNC_VERSION},{'token'=>token1},{"source"=>"SampleAdapter"},
458
- {"count"=>1}, {"insert"=>{'1'=>@product1}}]]
459
- end
460
-
461
- it "should handle search and ack of search results" do
462
- set_test_data('test_db_storage',@data)
463
- sources = [{'name'=>'SimpleAdapter'},{'name'=>'SampleAdapter'}]
464
- ClientSync.search_all(@c,{:sources => sources,:search => {'search'=>'bar'}})
465
- @c.source_name = 'SimpleAdapter'
466
- token = Store.get_value(@c.docname(:search_token))
467
- token.should_not be_nil
468
- sources[0]['token'] = token
469
- Store.get_data(@c.docname(:search)).should == {'obj'=>{'foo'=>'bar'}}
470
- @c.source_name = 'SampleAdapter'
471
- token1 = Store.get_value(@c.docname(:search_token))
472
- token1.should_not be_nil
473
- sources[1]['token'] = token1
474
- Store.get_data(@c.docname(:search)).should == {'1'=>@product1}
475
- # do ack on multiple sources
476
- res = ClientSync.search_all(@c,{:sources => sources,:search => {'search'=>'bar'}})
477
- @c.source_name = 'SimpleAdapter'
478
- token = Store.get_value(@c.docname(:search_token))
479
- token.should be_nil
480
- Store.get_data(@c.docname(:search)).should == {}
481
- @c.source_name = 'SampleAdapter'
482
- token1 = Store.get_value(@c.docname(:search_token))
483
- token1.should be_nil
484
- Store.get_data(@c.docname(:search)).should == {}
485
- end
486
-
487
423
  end
488
424
 
489
425
  describe "page methods" do
490
426
  it "should return diffs between master documents and client documents limited by page size" do
491
- Store.put_data(@s.docname(:md),@data).should == true
492
- Store.get_data(@s.docname(:md)).should == @data
493
- Store.put_value(@s.docname(:md_size),@data.size)
427
+ @s.put_data(:md,@data).should == true
428
+ @s.get_data(:md).should == @data
429
+ @s.put_value(:md_size,@data.size)
494
430
 
495
- total_count, res = @cs.compute_page
431
+ total_count, res = @sync_handler.compute_page
496
432
  total_count.to_i.should == 3
497
433
  res.each do |key, value|
498
434
  @data.has_key?(key).should == true
499
435
  @data[key].should == value
500
436
  end
501
437
 
502
- Store.get_value(@cs.client.docname(:cd_size)).to_i.should == 0
503
- Store.get_data(@cs.client.docname(:page)).each do |key, value|
438
+ @sync_handler.client.get_value(:cd_size).to_i.should == 0
439
+ @sync_handler.client.get_data(:page).each do |key, value|
504
440
  @data.has_key?(key).should == true
505
441
  @data[key].should == value
506
442
  end
@@ -508,41 +444,43 @@ describe "ClientSync" do
508
444
 
509
445
  it "appends diff to the client document" do
510
446
  @cd = {'3'=>@product3}
511
- Store.put_data(@c.docname(:cd),@cd)
512
- Store.get_data(@c.docname(:cd)).should == @cd
447
+ @c.put_data(:cd,@cd)
448
+ @c.get_data(:cd).should == @cd
513
449
 
514
450
  @page = {'1'=>@product1,'2'=>@product2}
515
451
  @expected = {'1'=>@product1,'2'=>@product2,'3'=>@product3}
516
452
 
517
- Store.put_data(@c.docname(:cd),@page,true).should == true
518
- Store.get_data(@c.docname(:cd)).should == @expected
453
+ @c.put_data(:cd,@page,true).should == true
454
+ @c.get_data(:cd).should == @expected
519
455
  end
520
456
 
521
457
  it "should delete objects from the client document and return deleted objects in the page" do
522
- Store.put_data(@s.docname(:md),@data).should == true
523
- Store.get_data(@s.docname(:md)).should == @data
458
+ @s.put_data(:md,@data).should == true
459
+ @s.get_data(:md).should == @data
524
460
 
525
461
  @cd = {'1'=>@product1,'2'=>@product2,'3'=>@product3,'4'=>@product4}
526
- Store.put_data(@cs.client.docname(:cd),@cd)
527
- Store.get_data(@cs.client.docname(:cd)).should == @cd
462
+ @sync_handler.client.put_data(:cd,@cd)
463
+ @sync_handler.client.get_data(:cd).should == @cd
528
464
 
529
465
  @expected = {'4'=>@product4}
530
- @cs.send_new_page
531
- Store.get_data(@cs.client.docname(:delete_page)).should == @expected
532
- Store.get_data(@cs.client.docname(:cd)).should == @data
466
+ @sync_handler.send_new_page
467
+ @sync_handler.client.get_data(:delete_page).should == @expected
468
+ @sync_handler.client.get_data(:cd).should == @data
533
469
  end
534
470
 
535
471
  it "should resend page if page exists and no token provided" do
536
472
  expected = {'1'=>@product1}
537
473
  set_test_data('test_db_storage',{'1'=>@product1,'2'=>@product2,'4'=>@product4})
538
474
  params = {'name' => 'iPhone'}
539
- @cs.send_cud(nil,params)
475
+ @sync_handler.engine.params = {:query => params}
476
+ @sync_handler.run
540
477
  token = @c.get_value(:page_token)
541
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
478
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>token},
542
479
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},{'insert' => expected}]
543
- @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
480
+ @sync_handler.params[:token] = token
481
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""},
544
482
  {"count"=>0}, {"progress_count"=>0}, {"total_count"=>1}, {}]
545
- Store.get_data(@cs.client.docname(:page)).should == {}
483
+ @sync_handler.client.get_data(:page).should == {}
546
484
  @c.get_value(:page_token).should be_nil
547
485
  end
548
486
 
@@ -551,9 +489,9 @@ describe "ClientSync" do
551
489
  set_state('test_db_storage' => expected)
552
490
  metadata = "{\"foo\":\"bar\"}"
553
491
  mock_metadata_method([SampleAdapter]) do
554
- result = @cs.send_cud
492
+ result = @sync_handler.run
555
493
  token = @c.get_value(:page_token)
556
- result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
494
+ result.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>token},
557
495
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},
558
496
  {'metadata'=>metadata,'insert'=>expected}]
559
497
  @c.get_value(:metadata_page).should == metadata
@@ -564,9 +502,9 @@ describe "ClientSync" do
564
502
  expected = {'1'=>@product1}
565
503
  set_state('test_db_storage' => expected)
566
504
  mock_metadata_method([SampleAdapter]) do
567
- result = @cs.send_cud
505
+ result = @sync_handler.run
568
506
  token = @c.get_value(:page_token)
569
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
507
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>token},
570
508
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},
571
509
  {'metadata'=>"{\"foo\":\"bar\"}",'insert'=>expected}]
572
510
  end
@@ -576,9 +514,10 @@ describe "ClientSync" do
576
514
  expected = {'1'=>@product1}
577
515
  set_state('test_db_storage' => expected)
578
516
  mock_metadata_method([SampleAdapter]) do
579
- result = @cs.send_cud
517
+ result = @sync_handler.run
580
518
  token = @c.get_value(:page_token)
581
- @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
519
+ @sync_handler.params[:token] = token
520
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""},
582
521
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>1},{}]
583
522
  @c.get_value(:metadata_page).should be_nil
584
523
  end
@@ -588,9 +527,9 @@ describe "ClientSync" do
588
527
  expected = {'1'=>@product1}
589
528
  set_state('test_db_storage' => expected)
590
529
  mock_schema_method([SampleAdapter]) do
591
- result = @cs.send_cud
530
+ result = @sync_handler.run
592
531
  token = @c.get_value(:page_token)
593
- result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
532
+ result.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>token},
594
533
  {"count"=>1}, {"progress_count"=>0},{"total_count"=>1},{'insert'=>expected}]
595
534
  @c.get_value(:schema_sha1).should == sha1
596
535
  end
@@ -599,9 +538,9 @@ describe "ClientSync" do
599
538
  it "should send schema-changed instead of page" do
600
539
  mock_schema_method([SampleAdapter]) do
601
540
  @c.put_value(:schema_sha1,'foo')
602
- result = @cs.send_cud
541
+ result = @sync_handler.run
603
542
  token = @c.get_value(:page_token)
604
- result.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
543
+ result.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>token},
605
544
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{'schema-changed'=>'true'}]
606
545
  @c.get_value(:schema_page).should == sha1
607
546
  @c.get_value(:schema_sha1).should == sha1
@@ -611,9 +550,9 @@ describe "ClientSync" do
611
550
  it "should re-send schema-changed if no token sent" do
612
551
  mock_schema_method([SampleAdapter]) do
613
552
  @c.put_value(:schema_sha1,'foo')
614
- result = @cs.send_cud
553
+ result = @sync_handler.run
615
554
  token = @c.get_value(:page_token)
616
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>token},
555
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>token},
617
556
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{'schema-changed'=>'true'}]
618
557
  @c.get_value(:schema_page).should == sha1
619
558
  @c.get_value(:schema_sha1).should == sha1
@@ -623,9 +562,10 @@ describe "ClientSync" do
623
562
  it "should ack schema-changed with token" do
624
563
  mock_schema_method([SampleAdapter]) do
625
564
  @c.put_value(:schema_sha1,'foo')
626
- result = @cs.send_cud
565
+ result = @sync_handler.run
627
566
  token = @c.get_value(:page_token)
628
- @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
567
+ @sync_handler.params[:token] = token
568
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""},
629
569
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{}]
630
570
  @c.get_value(:schema_page).should be_nil
631
571
  @c.get_value(:schema_sha1).should == sha1
@@ -642,9 +582,10 @@ describe "ClientSync" do
642
582
  data.refresh_time = Time.now.to_i + 600
643
583
  mock_schema_method([SampleAdapter]) do
644
584
  @c.put_value(:schema_sha1,'foo')
645
- result = @cs.send_cud
585
+ result = @sync_handler.run
646
586
  token = @c.get_value(:page_token)
647
- @cs.send_cud(token).should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""},
587
+ @sync_handler.params[:token] = token
588
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""},
648
589
  {"count"=>0}, {"progress_count"=>0},{"total_count"=>0},{}]
649
590
  @c.get_value(:schema_page).should be_nil
650
591
  @c.get_value(:schema_sha1).should == sha1
@@ -653,123 +594,20 @@ describe "ClientSync" do
653
594
  end
654
595
  end
655
596
  end
656
-
657
- describe "bulk data" do
658
- after(:each) do
659
- delete_data_directory
660
- end
661
-
662
- it "should create bulk data job user parition if none exists" do
663
- ClientSync.bulk_data(:user,@c).should == {:result => :wait}
664
- Resque.peek(:bulk_data).should == {"args"=>
665
- [{"data_name"=>File.join(@a_fields[:name],@u_fields[:login],@u_fields[:login])}],
666
- "class"=>"Rhoconnect::BulkDataJob"}
667
- end
668
-
669
- it "should create bulk data job app partition if none exists and no partition sources" do
670
- @s2.delete
671
- @a.sources.delete("SimpleAdapter")
672
- @a.sources.delete("OtherAdapter")
673
- ClientSync.bulk_data(:app,@c).should == {:result => :nop}
674
- Resque.peek(:bulk_data).should == nil
675
- end
676
-
677
- it "should create bulk data job app partition with partition sources" do
678
- @s.partition = :app
679
- ClientSync.bulk_data(:app,@c).should == {:result => :wait}
680
- Resque.peek(:bulk_data).should == {"args"=>
681
- [{"data_name"=>File.join(@a_fields[:name],@a_fields[:name])}],
682
- "class"=>"Rhoconnect::BulkDataJob"}
683
- end
684
-
685
- it "should return bulk data url for completed bulk data user partition" do
686
- set_state('test_db_storage' => @data)
687
- ClientSync.bulk_data(:user,@c)
688
- do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
689
- ClientSync.bulk_data(:user,@c).should == {:result => :url,
690
- :url => BulkData.load(bulk_data_docname(@a.id,@u.id)).url}
691
- verify_result(
692
- "client:#{@a_fields[:name]}:#{@u_fields[:login]}:#{@c.id}:#{@s_fields[:name]}:cd" => @data,
693
- "source:#{@a_fields[:name]}:#{@u_fields[:login]}:#{@s_fields[:name]}:md" => @data,
694
- "source:#{@a_fields[:name]}:#{@u_fields[:login]}:#{@s_fields[:name]}:md_copy" => @data)
695
- end
696
-
697
- it "should return empty bulk data url if there are errors in query" do
698
- ClientSync.bulk_data(:user,@c)
699
- do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
700
- errordoc = @s.docname(:errors) # source SampleAdapter
701
- operation = 'query'
702
- Store.lock(errordoc) do
703
- Store.put_data(errordoc,{"#{operation}-error"=>{'message'=>"Some exception message"}}, true)
704
- end
705
- ClientSync.bulk_data(:user,@c).should == {:result => :url, :url => ''}
706
- end
707
-
708
- it "should escape bulk data url" do
709
- name = 'a b'
710
- data = BulkData.create(:name => bulk_data_docname(@a.id,name),
711
- :state => :inprogress,
712
- :app_id => @a.id,
713
- :user_id => name,
714
- :sources => [@s_fields[:name]])
715
- do_bulk_data_job("data_name" => bulk_data_docname(@a.id,name))
716
- data = BulkData.load(bulk_data_docname(@a.id,name))
717
- data.url.should match /a%20b/
718
- data.delete
719
- end
720
-
721
- it "should return bulk data url for completed bulk data app partition" do
722
- set_state('test_db_storage' => @data)
723
- @s.partition = :app
724
- ClientSync.bulk_data(:app,@c)
725
- do_bulk_data_job("data_name" => bulk_data_docname(@a.id,"*"))
726
- ClientSync.bulk_data(:app,@c).should == {:result => :url,
727
- :url => BulkData.load(bulk_data_docname(@a.id,"*")).url}
728
- verify_result(
729
- "client:#{@a_fields[:name]}:#{@u_fields[:login]}:#{@c.id}:#{@s_fields[:name]}:cd" => @data,
730
- "source:#{@a_fields[:name]}:__shared__:#{@s_fields[:name]}:md" => @data,
731
- "source:#{@a_fields[:name]}:__shared__:#{@s_fields[:name]}:md_copy" => @data)
732
- end
733
-
734
- it "should return bulk data url for completed bulk data with bulk_sync_only source" do
735
- set_state('test_db_storage' => @data)
736
- @s.sync_type = :bulk_sync_only
737
- ClientSync.bulk_data(:user,@c)
738
- do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
739
- ClientSync.bulk_data(:user,@c).should == {:result => :url,
740
- :url => BulkData.load(bulk_data_docname(@a.id,@u.id)).url}
741
- verify_result(
742
- "client:#{@a_fields[:name]}:#{@u_fields[:login]}:#{@c.id}:#{@s_fields[:name]}:cd" => {},
743
- "source:#{@a_fields[:name]}:#{@u_fields[:login]}:#{@s_fields[:name]}:md" => @data,
744
- "source:#{@a_fields[:name]}:#{@u_fields[:login]}:#{@s_fields[:name]}:md_copy" => {})
745
- end
746
-
747
- it "should create bulk data job if no file exists" do
748
- set_state('test_db_storage' => @data)
749
- Rhoconnect.blackberry_bulk_sync = true
750
- ClientSync.bulk_data(:user,@c)
751
- do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
752
- data = BulkData.load(bulk_data_docname(@a.id,@u.id))
753
- ClientSync.bulk_data(:user,@c).should == {:result => :url, :url => data.url}
754
- File.delete(data.dbfile)
755
- ClientSync.bulk_data(:user,@c).should == {:result => :wait}
756
- Resque.peek(:bulk_data).should == {"args"=>
757
- [{"data_name"=>bulk_data_docname(@a.id,@u.id)}], "class"=>"Rhoconnect::BulkDataJob"}
758
- end
759
- end
760
597
  end
761
598
  def receive_and_send_cud(operation)
762
599
  msg = "Error #{operation} record"
763
600
  op_data = {operation=>{ERROR=>{'an_attribute'=>msg,'name'=>'wrongname'}}}
764
- @cs.receive_cud(op_data)
601
+ @cud_handler.params = op_data
602
+ @cud_handler.run
765
603
  if operation == 'update'
766
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>1},
604
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>1},
767
605
  {
768
606
  "update-rollback"=>{"0_broken_object_id"=>{"price"=>"99.99"}},
769
607
  "#{operation}-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>op_data[operation][ERROR]}
770
608
  }]
771
609
  else
772
- @cs.send_cud.should == [{'version'=>ClientSync::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
610
+ @sync_handler.run.should == [{'version'=>Rhoconnect::SYNC_VERSION},{"token"=>""}, {"count"=>0}, {"progress_count"=>0}, {"total_count"=>0},
773
611
  {"#{operation}-error"=>{"#{ERROR}-error"=>{"message"=>msg},ERROR=>op_data[operation][ERROR]}}]
774
612
  end
775
613
  end