rhoconnect 3.4.5 → 4.0.0.beta.10

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