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
@@ -0,0 +1,89 @@
1
+ require 'rack/test'
2
+ require File.join(File.dirname(__FILE__),'..','spec_helper')
3
+ require File.join(File.dirname(__FILE__),'..','..','lib','rhoconnect','server.rb')
4
+
5
+ describe "Rhoconnect::Controller::JsBase" do
6
+ include Rack::Test::Methods
7
+ include Rhoconnect
8
+
9
+ it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
10
+ before(:each) do
11
+ Rhoconnect::Server.set :environment, :test
12
+ Rhoconnect::Server.set :secret, "secure!"
13
+ Rhoconnect.use_node = true
14
+ Rhoconnect.bootstrap(get_testapp_path)
15
+ do_post "/rc/#{Rhoconnect::API_VERSION}/app/login", "login" => @u.login, "password" => 'testpass'
16
+ end
17
+
18
+ def app
19
+ @app ||= Rack::URLMap.new Rhoconnect.url_map
20
+ end
21
+
22
+ after(:each) do
23
+ Rhoconnect::Node.kill_process
24
+ end
25
+
26
+ it "should get / of js controller with route overridden" do
27
+ get '/app/v1/JsSample', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
28
+ last_response.should be_ok
29
+ body = JSON.parse(last_response.body)
30
+ body[2]['count'].should == 1
31
+ body.last['insert'].should == {'1' => {'name' => 'iPhone'}}
32
+ end
33
+
34
+ it "should get /custom_route of js controller" do
35
+ get '/app/v1/JsSample/custom_route', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
36
+ last_response.body.should == 'testuser'
37
+ end
38
+
39
+ it "should get /source from custom route" do
40
+ get '/app/v1/JsSample/custom_route2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
41
+ last_response.body.should == 'JsSample'
42
+ end
43
+
44
+ it "should get stash_result from js model" do
45
+ pending "stash_result not supported yet"
46
+ get '/app/v1/JsSample/custom_route3',{}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
47
+ res = JSON.parse(last_response.body)
48
+ res[2]["count"].should == 1
49
+ end
50
+
51
+ it "should register sync route" do
52
+ get '/app/v1/Sample2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
53
+ res = JSON.parse(last_response.body)
54
+ res[2]["count"].should == 1
55
+ end
56
+
57
+ it "should post to js controller" do
58
+ hsh = {'1'=>{'name'=>'testname','price'=>'$199'}}
59
+ post '/app/v1/JsSample',hsh, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
60
+ last_response.should be_ok
61
+ end
62
+
63
+ it "should put to js controller" do
64
+ put '/app/v1/JsSample/2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c.id}
65
+ last_response.body.should == ''
66
+ end
67
+
68
+ it "should delete to js controller" do
69
+ @c1 = Client.create({:user_id => @u.id,:app_id => @a.id},{:source_name => 'JsSample'})
70
+ set_doc_state(@c1, :cd => @data)
71
+ delete '/app/v1/JsSample/2', {}, {Rhoconnect::CLIENT_ID_HEADER => @c1.id}
72
+ last_response.should be_ok
73
+ end
74
+
75
+ it "should register deprecated_route"
76
+
77
+ it "should call js model name explicitly" do
78
+ js = JsSample.new("JsSample")
79
+ res = js.login
80
+ res.should == "success"
81
+ end
82
+
83
+ it "should print warning if model function not found" do
84
+ js = JsSample.new("JsSample")
85
+ res = js.foo
86
+ res.should == "foo method not defined for JsSample"
87
+ end
88
+ end
89
+ end
data/spec/doc/doc_spec.rb CHANGED
@@ -29,7 +29,7 @@ describe "Protocol" do
29
29
 
30
30
  before(:each) do
31
31
  Store.create
32
- Store.db.flushdb
32
+ Store.flush_all
33
33
  end
34
34
 
35
35
  # it_should_behave_like "DBObjectsHelper"
@@ -207,25 +207,25 @@ eol
207
207
  :source_name => @s.name}
208
208
  do_post "/#{@a.name}", params
209
209
  get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,
210
- :version => ClientSync::VERSION
210
+ :version => Rhoconnect::SYNC_VERSION
211
211
  @title,@description = 'create-with-link', 'send link for created object'
212
212
  end
213
213
 
214
214
  it "server send source query error to client" do
215
215
  set_test_data('test_db_storage',{},"Error during query",'query error')
216
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
216
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
217
217
  @title,@description = 'query-error', 'send query error'
218
218
  end
219
219
 
220
220
  it "server send source login error to client" do
221
221
  @u.login = nil
222
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
222
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
223
223
  @title,@description = 'login-error', 'send login error'
224
224
  end
225
225
 
226
226
  it "server send source logoff error to client" do
227
227
  set_test_data('test_db_storage',{},"Error logging off",'logoff error')
228
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
228
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
229
229
  @title,@description = 'logoff-error', 'send logoff error'
230
230
  end
231
231
 
@@ -233,14 +233,14 @@ eol
233
233
  it "client #{operation} object(s) with error" do
234
234
  if operation == 'update'
235
235
  broken_object = { ERROR => { 'price' => '99.99' } }
236
- set_state(@c.docname(:cd) => broken_object)
236
+ set_doc_state(@c, :cd => broken_object)
237
237
  set_test_data('test_db_storage',broken_object)
238
238
  end
239
239
  params = {operation=>{ERROR=>{'an_attribute'=>"error #{operation}",'name'=>'wrongname'}},
240
240
  :client_id => @c.id,
241
241
  :source_name => @s.name}
242
242
  do_post "/#{@a.name}", params
243
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
243
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
244
244
  @title,@description = "#{operation}-error", "send #{operation} error"
245
245
  end
246
246
  end
@@ -249,7 +249,7 @@ eol
249
249
  cs = ClientSync.new(@s,@c,1)
250
250
  data = {'1'=>product1,'2'=>product2}
251
251
  set_test_data('test_db_storage',data)
252
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
252
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
253
253
  @title,@description = 'insert objects', 'send insert objects'
254
254
  end
255
255
 
@@ -257,7 +257,7 @@ eol
257
257
  mock_metadata_method([SampleAdapter]) do
258
258
  cs = ClientSync.new(@s,@c,1)
259
259
  set_test_data('test_db_storage',products)
260
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
260
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
261
261
  end
262
262
  @title,@description = 'metadata', 'send metadata'
263
263
  end
@@ -266,12 +266,12 @@ eol
266
266
  cs = ClientSync.new(@s,@c,1)
267
267
  data = {'1'=>product1,'2'=>product2}
268
268
  set_test_data('test_db_storage',data)
269
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
269
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
270
270
  token = Store.get_value(@c.docname(:page_token))
271
- Store.flash_data('test_db_storage')
271
+ Store.flush_data('test_db_storage')
272
272
  @s.read_state.refresh_time = Time.now.to_i
273
273
  get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:token => token,
274
- :version => ClientSync::VERSION
274
+ :version => Rhoconnect::SYNC_VERSION
275
275
  @title,@description = 'delete objects', 'send delete objects'
276
276
  end
277
277
 
@@ -279,12 +279,12 @@ eol
279
279
  cs = ClientSync.new(@s,@c,1)
280
280
  data = {'1'=>product1,'2'=>product2}
281
281
  set_test_data('test_db_storage',data)
282
- get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => ClientSync::VERSION
282
+ get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:version => Rhoconnect::SYNC_VERSION
283
283
  token = Store.get_value(@c.docname(:page_token))
284
284
  set_test_data('test_db_storage',{'1'=>product1,'3'=>product3})
285
285
  @s.read_state.refresh_time = Time.now.to_i
286
286
  get "/#{@a.name}",:client_id => @c.id,:source_name => @s.name,:token => token,
287
- :version => ClientSync::VERSION
287
+ :version => Rhoconnect::SYNC_VERSION
288
288
  @title,@description = 'insert-delete objects', 'send insert and delete objects'
289
289
  end
290
290
 
@@ -292,7 +292,7 @@ eol
292
292
  sources = [{:name=>'SampleAdapter'}]
293
293
  Store.put_data('test_db_storage',products)
294
294
  params = {:client_id => @c.id,:sources => sources,:search => {'name' => 'iPhone'},
295
- :version => ClientSync::VERSION}
295
+ :version => Rhoconnect::SYNC_VERSION}
296
296
  get "/#{@a.name}/search",params
297
297
  @title,@description = 'search result', 'send search results'
298
298
  end
@@ -302,7 +302,7 @@ eol
302
302
  msg = "Error during search"
303
303
  error = set_test_data('test_db_storage',products,msg,'search error')
304
304
  params = {:client_id => @c.id,:sources => sources,:search => {'name' => 'iPhone'},
305
- :version => ClientSync::VERSION}
305
+ :version => Rhoconnect::SYNC_VERSION}
306
306
  get "/#{@a.name}/search",params
307
307
  @title,@description = 'search error', 'send search error'
308
308
  end
@@ -311,7 +311,7 @@ eol
311
311
  Store.put_data('test_db_storage',products)
312
312
  sources = [{:name=>'SimpleAdapter'},{:name=>'SampleAdapter'}]
313
313
  params = {:client_id => @c.id,:sources => sources,:search => {'search' => 'bar'},
314
- :version => ClientSync::VERSION}
314
+ :version => Rhoconnect::SYNC_VERSION}
315
315
  get "/#{@a.name}/search",params
316
316
  @title,@description = 'multi source search', 'send multiple sources in search results'
317
317
  end
@@ -328,7 +328,7 @@ eol
328
328
  token = Store.get_value(@c.docname(:search_token))
329
329
  sources[1]['token'] = token
330
330
  params = {:client_id => @c.id,:sources => sources,
331
- :version => ClientSync::VERSION}
331
+ :version => Rhoconnect::SYNC_VERSION}
332
332
  get "/#{@a.name}/search",params
333
333
  @title,@description = 'multi source search ack', 'acknowledge search result on multiple sources'
334
334
  end
@@ -3,50 +3,66 @@ require File.join(File.dirname(__FILE__),'spec_helper')
3
3
  describe "Document" do
4
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
5
5
  before(:each) do
6
+ @valid_docs = [:foo1, :foo, :key, :key1, :key2]
7
+ Client.define_valid_doctypes(@valid_docs)
6
8
  @s = Source.load(@s_fields[:name],@s_params)
7
9
  end
10
+
11
+ after(:each) do
12
+ @valid_docs.each do |doctype|
13
+ Client.valid_doctypes.delete(doctype)
14
+ end
15
+ end
8
16
 
9
17
  it "should generate client docname" do
10
18
  @c.docname(:foo).should == "client:#{@a.id}:#{@u.id}:#{@c.id}:#{@s_fields[:name]}:foo"
11
19
  end
12
20
 
21
+ it "should generate InvalidDocumentException for invalid client doctype" do
22
+ lambda { @c.put_data(:foo_invalid,{'1'=>@product1}) }.should raise_error(InvalidDocumentException, "Invalid document type foo_invalid for Rhoconnect::Client")
23
+ store_index = @c.store_index(:foo_invalid)
24
+ Store.get_store(store_index).db.keys(@c.docname('*')).should == []
25
+ end
26
+
13
27
  it "should generate source docname" do
14
28
  @s.docname(:foo).should == "source:#{@a.id}:#{@u.id}:#{@s_fields[:name]}:foo"
15
29
  end
16
30
 
17
- it "should flash_data for docname" do
31
+ it "should flush_data for docname" do
18
32
  @c.put_data(:foo1,{'1'=>@product1})
19
33
  docname = @c.docname(:foo1)
20
34
  bucket_index = get_sha1('1')[0..1]
21
- Store.db.keys(@c.docname('*')).sort.should == ["#{docname}:#{bucket_index}", "#{docname}:indices"].sort
22
- @c.flash_data('*')
23
- Store.db.keys(@c.docname(:foo)).should == []
35
+ store_index = @c.store_index(:foo1)
36
+ Store.get_store(store_index).db.keys(@c.docname('*')).sort.should == ["#{docname}:#{bucket_index}", "#{docname}:indices"].sort
37
+ @c.flush_all_documents
38
+ Store.get_store(store_index).db.keys(@c.docname('*')).should == []
24
39
  end
25
40
 
26
- it "should flash_data for arrays" do
41
+ it "should flush_data for arrays" do
27
42
  @c.put_list(:foo1,['1', '2', '3'])
28
- Store.db.keys(@c.docname('*')).should == [@c.docname(:foo1)]
29
- @c.flash_data('*')
30
- Store.db.keys(@c.docname(:foo)).should == []
43
+ @c.exists?(:foo1).should == true
44
+ @c.flush_all_documents
45
+ @c.exists?(:foo1).should == false
31
46
  end
32
47
 
33
48
  it "should get_data for arrays" do
34
49
  @c.put_list(:foo1,['1', '2', '3'])
35
- Store.db.keys(@c.docname('*')).should == [@c.docname(:foo1)]
36
50
  @c.get_data(:foo1, Array).should == ['1', '2', '3']
51
+ JSON.parse(@c.get_db_doc(:foo1)).should == ['1', '2', '3']
37
52
  end
38
53
 
39
54
  it "should rename doc" do
40
- set_state(@c.docname(:key1) => @data)
55
+ @c.put_data(:key1, @data)
41
56
  @c.rename(:key1,:key2)
42
- verify_result(@c.docname(:key1) => {}, @c.docname(:key2) => @data)
57
+ @c.exists?(:key1).should == false
58
+ @c.get_data(:key2).should == @data
43
59
  end
44
60
 
45
61
  it "should operate with individual object" do
46
62
  key = '1'
47
63
  data = {'foo' => 'bar'}
48
- @c.put_object(:md, key, data)
49
- obj = @c.get_object(:md, key)
64
+ @c.put_object(:cd, key, data)
65
+ obj = @c.get_object(:cd, key)
50
66
  obj.should == data
51
67
  end
52
68
  end
@@ -1,38 +1,38 @@
1
1
  require File.join(File.dirname(__FILE__),'spec_helper')
2
2
 
3
- describe "DynamicAdapter" do
3
+ describe "Rhoconnect::Model::DynamicAdapterModel" do
4
4
  it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
5
5
 
6
6
  it "should return login when backend service defined" do
7
7
  stub_request(:post, "http://test.com/rhoconnect/authenticate").to_return(:body => "lucas")
8
8
  Rhoconnect.appserver = 'http://test.com'
9
- DynamicAdapter.authenticate('lucas','').should == 'lucas'
9
+ Rhoconnect::Model::DynamicAdapterModel.authenticate('lucas','').should == 'lucas'
10
10
  end
11
11
 
12
12
  it "should query dynamic adapter service" do
13
13
  data = {'1'=>@product1}
14
14
  stub_request(:post, "http://test.com/rhoconnect/query").with(:headers => {'Content-Type' => 'application/json'}).to_return(:status => 200, :body => data.to_json)
15
- da = DynamicAdapter.new(@s2,nil,'http://test.com')
15
+ da = Rhoconnect::Model::DynamicAdapterModel.new(@s2,nil,'http://test.com')
16
16
  da.query.should == data
17
17
  end
18
18
 
19
19
  it "should create new object using dynamic adapter" do
20
20
  stub_request(:post, "http://test.com/rhoconnect/create").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
21
- da = DynamicAdapter.new(@s2,nil,'http://test.com')
21
+ da = Rhoconnect::Model::DynamicAdapterModel.new(@s2,nil,'http://test.com')
22
22
  da.create(@product1).should == {:id => 5}
23
23
  end
24
24
 
25
25
  it "should update object using dynamic adapter" do
26
26
  data = {'id' => 2}
27
27
  stub_request(:post, "http://test.com/rhoconnect/update").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
28
- da = DynamicAdapter.new(@s2,nil,'http://test.com')
28
+ da = Rhoconnect::Model::DynamicAdapterModel.new(@s2,nil,'http://test.com')
29
29
  da.update(data).should == {:id => 5}
30
30
  end
31
31
 
32
32
  it "should delete object using dynamic adapter" do
33
33
  data = {'id' => 2}
34
34
  stub_request(:post, "http://test.com/rhoconnect/delete").with(:headers => {'Content-Type' => 'application/json'}).to_return(:body => {:id => 5})
35
- da = DynamicAdapter.new(@s2,nil,'http://test.com')
35
+ da = Rhoconnect::Model::DynamicAdapterModel.new(@s2,nil,'http://test.com')
36
36
  da.delete(data).should == {:id => 5}
37
37
  end
38
38
 
@@ -20,12 +20,13 @@ describe "Generator" do
20
20
  @generator = Rhoconnect::AppGenerator.new('/tmp',{},appname)
21
21
  end
22
22
 
23
- it "should create new application files" do
23
+ it "should create new ruby application files" do
24
24
  SecureRandom.should_receive(:hex).with(64).any_number_of_times
25
25
  [
26
26
  'Gemfile',
27
27
  'Rakefile',
28
- "application.rb",
28
+ "controllers/ruby/application_controller.rb",
29
+ 'spec/controllers/ruby/application_controller_spec.rb',
29
30
  'config.ru',
30
31
  'public',
31
32
  'settings/settings.yml',
@@ -55,8 +56,10 @@ describe "Generator" do
55
56
  end
56
57
 
57
58
  it "should create new source adapter and spec" do
58
- @generator.should create("/tmp/#{appname}/sources/#{source}.rb")
59
- @generator.should create("/tmp/#{appname}/spec/sources/#{source}_spec.rb")
59
+ @generator.should create("/tmp/#{appname}/models/ruby/#{source}.rb")
60
+ @generator.should create("/tmp/#{appname}/controllers/ruby/#{source}_controller.rb")
61
+ @generator.should create("/tmp/#{appname}/spec/models/ruby/#{source}_spec.rb")
62
+ @generator.should create("/tmp/#{appname}/spec/controllers/ruby/#{source}_controller_spec.rb")
60
63
  end
61
64
  end
62
65
 
@@ -27,7 +27,8 @@ describe "BulkDataJob" do
27
27
  do_bulk_data_job("data_name" => data.name)
28
28
  data = BulkData.load(docname)
29
29
  data.completed?.should == true
30
- verify_result(@s.docname(:md) => @data,@s.docname(:md_copy) => @data)
30
+ verify_doc_result(@s, {:md => @data,
31
+ :md_copy => @data})
31
32
  validate_db(data,expected).should == true
32
33
  File.exists?(data.dbfile+'.rzip').should == true
33
34
  File.exists?(data.dbfile+'.gzip').should == true
@@ -59,7 +60,8 @@ describe "BulkDataJob" do
59
60
  do_bulk_data_job("data_name" => data.name)
60
61
  data = BulkData.load(docname)
61
62
  data.completed?.should == true
62
- verify_result(@s.docname(:md) => source_existing_data,@s.docname(:md_copy) => {})
63
+ verify_doc_result(@s, {:md => source_existing_data,
64
+ :md_copy => {}})
63
65
  # skipped source should have :none in the DB - so we pass it for verification
64
66
  @s.sync_type = :none
65
67
  validate_db_file(data.dbfile,[@s_fields[:name], 'FixedSchemaAdapter'], expected).should == true
@@ -89,7 +91,8 @@ describe "BulkDataJob" do
89
91
  do_bulk_data_job("data_name" => data.name)
90
92
  data = BulkData.load(docname)
91
93
  data.completed?.should == true
92
- verify_result(@s.docname(:md) => @data,@s.docname(:md_copy) => @data)
94
+ verify_doc_result(@s, {:md => @data,
95
+ :md_copy => @data})
93
96
  validate_db(data,@s.name => @data).should == true
94
97
  File.exists?(data.dbfile+'.hsqldb.script').should == false
95
98
  File.exists?(data.dbfile+'.hsqldb.properties').should == false
@@ -108,9 +111,9 @@ describe "BulkDataJob" do
108
111
  do_bulk_data_job("data_name" => data.name)
109
112
  data = BulkData.load(docname)
110
113
  data.completed?.should == true
111
- verify_result(@s.docname(:md) => @data,
112
- @s.docname(:metadata) => {'foo'=>'bar'}.to_json,
113
- @s.docname(:md_copy) => @data)
114
+ verify_doc_result(@s, {:md => @data,
115
+ :metadata => {'foo'=>'bar'}.to_json,
116
+ :md_copy => @data})
114
117
  validate_db(data,@s.name => @data).should == true
115
118
  end
116
119
  end
@@ -128,8 +131,9 @@ describe "BulkDataJob" do
128
131
  do_bulk_data_job("data_name" => data.name)
129
132
  data = BulkData.load(docname)
130
133
  data.completed?.should == true
131
- verify_result(@s.docname(:md) => @data, @s.docname(:md_copy) => @data)
132
- JSON.parse(Store.get_value(@s.docname(:schema))).should == mock_schema
134
+ verify_doc_result(@s, {:md => @data,
135
+ :md_copy => @data})
136
+ JSON.parse(@s.get_value(:schema)).should == mock_schema
133
137
  validate_db(data,@s.name => @data).should == true
134
138
  end
135
139
  end
@@ -149,7 +153,7 @@ describe "BulkDataJob" do
149
153
  lambda {
150
154
  do_bulk_data_job("data_name" => 'broken')
151
155
  }.should raise_error(Exception)
152
- Store.db.keys('bulk_data*').should == []
156
+ Store.get_store(0).db.keys('bulk_data*').should == []
153
157
  end
154
158
 
155
159
  it "should delete bulk data if exception is raised" do
@@ -162,7 +166,7 @@ describe "BulkDataJob" do
162
166
  lambda {
163
167
  do_bulk_data_job("data_name" => data.name)
164
168
  }.should raise_error(Exception)
165
- Store.db.keys('bulk_data*').should == []
169
+ Store.get_store(0).db.keys('bulk_data*').should == []
166
170
  end
167
171
  end
168
172
  end
@@ -9,20 +9,20 @@ describe "SourceJob" do
9
9
  it "should perform process_query" do
10
10
  set_state('test_db_storage' => @data)
11
11
  SourceJob.perform('query',@s.id,@s.app_id,@s.user_id,nil)
12
- verify_result(@s.docname(:md) => @data,
13
- @s.docname(:md_size) => @data.size.to_s)
12
+ verify_doc_result(@s, {:md => @data,
13
+ :md_size => @data.size.to_s})
14
14
  end
15
15
 
16
16
  it "should perform process_cud" do
17
17
  expected = {'backend_id'=>@product1}
18
18
  @product1['link'] = 'abc'
19
- set_zstate({@s.docname(:create) => {'1'=>@product1}}, @c.id, true)
19
+ @s.push_queue(:create, @c.id, {'1'=>@product1})
20
20
  SourceJob.perform('cud',@s.id,@s.app_id,@s.user_id,nil)
21
- verify_zresult(@s.docname(:create) => [])
22
- verify_result(@s.docname(:md) => expected,
23
- @s.docname(:md_size) => expected.size.to_s,
24
- @c.docname(:cd) => expected,
25
- @c.docname(:cd_size) => expected.size.to_s)
21
+ verify_source_queue_data(@s, :create => [])
22
+ verify_doc_result(@s, {:md => expected,
23
+ :md_size => expected.size.to_s})
24
+ verify_doc_result(@c, {:cd => expected,
25
+ :cd_size => expected.size.to_s})
26
26
  end
27
27
  end
28
28
  end
data/spec/license_spec.rb CHANGED
@@ -14,9 +14,12 @@ describe "License" do
14
14
  license.issued.should == 'Fri Apr 23 17:20:13 -0700 2010'
15
15
  end
16
16
 
17
- it "should raise exception on license load error" do
17
+ it "should use generator license file when there is license load error" do
18
+ path_to_license = File.join(File.dirname(__FILE__), '..', 'generators', 'templates', 'application', 'settings', 'license.key')
19
+ license = IO.read(path_to_license).strip
18
20
  Rhoconnect.stub!(:get_config).and_return({Rhoconnect.environment.to_sym => {}})
19
- lambda { License.new }.should raise_error(LicenseException, "Error verifying license.")
21
+ License.new.license.should == license
22
+ # lambda { License.new }.should raise_error(LicenseException, "Error verifying license.")
20
23
  end
21
24
 
22
25
  it "should verify # of seats before adding" do
@@ -0,0 +1,39 @@
1
+ require File.join(File.dirname(__FILE__),'..','spec_helper')
2
+ require File.join(File.dirname(__FILE__),'..','..','lib','rhoconnect','server.rb')
3
+
4
+ describe "Rhoconnect::Model::JsBase" do
5
+ include Rhoconnect
6
+
7
+ it_behaves_like "SharedRhoconnectHelper", :rhoconnect_data => true do
8
+ before(:each) do
9
+ Rhoconnect::Server.set :environment, :test
10
+ Rhoconnect::Server.set :secret, "secure!"
11
+ Rhoconnect.use_node = true
12
+ Rhoconnect.bootstrap(get_testapp_path)
13
+ end
14
+
15
+ def app
16
+ @app ||= Rack::URLMap.new Rhoconnect.url_map
17
+ end
18
+
19
+ after(:each) do
20
+ Rhoconnect::Node.kill_process
21
+ end
22
+
23
+ describe "from ruby" do
24
+
25
+ it "should call model's create method from ruby"
26
+
27
+ it "should call model's update method from ruby"
28
+
29
+ it "should call model's delete method from ruby"
30
+
31
+ it "should call model's query method from ruby"
32
+
33
+ it "should call model's login method from ruby"
34
+
35
+ it "should call model's logoff method from ruby"
36
+
37
+ end
38
+ end
39
+ end
data/spec/node_spec.rb ADDED
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__),'spec_helper')
2
+
3
+ describe "Node" do
4
+ include Rhoconnect
5
+ include TestHelpers
6
+
7
+ before(:each) do
8
+ Store.create
9
+ Store.flush_all
10
+ Rhoconnect.use_node = true
11
+ end
12
+
13
+ after(:each) do
14
+ Rhoconnect::Node.kill_process
15
+ end
16
+
17
+ it "should start node" do
18
+ Rhoconnect.bootstrap(get_testapp_path)
19
+ Rhoconnect::Node.started.should == true
20
+ end
21
+
22
+ it "should stop node" do
23
+ Rhoconnect.bootstrap(get_testapp_path)
24
+ Rhoconnect::Node.started.should == true
25
+ Rhoconnect::Node.kill_process
26
+ Rhoconnect::Node.started.should == false
27
+ end
28
+
29
+ it "should print message if `package.json` not detected" do
30
+ File.stub(:exists?).and_return(false)
31
+ Rhoconnect::Node.should_receive(:log).once.with("No `package.json` detected, disabling JavaScript support.")
32
+ Rhoconnect.bootstrap(get_testapp_path)
33
+ Rhoconnect::Node.started.should == false
34
+ end
35
+
36
+ it "should print message if node not detected" do
37
+ File.stub(:executable?).and_return(false)
38
+ Rhoconnect::Node.should_receive(:log).once.with("Node.js not detected, disabling JavaScript support.")
39
+ Rhoconnect.bootstrap(get_testapp_path)
40
+ Rhoconnect::Node.started.should == false
41
+ end
42
+ end