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
@@ -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