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.
- data/CHANGELOG.md +57 -3
- data/Gemfile +9 -7
- data/Gemfile.lock +37 -37
- data/Rakefile +18 -7
- data/bench/benchapp/Gemfile +1 -1
- data/bench/benchapp/config.ru +0 -3
- data/bench/benchapp/controllers/ruby/application.rb +17 -0
- data/bench/benchapp/controllers/ruby/application_controller.rb +17 -0
- data/bench/benchapp/controllers/ruby/mock_adapter_controller.rb +8 -0
- data/bench/benchapp/controllers/ruby/queue_mock_adapter_controller.rb +8 -0
- data/bench/benchapp/{sources → models/ruby}/mock_adapter.rb +1 -1
- data/bench/benchapp/{sources → models/ruby}/queue_mock_adapter.rb +0 -0
- data/bench/benchapp/spec/{sources → models/ruby}/mock_adapter_spec.rb +1 -1
- data/bench/benchapp/spec/{sources → models/ruby}/queue_mock_adapter_spec.rb +1 -1
- data/bench/benchapp/spec/spec_helper.rb +2 -2
- data/bench/blobapp/Gemfile +1 -1
- data/bench/blobapp/config.ru +0 -3
- data/bench/blobapp/controllers/ruby/application_controller.rb +17 -0
- data/bench/blobapp/controllers/ruby/blob_adapter_controller.rb +8 -0
- data/bench/blobapp/{sources → models/ruby}/blob_adapter.rb +9 -2
- data/bench/blobapp/spec/{sources → models/ruby}/blob_adapter_spec.rb +1 -1
- data/bench/blobapp/spec/spec_helper.rb +1 -1
- data/bench/lib/bench/cli.rb +1 -1
- data/bench/scripts/blob_cud_script.rb +1 -1
- data/bench/scripts/query_md_script.rb +1 -1
- data/bench/scripts/query_only_script.rb +1 -1
- data/bench/scripts/query_script.rb +1 -1
- data/bench/scripts/test_query_script.rb +7 -1
- data/bench/spec/mock_adapter_spec.rb +1 -1
- data/bench/spec/result_spec.rb +3 -3
- data/bin/rhoconnect +5 -3
- data/commands/dtach/dtach_install.rb +2 -2
- data/commands/execute.rb +8 -3
- data/commands/generators/app.rb +3 -3
- data/commands/generators/controller.rb +6 -0
- data/commands/generators/model.rb +6 -0
- data/commands/generators/source.rb +3 -3
- data/commands/generators/update.rb +1 -1
- data/commands/redis/redis_about.rb +2 -2
- data/commands/redis/redis_download.rb +1 -1
- data/commands/redis/redis_install.rb +4 -3
- data/commands/redis/redis_restart.rb +4 -4
- data/commands/redis/redis_start.rb +5 -4
- data/commands/redis/redis_startbg.rb +5 -4
- data/commands/redis/redis_status.rb +13 -0
- data/commands/redis/redis_stop.rb +3 -3
- data/commands/rhoconnect/config.rb +28 -16
- data/commands/rhoconnect/flushdb.rb +1 -2
- data/commands/rhoconnect/get_token.rb +15 -11
- data/commands/rhoconnect/restart.rb +13 -5
- data/commands/rhoconnect/set_admin_password.rb +8 -8
- data/commands/rhoconnect/start.rb +74 -16
- data/commands/rhoconnect/startbg.rb +1 -1
- data/commands/rhoconnect/startdebug.rb +1 -1
- data/commands/rhoconnect/stop.rb +13 -1
- data/commands/rhoconnect/web.rb +5 -5
- data/commands/rhoconnect_console/console.rb +7 -5
- data/commands/{rhoconnect → rhoconnect_spec}/spec.rb +0 -0
- data/commands/rhoconnect_war/war.rb +9 -9
- data/commands/utilities/blank_app.ru +56 -0
- data/commands/utilities/redis_runner.rb +54 -19
- data/doc/authentication.txt +80 -6
- data/doc/blob-sync.txt +104 -97
- data/doc/bulk-sync.txt +1 -1
- data/doc/client-java.txt +3 -3
- data/doc/client-objc.txt +2 -2
- data/doc/client.txt +4 -4
- data/doc/command-line.txt +105 -200
- data/doc/data-partitioning.txt +40 -0
- data/doc/deploying.txt +249 -77
- data/doc/extending-rhoconnect-server.txt +40 -57
- data/doc/heroku-addon.txt +2 -0
- data/doc/install.txt +45 -95
- data/doc/introduction.txt +1 -1
- data/doc/java-plugin.txt +365 -190
- data/doc/metadata.txt +1 -1
- data/doc/migration.txt +108 -142
- data/doc/preparing-production.txt +1 -1
- data/doc/push-backend-setup.txt +2 -0
- data/doc/push-client-setup-android.txt +78 -0
- data/doc/push-client-setup-bb.txt +81 -0
- data/doc/push-client-setup-ios.txt +70 -0
- data/doc/push-client-setup-rps.txt +200 -0
- data/doc/push-client-setup.txt +63 -66
- data/doc/push-server-setup.txt +67 -40
- data/doc/push-testing.txt +29 -0
- data/doc/push.txt +21 -6
- data/doc/rest-api.txt +128 -55
- data/doc/rhoconnect-redis-stack.txt +120 -0
- data/doc/settings.txt +4 -12
- data/doc/source-adapters-intro.txt +28 -0
- data/doc/source-adapters.txt +235 -272
- data/doc/stats-middleware.txt +9 -29
- data/doc/supported-platforms.txt +21 -30
- data/doc/testing.txt +40 -42
- data/doc/tutorial.txt +72 -57
- data/examples/simple/Gemfile +1 -1
- data/examples/simple/application.rb +4 -5
- data/examples/simple/my_server.rb +2 -2
- data/examples/simple/settings/settings.yml +1 -1
- data/generators/rhoconnect.rb +151 -50
- data/generators/templates/application/Gemfile +1 -1
- data/generators/templates/application/Rakefile +3 -3
- data/generators/templates/application/config.ru +1 -4
- data/generators/templates/application/controllers/application_controller.rb +17 -0
- data/generators/templates/application/controllers/js/application_controller.js +14 -0
- data/generators/templates/application/controllers/ruby/application_controller.rb +17 -0
- data/generators/templates/application/package.json +8 -0
- data/generators/templates/application/rcgemfile +2 -5
- data/generators/templates/application/settings/settings.yml +3 -3
- data/generators/templates/application/spec/application_controller_spec.rb +23 -0
- data/generators/templates/application/spec/js_spec.rb +25 -0
- data/generators/templates/application/spec/spec_helper.rb +21 -7
- data/generators/templates/source/controllers/js/controller.js +7 -0
- data/generators/templates/source/controllers/ruby/controller.rb +8 -0
- data/generators/templates/source/controllers/ruby/controller_spec.rb +27 -0
- data/generators/templates/source/models/js/model.js +46 -0
- data/generators/templates/source/{source_adapter.rb → models/ruby/model.rb} +15 -10
- data/generators/templates/source/{source_spec.rb → models/ruby/model_spec.rb} +1 -1
- data/install.sh +5 -5
- data/installer/unix-like/create_texts.rb +2 -2
- data/installer/unix-like/rho_connect_install_constants.rb +2 -2
- data/installer/unix-like/rho_connect_install_utilities.rb +1 -1
- data/installer/utils/constants.rb +4 -4
- data/js-adapters/ballroom.js +216 -0
- data/js-adapters/node.rb +52 -0
- data/js-adapters/node_channel.rb +181 -0
- data/js-adapters/request.js +27 -0
- data/js-adapters/response.js +57 -0
- data/js-adapters/rhoconnect_helpers.js +60 -0
- data/js-adapters/router.js +60 -0
- data/js-adapters/server.js +5 -0
- data/lib/rhoconnect/api/app/ans_login.rb +3 -3
- data/lib/rhoconnect/api/app/bulk_data.rb +10 -10
- data/lib/rhoconnect/api/app/fast_delete.rb +11 -10
- data/lib/rhoconnect/api/app/fast_insert.rb +11 -10
- data/lib/rhoconnect/api/app/fast_update.rb +11 -10
- data/lib/rhoconnect/api/app/login.rb +5 -5
- data/lib/rhoconnect/api/app/push_deletes.rb +12 -11
- data/lib/rhoconnect/api/app/push_objects.rb +12 -11
- data/lib/rhoconnect/api/app/query.rb +8 -7
- data/lib/rhoconnect/api/app/queue_updates.rb +98 -94
- data/lib/rhoconnect/api/app/search.rb +8 -7
- data/lib/rhoconnect/api/client/client_get_db_doc.rb +5 -5
- data/lib/rhoconnect/api/client/client_set_db_doc.rb +8 -8
- data/lib/rhoconnect/api/client/create.rb +7 -7
- data/lib/rhoconnect/api/client/get_client_params.rb +4 -4
- data/lib/rhoconnect/api/client/list_client_docs.rb +17 -17
- data/lib/rhoconnect/api/client/register.rb +12 -12
- data/lib/rhoconnect/api/client/reset.rb +5 -5
- data/lib/rhoconnect/api/readstate/set_refresh_time.rb +9 -9
- data/lib/rhoconnect/api/source/get_source_params.rb +4 -4
- data/lib/rhoconnect/api/source/list_sources.rb +16 -16
- data/lib/rhoconnect/api/source/update_source_params.rb +6 -6
- data/lib/rhoconnect/api/store/get_db_doc.rb +4 -4
- data/lib/rhoconnect/api/store/set_db_doc.rb +7 -7
- data/lib/rhoconnect/api/system/get_adapter.rb +4 -4
- data/lib/rhoconnect/api/system/get_license_info.rb +8 -8
- data/lib/rhoconnect/api/system/login.rb +15 -15
- data/lib/rhoconnect/api/system/reset.rb +11 -11
- data/lib/rhoconnect/api/system/save_adapter.rb +4 -4
- data/lib/rhoconnect/api/system/stats.rb +22 -22
- data/lib/rhoconnect/api/user/create_user.rb +7 -7
- data/lib/rhoconnect/api/user/delete_client.rb +6 -6
- data/lib/rhoconnect/api/user/delete_user.rb +11 -10
- data/lib/rhoconnect/api/user/list_clients.rb +4 -4
- data/lib/rhoconnect/api/user/list_source_docs.rb +10 -10
- data/lib/rhoconnect/api/user/list_users.rb +3 -3
- data/lib/rhoconnect/api/user/ping.rb +3 -3
- data/lib/rhoconnect/api/user/show_user.rb +3 -3
- data/lib/rhoconnect/api/user/update_user.rb +5 -5
- data/lib/rhoconnect/api/user/user_get_db_doc.rb +5 -5
- data/lib/rhoconnect/api/user/user_set_db_doc.rb +10 -10
- data/lib/rhoconnect/api_token.rb +5 -6
- data/lib/rhoconnect/app.rb +6 -46
- data/lib/rhoconnect/application/init.rb +5 -2
- data/lib/rhoconnect/async.rb +76 -39
- data/lib/rhoconnect/bulk_data/bulk_data.rb +6 -4
- data/lib/rhoconnect/client.rb +59 -9
- data/lib/rhoconnect/condition/admin_required.rb +27 -0
- data/lib/rhoconnect/condition/client_required.rb +50 -0
- data/lib/rhoconnect/condition/login_required.rb +22 -0
- data/lib/rhoconnect/condition/source_required.rb +49 -0
- data/lib/rhoconnect/condition/verbs.rb +17 -0
- data/lib/rhoconnect/condition/verify_success.rb +19 -0
- data/lib/rhoconnect/controller/app_base.rb +74 -0
- data/lib/rhoconnect/controller/base.rb +68 -0
- data/lib/rhoconnect/controller/clients_controller.rb +79 -0
- data/lib/rhoconnect/controller/dynamic_adapter_controller.rb +93 -0
- data/lib/rhoconnect/controller/js_base.rb +124 -0
- data/lib/rhoconnect/controller/read_state_controller.rb +22 -0
- data/lib/rhoconnect/controller/source_adapter_base.rb +14 -0
- data/lib/rhoconnect/controller/sources_controller.rb +44 -0
- data/lib/rhoconnect/controller/store_controller.rb +25 -0
- data/lib/rhoconnect/controller/system_controller.rb +67 -0
- data/lib/rhoconnect/controller/users_controller.rb +99 -0
- data/lib/rhoconnect/db_adapter.rb +1 -3
- data/lib/rhoconnect/document.rb +159 -50
- data/lib/rhoconnect/handler/authenticate/execute_methods.rb +77 -0
- data/lib/rhoconnect/handler/authenticate/runner.rb +49 -0
- data/lib/rhoconnect/handler/authenticate.rb +3 -0
- data/lib/rhoconnect/handler/bulk_data.rb +28 -0
- data/lib/rhoconnect/handler/changes/engine.rb +271 -0
- data/lib/rhoconnect/handler/changes/execute_methods.rb +88 -0
- data/lib/rhoconnect/handler/changes/pass_through_runner.rb +11 -0
- data/lib/rhoconnect/handler/changes/runner.rb +53 -0
- data/lib/rhoconnect/handler/changes.rb +31 -0
- data/lib/rhoconnect/handler/helpers/auth_method.rb +29 -0
- data/lib/rhoconnect/handler/helpers/binding.rb +18 -0
- data/lib/rhoconnect/handler/helpers/bulk_data.rb +53 -0
- data/lib/rhoconnect/handler/helpers/source_job.rb +14 -0
- data/lib/rhoconnect/handler/helpers.rb +4 -0
- data/lib/rhoconnect/handler/plugin_callbacks/execute_methods.rb +99 -0
- data/lib/rhoconnect/handler/plugin_callbacks/runner.rb +28 -0
- data/lib/rhoconnect/handler/plugin_callbacks.rb +67 -0
- data/lib/rhoconnect/handler/query/engine.rb +93 -0
- data/lib/rhoconnect/handler/query/execute_methods.rb +21 -0
- data/lib/rhoconnect/handler/query/pass_through_runner.rb +35 -0
- data/lib/rhoconnect/handler/query/runner.rb +270 -0
- data/lib/rhoconnect/handler/query.rb +19 -0
- data/lib/rhoconnect/handler/search/engine.rb +60 -0
- data/lib/rhoconnect/handler/search/execute_methods.rb +32 -0
- data/lib/rhoconnect/handler/search/pass_through_runner.rb +18 -0
- data/lib/rhoconnect/handler/search/runner.rb +104 -0
- data/lib/rhoconnect/handler/search.rb +26 -0
- data/lib/rhoconnect/handler/sync.rb +29 -0
- data/lib/rhoconnect/jobs/source_job.rb +13 -4
- data/lib/rhoconnect/js_adapter.rb +79 -0
- data/lib/rhoconnect/license.rb +10 -2
- data/lib/rhoconnect/middleware/current_user.rb +14 -1
- data/lib/rhoconnect/middleware/helpers.rb +10 -93
- data/lib/rhoconnect/middleware/x_domain_session_wrapper.rb +1 -1
- data/lib/rhoconnect/model/base.rb +229 -0
- data/lib/rhoconnect/model/dynamic_adapter_model.rb +90 -0
- data/lib/rhoconnect/model/js_base.rb +121 -0
- data/lib/rhoconnect/ping/android.rb +1 -1
- data/lib/rhoconnect/predefined_adapters/bench_adapter.rb +7 -4
- data/lib/rhoconnect/read_state.rb +3 -3
- data/lib/rhoconnect/server.rb +159 -190
- data/lib/rhoconnect/source.rb +100 -11
- data/lib/rhoconnect/stats/record.rb +10 -10
- data/lib/rhoconnect/store.rb +905 -591
- data/lib/rhoconnect/{model.rb → store_orm.rb} +53 -115
- data/lib/rhoconnect/tasks.rb +18 -4
- data/lib/rhoconnect/test_methods.rb +30 -17
- data/lib/rhoconnect/user.rb +35 -17
- data/lib/rhoconnect/utilities.rb +1 -1
- data/lib/rhoconnect/version.rb +2 -2
- data/lib/rhoconnect/web-console/server.rb +29 -14
- data/lib/rhoconnect/web-console/views/home.js +10 -10
- data/lib/rhoconnect/web-console/views/new_ping.js +1 -1
- data/lib/rhoconnect.rb +120 -51
- data/rhoconnect.gemspec +4 -3
- data/spec/api/api_helper.rb +1 -6
- data/spec/api/app/fast_delete_spec.rb +4 -4
- data/spec/api/app/fast_insert_spec.rb +4 -4
- data/spec/api/app/fast_update_spec.rb +8 -8
- data/spec/api/app/push_deletes_spec.rb +2 -2
- data/spec/api/app/push_objects_spec.rb +5 -5
- data/spec/api/client/client_get_db_doc_spec.rb +6 -4
- data/spec/api/client/client_set_db_doc_spec.rb +3 -2
- data/spec/api/client/get_client_params_spec.rb +14 -0
- data/spec/api/client/list_client_docs_spec.rb +30 -20
- data/spec/api/client/reset_spec.rb +36 -0
- data/spec/api/source/get_source_params_spec.rb +23 -17
- data/spec/api/system/get_license_info_spec.rb +0 -20
- data/spec/api/system/login_spec.rb +8 -0
- data/spec/api/system/reset_spec.rb +0 -1
- data/spec/api/system/stats_spec.rb +5 -5
- data/spec/api/user/create_user_spec.rb +14 -6
- data/spec/api/user/delete_user_spec.rb +20 -18
- data/spec/api/user/list_users_spec.rb +5 -6
- data/spec/api/user/update_user_spec.rb +5 -4
- data/spec/apps/rhotestapp/config.ru +16 -1
- data/spec/apps/rhotestapp/controllers/js/js_sample_controller.js +23 -0
- data/spec/apps/rhotestapp/controllers/js/sample2_controller.js +32 -0
- data/spec/apps/rhotestapp/controllers/ruby/application_controller.rb +21 -0
- data/spec/apps/rhotestapp/controllers/ruby/sample_adapter_controller.rb +8 -0
- data/spec/apps/rhotestapp/models/js/js_sample.js +55 -0
- data/spec/apps/rhotestapp/models/js/sample2.js +25 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/base_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/fixed_schema_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/other_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/sample_adapter.rb +0 -0
- data/spec/apps/rhotestapp/{sources → models/ruby}/simple_adapter.rb +2 -2
- data/spec/apps/rhotestapp/{sources → models/ruby}/sub_adapter.rb +0 -0
- data/spec/apps/rhotestapp/settings/settings.yml +0 -1
- data/spec/bulk_data/bulk_data_spec.rb +20 -5
- data/spec/cli/cli_spec.rb +83 -0
- data/spec/client_spec.rb +20 -17
- data/spec/client_sync_spec.rb +244 -406
- data/spec/controllers/js_base_spec.rb +89 -0
- data/spec/doc/doc_spec.rb +18 -18
- data/spec/document_spec.rb +29 -13
- data/spec/dynamic_adapter_spec.rb +6 -6
- data/spec/generator/generator_spec.rb +7 -4
- data/spec/jobs/bulk_data_job_spec.rb +14 -10
- data/spec/jobs/source_job_spec.rb +8 -8
- data/spec/license_spec.rb +5 -2
- data/spec/models/js_model_spec.rb +39 -0
- data/spec/node_spec.rb +42 -0
- data/spec/perf/store_perf_spec.rb +67 -12
- data/spec/ping/android_spec.rb +1 -1
- data/spec/read_state_spec.rb +1 -1
- data/spec/rhoconnect_spec.rb +1 -1
- data/spec/server/cors_spec.rb +14 -18
- data/spec/server/server_spec.rb +265 -88
- data/spec/server/stats_spec.rb +1 -1
- data/spec/source_adapter_spec.rb +54 -27
- data/spec/source_spec.rb +8 -3
- data/spec/source_sync_spec.rb +538 -468
- data/spec/spec_helper.rb +35 -4
- data/spec/stats/record_spec.rb +10 -10
- data/spec/{model_spec.rb → store_orm_spec.rb} +56 -54
- data/spec/store_spec.rb +159 -179
- data/spec/support/shared_examples.rb +36 -27
- data/spec/sync_states_spec.rb +40 -33
- data/spec/test_methods_spec.rb +18 -14
- data/spec/user_spec.rb +17 -30
- metadata +156 -52
- data/bench/benchapp/application.rb +0 -39
- data/bench/blobapp/application.rb +0 -44
- data/commands/rhoconnect/clean_start.rb +0 -9
- data/commands/rhoconnect/create_user.rb +0 -18
- data/commands/rhoconnect/delete_device.rb +0 -9
- data/commands/rhoconnect/delete_user.rb +0 -8
- data/commands/rhoconnect/reset.rb +0 -16
- data/commands/rhoconnect/reset_refresh.rb +0 -11
- data/generators/templates/application/application.rb +0 -43
- data/lib/rhoconnect/client_sync.rb +0 -434
- data/lib/rhoconnect/dynamic_adapter.rb +0 -91
- data/lib/rhoconnect/middleware/admin_user.rb +0 -23
- data/lib/rhoconnect/middleware/current_request.rb +0 -16
- data/lib/rhoconnect/middleware/login_required.rb +0 -22
- data/lib/rhoconnect/source_adapter.rb +0 -132
- data/lib/rhoconnect/source_sync.rb +0 -464
- data/spec/apps/rhotestapp/application.rb +0 -23
@@ -7,7 +7,7 @@ describe "RhoconnectApiPushObjects" do
|
|
7
7
|
post "/app/#{Rhoconnect::API_VERSION}/#{@s_fields[:name]}/push_objects",
|
8
8
|
{:user_id => @u.id, :objects => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
9
9
|
last_response.should be_ok
|
10
|
-
|
10
|
+
verify_doc_result(@s, {:md => data, :md_size=>'3'})
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should push new objects to rhoconnect's :md with old api/source route and deprecation warning" do
|
@@ -16,7 +16,7 @@ describe "RhoconnectApiPushObjects" do
|
|
16
16
|
{:user_id => @u.id, :source_id => @s_fields[:name], :objects => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
17
17
|
last_response.should be_ok
|
18
18
|
last_response.headers["Warning"].index('deprecated').should_not == nil
|
19
|
-
|
19
|
+
verify_doc_result(@s, {:md => data, :md_size=>'3'})
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should push new objects to rhoconnect's :md with oldest api route and deprecation warning" do
|
@@ -25,21 +25,21 @@ describe "RhoconnectApiPushObjects" do
|
|
25
25
|
{:user_id => @u.id, :source_id => @s_fields[:name], :objects => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
26
26
|
last_response.should be_ok
|
27
27
|
last_response.headers["Warning"].index('deprecated').should_not == nil
|
28
|
-
|
28
|
+
verify_doc_result(@s, {:md => data, :md_size=>'3'})
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should push updates to existing objects to rhoconnect's :md" do
|
32
32
|
data = {'1' => @product1, '2' => @product2, '3' => @product3}
|
33
33
|
update = {'price' => '0.99', 'new_field' => 'value'}
|
34
34
|
@s = Source.load(@s_fields[:name],@s_params)
|
35
|
-
|
35
|
+
set_doc_state(@s, {:md => data, :md_size => '3'})
|
36
36
|
update.each do |key,value|
|
37
37
|
data['2'][key] = value
|
38
38
|
end
|
39
39
|
post "/app/#{Rhoconnect::API_VERSION}/#{@s_fields[:name]}/push_objects",
|
40
40
|
{:user_id => @u.id, :objects => {'2'=>update}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
41
41
|
last_response.should be_ok
|
42
|
-
|
42
|
+
verify_doc_result(@s, {:md => data, :md_size=>'3'})
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -4,13 +4,14 @@ describe "RhoconnectApiClientGetDbDoc" do
|
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should get clients's db document by doc key and data" do
|
6
6
|
data = {'1' => {'foo' => 'bar'}}
|
7
|
+
Client.define_valid_doctypes([:myclientdoc])
|
7
8
|
dockey = 'myclientdoc'
|
8
9
|
post "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/sources/#{@c.source_name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
9
10
|
last_response.should be_ok
|
10
|
-
|
11
11
|
get "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/sources/#{@c.source_name}/docs/#{dockey}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
12
12
|
last_response.should be_ok
|
13
13
|
JSON.parse(last_response.body).should == data
|
14
|
+
Client.valid_doctypes.delete(dockey.to_sym)
|
14
15
|
end
|
15
16
|
|
16
17
|
it "should append data to the client's db document by doc name and data" do
|
@@ -18,14 +19,15 @@ describe "RhoconnectApiClientGetDbDoc" do
|
|
18
19
|
data2 = {'2' => {'foo1' => 'bar1'}}
|
19
20
|
data3 = data.merge(data2)
|
20
21
|
dockey = 'abc:abc'
|
21
|
-
|
22
|
+
Client.define_valid_doctypes([dockey])
|
22
23
|
post "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/sources/#{@c.source_name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
23
24
|
last_response.should be_ok
|
24
|
-
|
25
|
+
verify_doc_result(@c, dockey => data)
|
25
26
|
|
26
27
|
post "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/sources/#{@c.source_name}/docs/#{dockey}", {:data => data2, :append => true}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
27
28
|
last_response.should be_ok
|
28
|
-
|
29
|
+
verify_doc_result(@c, dockey => data3)
|
30
|
+
Client.valid_doctypes.delete(dockey.to_sym)
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -5,10 +5,11 @@ describe "RhoconnectApiClientSetDbDoc" do
|
|
5
5
|
it "should set client's db document by doc key and data" do
|
6
6
|
data = {'1' => {'foo' => 'bar'}}
|
7
7
|
dockey = 'myclientdoc'
|
8
|
-
|
8
|
+
Client.define_valid_doctypes([dockey])
|
9
9
|
post "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/sources/#{@c.source_name}/docs/#{dockey}", {:data => data}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
10
10
|
last_response.should be_ok
|
11
|
-
|
11
|
+
verify_doc_result(@c, dockey => data)
|
12
|
+
Client.valid_doctypes.delete(dockey.to_sym)
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|
@@ -6,6 +6,20 @@ describe "RhoconnectApiGetClientParams" do
|
|
6
6
|
get "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
7
7
|
res = JSON.parse(last_response.body)
|
8
8
|
res.delete_if { |attrib| attrib['name'] == 'rho__id' || attrib['name'] == 'last_sync'}
|
9
|
+
res.sort{|x,y| x['name']<=>y['name']}.should == [
|
10
|
+
{"name"=>"device_type", "value"=>"Apple", "type"=>"string"},
|
11
|
+
{"name"=>"device_pin", "value"=>"abcd", "type"=>"string"},
|
12
|
+
{"name"=>"device_port", "value"=>"3333", "type"=>"string"},
|
13
|
+
{"name"=>"device_push_type", "type"=>"string", "value"=>nil},
|
14
|
+
{"name"=>"user_id", "value"=>"testuser", "type"=>"string"},
|
15
|
+
{"name"=>"phone_id", "value"=>nil, "type"=>"string"},
|
16
|
+
{"name"=>"app_id", "value"=>"application", "type"=>"string"}].sort{|x,y| x['name']<=>y['name']}
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should list client attributes with old route and deprecation warning" do
|
20
|
+
post "/api/get_client_params", {:api_token => @api_token, :client_id =>@c.id}
|
21
|
+
res = JSON.parse(last_response.body)
|
22
|
+
res.delete_if { |attrib| attrib['name'] == 'rho__id' || attrib['name'] == 'last_sync'}
|
9
23
|
res.sort{|x,y| x['name']<=>y['name']}.should == [
|
10
24
|
{"name"=>"device_type", "value"=>"Apple", "type"=>"string"},
|
11
25
|
{"name"=>"device_pin", "value"=>"abcd", "type"=>"string"},
|
@@ -4,29 +4,39 @@ describe "RhoconnectApiListClientDocs" do
|
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should list client documents" do
|
6
6
|
source_id = "SimpleAdapter"
|
7
|
+
|
8
|
+
Client.define_valid_doctypes(['mycustomdoc'])
|
7
9
|
get "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/sources/#{source_id}/docnames", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
8
10
|
JSON.parse(last_response.body).should == {
|
9
|
-
"cd"=>"client:application:testuser:#{@c.id}:
|
10
|
-
"cd_size"=>"client:application:testuser:#{@c.id}:
|
11
|
-
"
|
12
|
-
"
|
13
|
-
"
|
14
|
-
|
15
|
-
"
|
16
|
-
"
|
17
|
-
"
|
18
|
-
"
|
19
|
-
"
|
11
|
+
"cd"=>"client:application:testuser:#{@c.id}:#{source_id}:cd",
|
12
|
+
"cd_size"=>"client:application:testuser:#{@c.id}:#{source_id}:cd_size",
|
13
|
+
"page"=>"client:application:testuser:#{@c.id}:#{source_id}:page",
|
14
|
+
"delete_page"=>"client:application:testuser:#{@c.id}:#{source_id}:delete_page",
|
15
|
+
"create_links"=>"client:application:testuser:#{@c.id}:#{source_id}:create_links",
|
16
|
+
"create_links_page"=>"client:application:testuser:#{@c.id}:#{source_id}:create_links_page",
|
17
|
+
"metadata_page"=>"client:application:testuser:#{@c.id}:#{source_id}:metadata_page",
|
18
|
+
"total_count_page"=>"client:application:testuser:#{@c.id}:#{source_id}:total_count_page",
|
19
|
+
"page_token"=>"client:application:testuser:#{@c.id}:#{source_id}:page_token",
|
20
|
+
"schema_sha1"=>"client:application:testuser:#{@c.id}:#{source_id}:schema_sha1",
|
21
|
+
"schema_page"=>"client:application:testuser:#{@c.id}:#{source_id}:schema_page",
|
22
|
+
"metadata_sha1"=>"client:application:testuser:#{@c.id}:#{source_id}:metadata_sha1",
|
23
|
+
"search"=>"client:application:testuser:#{@c.id}:#{source_id}:search",
|
24
|
+
"search_token"=>"client:application:testuser:#{@c.id}:#{source_id}:search_token",
|
25
|
+
"search_page"=>"client:application:testuser:#{@c.id}:#{source_id}:search_page",
|
26
|
+
"search_errors"=>"client:application:testuser:#{@c.id}:#{source_id}:search_errors",
|
27
|
+
"create_errors"=>"client:application:testuser:#{@c.id}:#{source_id}:create_errors",
|
28
|
+
"create_errors_page"=>"client:application:testuser:#{@c.id}:#{source_id}:create_errors_page",
|
29
|
+
"update_errors"=>"client:application:testuser:#{@c.id}:#{source_id}:update_errors",
|
30
|
+
"update_errors_page"=>"client:application:testuser:#{@c.id}:#{source_id}:update_errors_page",
|
31
|
+
"update_rollback"=>"client:application:testuser:#{@c.id}:#{source_id}:update_rollback",
|
32
|
+
"update_rollback_page"=>"client:application:testuser:#{@c.id}:#{source_id}:update_rollback_page",
|
33
|
+
"delete_errors"=>"client:application:testuser:#{@c.id}:#{source_id}:delete_errors",
|
34
|
+
"delete_errors_page"=>"client:application:testuser:#{@c.id}:#{source_id}:delete_errors_page",
|
20
35
|
|
21
|
-
"
|
22
|
-
"login_error"=>"client:application:testuser:#{@c.id}:SimpleAdapter:login_error",
|
23
|
-
"create_errors"=>"client:application:testuser:#{@c.id}:SimpleAdapter:create_errors",
|
24
|
-
"update_errors"=>"client:application:testuser:#{@c.id}:SimpleAdapter:update_errors",
|
25
|
-
"logoff_error"=>"client:application:testuser:#{@c.id}:SimpleAdapter:logoff_error",
|
36
|
+
"mycustomdoc"=>"client:application:testuser:#{@c.id}:#{source_id}:mycustomdoc"}
|
26
37
|
|
27
|
-
|
28
|
-
"search_token"=>"client:application:testuser:#{@c.id}:SimpleAdapter:search_token",
|
29
|
-
"search_errors"=>"client:application:testuser:#{@c.id}:SimpleAdapter:search_errors"}
|
38
|
+
Client.valid_doctypes.delete('mycustomdoc'.to_sym)
|
30
39
|
end
|
31
40
|
end
|
32
|
-
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
|
+
|
3
|
+
describe "RhoconnectApiClientReset" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
|
+
before(:each) do
|
6
|
+
do_post "/rc/#{Rhoconnect::API_VERSION}/app/login", "login" => @u.login, "password" => 'testpass'
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should handle client reset" do
|
10
|
+
set_doc_state(@c, :cd => @data)
|
11
|
+
post "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/reset"
|
12
|
+
last_response.should be_ok
|
13
|
+
verify_doc_result(@c, :cd => {})
|
14
|
+
Client.load(@c.id,{:source_name => @s.name}).should_not be_nil
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should handle client reset on individual source adapters" do
|
18
|
+
@c.source_name = 'SampleAdapter'
|
19
|
+
set_doc_state(@c, :cd => @data)
|
20
|
+
verify_doc_result(@c, :cd => @data)
|
21
|
+
|
22
|
+
@c.source_name = 'SimpleAdapter'
|
23
|
+
set_doc_state(@c, :cd => @data)
|
24
|
+
verify_doc_result(@c, :cd => @data)
|
25
|
+
|
26
|
+
sources = [{'name'=>'SimpleAdapter'}]
|
27
|
+
do_post "/rc/#{Rhoconnect::API_VERSION}/clients/#{@c.id}/reset", {:sources => sources}
|
28
|
+
last_response.should be_ok
|
29
|
+
|
30
|
+
@c.source_name = 'SampleAdapter'
|
31
|
+
verify_doc_result(@c, :cd => @data)
|
32
|
+
@c.source_name = 'SimpleAdapter'
|
33
|
+
verify_doc_result(@c, :cd => {})
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -3,33 +3,39 @@ require File.join(File.dirname(__FILE__),'..','api_helper')
|
|
3
3
|
describe "RhoconnectApiGetSourceParams" do
|
4
4
|
|
5
5
|
it_should_behave_like "ApiHelper" do
|
6
|
-
|
6
|
+
|
7
7
|
it "should list source attributes" do
|
8
8
|
source_id = "SampleAdapter"
|
9
9
|
get "/rc/#{Rhoconnect::API_VERSION}/sources/#{source_id}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
10
10
|
result = JSON.parse(last_response.body).sort {|x,y| y["name"] <=> x["name"] }
|
11
|
-
|
12
|
-
{"name"=>"rho__id", "value"=>"SampleAdapter", "type"=>"string"},
|
13
|
-
{"name"=>"source_id", "value"=>nil, "type"=>"integer"},
|
14
|
-
{"name"=>"name", "value"=>"SampleAdapter", "type"=>"string"},
|
15
|
-
{"name"=>"url", "value"=>"http://example.com", "type"=>"string"},
|
16
|
-
{"name"=>"login", "value"=>"testuser", "type"=>"string"},
|
17
|
-
{"name"=>"password", "value"=>"testpass", "type"=>"string"},
|
18
|
-
{"name"=>"priority", "value"=>1, "type"=>"integer"},
|
19
|
-
{"name"=>"callback_url", "value"=>nil, "type"=>"string"},
|
11
|
+
expected = [
|
12
|
+
{"name"=>"rho__id", "value"=>"SampleAdapter", "type"=>"string"},
|
13
|
+
{"name"=>"source_id", "value"=>nil, "type"=>"integer"},
|
14
|
+
{"name"=>"name", "value"=>"SampleAdapter", "type"=>"string"},
|
15
|
+
{"name"=>"url", "value"=>"http://example.com", "type"=>"string"},
|
16
|
+
{"name"=>"login", "value"=>"testuser", "type"=>"string"},
|
17
|
+
{"name"=>"password", "value"=>"testpass", "type"=>"string"},
|
18
|
+
{"name"=>"priority", "value"=>1, "type"=>"integer"},
|
19
|
+
{"name"=>"callback_url", "value"=>nil, "type"=>"string"},
|
20
20
|
{"name"=>"poll_interval", "value"=>300, "type"=>"integer"},
|
21
21
|
{"name"=>"retry_limit", "type"=>"integer", "value"=>0},
|
22
22
|
{"name"=>"simulate_time", "value"=>0, "type"=>"integer"},
|
23
|
-
{"name"=>"partition_type", "value"=>"user", "type"=>"string"},
|
24
|
-
{"name"=>"push_notify", "value"=>"false", "type"=>"string"},
|
25
|
-
{"name"=>"sync_type", "value"=>"incremental", "type"=>"string"},
|
23
|
+
{"name"=>"partition_type", "value"=>"user", "type"=>"string"},
|
24
|
+
{"name"=>"push_notify", "value"=>"false", "type"=>"string"},
|
25
|
+
{"name"=>"sync_type", "value"=>"incremental", "type"=>"string"},
|
26
26
|
{"name"=>"belongs_to", "type"=>"string", "value"=>nil},
|
27
27
|
{"name"=>"has_many", "type"=>"string", "value"=>"FixedSchemaAdapter,brand"},
|
28
|
-
{"name"=>"id", "value"=>"SampleAdapter", "type"=>"string"},
|
29
|
-
{"name"=>"queue", "value"=>nil, "type"=>"string"},
|
30
|
-
{"name"=>"query_queue", "value"=>nil, "type"=>"string"},
|
31
|
-
{"name"=>"pass_through", "value"=>nil, "type"=>"string"},
|
28
|
+
{"name"=>"id", "value"=>"SampleAdapter", "type"=>"string"},
|
29
|
+
{"name"=>"queue", "value"=>nil, "type"=>"string"},
|
30
|
+
{"name"=>"query_queue", "value"=>nil, "type"=>"string"},
|
31
|
+
{"name"=>"pass_through", "value"=>nil, "type"=>"string"},
|
32
32
|
{"name"=>"cud_queue", "value"=>nil, "type"=>"string"}].sort {|x,y| y["name"] <=> x["name"] }
|
33
|
+
result.each_with_index do |item,i|
|
34
|
+
expect = expected[i]
|
35
|
+
item['name'].should == expect['name']
|
36
|
+
item['value'].should == expect['value']
|
37
|
+
item['type'].should == expect['type']
|
38
|
+
end
|
33
39
|
end
|
34
40
|
end
|
35
41
|
end
|
@@ -11,25 +11,5 @@ describe "RhoconnectApiGetLicenseInfo" do
|
|
11
11
|
"rhoconnect_version" => "Version 1",
|
12
12
|
"licensee" => "Rhomobile" }
|
13
13
|
end
|
14
|
-
|
15
|
-
it "should get custom_license info with deprecation warning" do
|
16
|
-
# this one for test purposes to make sure
|
17
|
-
# that an old way custom REST API still works
|
18
|
-
Rhoconnect::Server.api :custom_license_info do |params,user|
|
19
|
-
{:rhoconnect_version => Rhoconnect.license.rhoconnect_version,
|
20
|
-
:licensee => Rhoconnect.license.licensee,
|
21
|
-
:seats => Rhoconnect.license.seats,
|
22
|
-
:issued => Rhoconnect.license.issued,
|
23
|
-
:available => Rhoconnect.license.available }.to_json
|
24
|
-
end
|
25
|
-
|
26
|
-
post "/api/custom_license_info", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
27
|
-
JSON.parse(last_response.body).should == {
|
28
|
-
"available" => 9,
|
29
|
-
"issued" => "Fri Apr 23 17:20:13 -0700 2010",
|
30
|
-
"seats" => 10,
|
31
|
-
"rhoconnect_version" => "Version 1",
|
32
|
-
"licensee" => "Rhomobile" }
|
33
|
-
end
|
34
14
|
end
|
35
15
|
end
|
@@ -18,6 +18,14 @@ describe "RhoconnectApiGetApiToken" do
|
|
18
18
|
post "/rc/#{Rhoconnect::API_VERSION}/system/login", :login => @u_fields[:login],:password => 'testpass'
|
19
19
|
last_response.status.should == 422
|
20
20
|
last_response.body.should == 'Invalid/missing API user'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return 422 if token doesn't belong to the API user" do
|
24
|
+
invalid_api_token = ApiToken.create({:value => 'mytoken', :user_id => 'notadmin'})
|
25
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
26
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => invalid_api_token.value}
|
27
|
+
last_response.status.should == 422
|
28
|
+
last_response.body.should == 'Invalid/missing API user'
|
21
29
|
end
|
22
30
|
|
23
31
|
it "should return 422 if no token provided" do
|
@@ -4,7 +4,7 @@ describe "RhoconnectApiStats" do
|
|
4
4
|
it_should_behave_like "ApiHelper" do
|
5
5
|
|
6
6
|
def app
|
7
|
-
@app ||=
|
7
|
+
@app ||= Rack::URLMap.new Rhoconnect.url_map
|
8
8
|
end
|
9
9
|
|
10
10
|
before(:each) do
|
@@ -29,8 +29,8 @@ describe "RhoconnectApiStats" do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should retrieve range metric" do
|
32
|
-
Store.
|
33
|
-
Store.
|
32
|
+
Store.zadd('stat:foo', 2, "1:2")
|
33
|
+
Store.zadd('stat:foo', 3, "1:3")
|
34
34
|
get "/rc/#{Rhoconnect::API_VERSION}/system/stats", {
|
35
35
|
:metric => 'foo',
|
36
36
|
:start => 0,
|
@@ -41,7 +41,7 @@ describe "RhoconnectApiStats" do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should retrieve string metric" do
|
44
|
-
Store.
|
44
|
+
Store.put_value('stat:foo', 'bar')
|
45
45
|
get "/rc/#{Rhoconnect::API_VERSION}/system/stats", {
|
46
46
|
:metric => 'foo'
|
47
47
|
}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
@@ -50,7 +50,7 @@ describe "RhoconnectApiStats" do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should retrieve string metric with old route and print deprecation warning" do
|
53
|
-
Store.
|
53
|
+
Store.put_value('stat:foo', 'bar')
|
54
54
|
post "/api/stats", {
|
55
55
|
:metric => 'foo'
|
56
56
|
}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
@@ -12,17 +12,25 @@ describe "RhoconnectApiCreateUser" do
|
|
12
12
|
@a.users.members.sort.should == [@u.login, params[:attributes][:login]]
|
13
13
|
end
|
14
14
|
|
15
|
-
it "should create user and
|
16
|
-
params = {:
|
17
|
-
|
15
|
+
it "should create user and post a deprecation warning with the old route" do
|
16
|
+
params = {:api_token => @api_token,
|
17
|
+
:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
18
|
+
post "/api/create_user", params
|
18
19
|
last_response.should be_ok
|
19
|
-
last_response.headers[
|
20
|
+
last_response.headers["Warning"].index('deprecated').should_not == nil
|
20
21
|
User.load(params[:attributes][:login]).login.should == params[:attributes][:login]
|
21
22
|
User.authenticate(params[:attributes][:login],
|
22
23
|
params[:attributes][:password]).login.should == params[:attributes][:login]
|
23
24
|
@a.users.members.sort.should == [@u.login, params[:attributes][:login]]
|
24
25
|
end
|
25
|
-
|
26
|
+
|
27
|
+
it "should not create user without the api_token" do
|
28
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
29
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {}
|
30
|
+
last_response.status.should == 422
|
31
|
+
User.is_exist?('testuser1').should == false
|
32
|
+
end
|
33
|
+
|
26
34
|
it "should not create user with empty login" do
|
27
35
|
params = {:attributes => {:login => '', :password => ''}}
|
28
36
|
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
@@ -30,4 +38,4 @@ describe "RhoconnectApiCreateUser" do
|
|
30
38
|
User.is_exist?('').should == false
|
31
39
|
end
|
32
40
|
end
|
33
|
-
end
|
41
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
2
|
|
3
3
|
describe "RhoconnectApiDeleteUser" do
|
4
|
-
it_should_behave_like "ApiHelper" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should delete user" do
|
6
6
|
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
7
7
|
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
@@ -16,19 +16,21 @@ describe "RhoconnectApiDeleteUser" do
|
|
16
16
|
s.read_state.refresh_time = time
|
17
17
|
s2 = Source.load('SampleAdapter', params3)
|
18
18
|
s2.read_state.refresh_time = time
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
19
|
+
Source.define_valid_doctypes([:doc1])
|
20
|
+
set_doc_state(s, :doc1 => {'4'=>@product4})
|
21
|
+
set_doc_state(s2, :doc1 => {'4'=>@product4})
|
22
|
+
verify_doc_result(s, :doc1 => {'4'=>@product4})
|
23
|
+
verify_doc_result(s2, :doc1 => {'4'=>@product4})
|
23
24
|
|
24
25
|
delete "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
25
26
|
last_response.should be_ok
|
26
|
-
|
27
|
-
|
27
|
+
verify_doc_result(s, :doc1 => {})
|
28
|
+
verify_doc_result(s2, :doc1 => {'4'=>@product4})
|
28
29
|
s.load_read_state.should == nil
|
29
30
|
s2.load_read_state.refresh_time.should == time
|
30
31
|
User.is_exist?(params[:attributes][:login]).should == false
|
31
32
|
App.load(test_app_name).users.members.should == ["testuser"]
|
33
|
+
Source.valid_doctypes.delete(:doc1)
|
32
34
|
end
|
33
35
|
|
34
36
|
it "should delete user and print deprecation warning with the old route" do
|
@@ -36,7 +38,7 @@ describe "RhoconnectApiDeleteUser" do
|
|
36
38
|
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
37
39
|
last_response.should be_ok
|
38
40
|
User.is_exist?(params[:attributes][:login]).should == true
|
39
|
-
|
41
|
+
|
40
42
|
#set up two users with data for the same source
|
41
43
|
params2 = {:app_id => APP_NAME,:user_id => 'testuser1'}
|
42
44
|
params3 = {:app_id => APP_NAME,:user_id => 'testuser'}
|
@@ -45,21 +47,21 @@ describe "RhoconnectApiDeleteUser" do
|
|
45
47
|
s.read_state.refresh_time = time
|
46
48
|
s2 = Source.load('SampleAdapter', params3)
|
47
49
|
s2.read_state.refresh_time = time
|
48
|
-
|
49
|
-
set_state(
|
50
|
-
|
51
|
-
verify_result(
|
52
|
-
|
53
|
-
|
54
|
-
post "/api/delete_user", {:user_id => params[:attributes][:login]}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
50
|
+
Source.define_valid_doctypes([:doc1])
|
51
|
+
set_state(s.docname(:doc1) => {'4'=>@product4})
|
52
|
+
set_state(s2.docname(:doc1) => {'4'=>@product4})
|
53
|
+
verify_result(s.docname(:doc1) => {'4'=>@product4})
|
54
|
+
verify_result(s2.docname(:doc1) => {'4'=>@product4})
|
55
|
+
post "/api/delete_user", {:api_token => @api_token, :user_id => params[:attributes][:login]}
|
55
56
|
last_response.should be_ok
|
56
57
|
last_response.headers['Warning'].index('deprecated').should_not == nil
|
57
|
-
verify_result(s.docname(:
|
58
|
-
verify_result(s2.docname(:
|
58
|
+
verify_result(s.docname(:doc1) => {})
|
59
|
+
verify_result(s2.docname(:doc1) => {'4'=>@product4})
|
59
60
|
s.load_read_state.should == nil
|
60
61
|
s2.load_read_state.refresh_time.should == time
|
61
62
|
User.is_exist?(params[:attributes][:login]).should == false
|
62
63
|
App.load(test_app_name).users.members.should == ["testuser"]
|
64
|
+
Source.valid_doctypes.delete(:doc1)
|
63
65
|
end
|
64
|
-
end
|
66
|
+
end
|
65
67
|
end
|
@@ -15,15 +15,14 @@ describe "RhoconnectApiListUsers" do
|
|
15
15
|
get "/rc/#{Rhoconnect::API_VERSION}/users", {}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
16
16
|
JSON.parse(last_response.body).should == []
|
17
17
|
end
|
18
|
-
|
19
|
-
it "should show the deprecation warning on /api/
|
20
|
-
params = {:
|
21
|
-
|
22
|
-
post "/rc/#{Rhoconnect::API_VERSION}/users", params
|
18
|
+
|
19
|
+
it "should show the deprecation warning on /api/list_users" do
|
20
|
+
params = {:attributes => {:login => 'testuser1', :password => 'testpass1'}}
|
21
|
+
post "/rc/#{Rhoconnect::API_VERSION}/users", params, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
23
22
|
last_response.should be_ok
|
24
23
|
post "/api/list_users", {:api_token => @api_token}
|
25
24
|
JSON.parse(last_response.body).sort.should == ["testuser", "testuser1"].sort
|
26
25
|
last_response.headers['Warning'].index('deprecated').should_not == nil
|
27
26
|
end
|
28
|
-
end
|
27
|
+
end
|
29
28
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__),'..','api_helper')
|
2
2
|
|
3
3
|
describe "RhoconnectApiUpdateUser" do
|
4
|
-
it_should_behave_like "ApiHelper" do
|
4
|
+
it_should_behave_like "ApiHelper" do
|
5
5
|
it "should update user successfully" do
|
6
6
|
login = 'rhoadmin'
|
7
7
|
put "/rc/#{Rhoconnect::API_VERSION}/users/#{login}", {:attributes => {:new_password => '123'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
@@ -13,8 +13,8 @@ describe "RhoconnectApiUpdateUser" do
|
|
13
13
|
|
14
14
|
it "should update user successfully with old route and print deprecation warning" do
|
15
15
|
login = 'rhoadmin'
|
16
|
-
post "/api/update_user", {:user_id => login,
|
17
|
-
:attributes => {:new_password => '123'}}
|
16
|
+
post "/api/update_user", {:api_token => @api_token, :user_id => login,
|
17
|
+
:attributes => {:new_password => '123'}}
|
18
18
|
last_response.should be_ok
|
19
19
|
user = User.authenticate('rhoadmin','123')
|
20
20
|
user.login.should == 'rhoadmin'
|
@@ -38,7 +38,8 @@ describe "RhoconnectApiUpdateUser" do
|
|
38
38
|
last_response.should be_ok
|
39
39
|
User.is_exist?(params[:attributes][:login]).should == true
|
40
40
|
|
41
|
-
put "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}",
|
41
|
+
put "/rc/#{Rhoconnect::API_VERSION}/users/#{params[:attributes][:login]}",
|
42
|
+
{:attributes => {:new_password => '123', :login => 'someotheruser1'}}, {Rhoconnect::API_TOKEN_HEADER => @api_token}
|
42
43
|
last_response.should be_ok
|
43
44
|
user = User.authenticate('testuser1','123')
|
44
45
|
user.login.should == 'testuser1'
|
@@ -1 +1,16 @@
|
|
1
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rhoconnect/application/init'
|
3
|
+
|
4
|
+
# secret is generated along with the app
|
5
|
+
Rhoconnect::Server.set :secret, 'not a secret'
|
6
|
+
|
7
|
+
# !!! Add your custom initializers and overrides here !!!
|
8
|
+
# For example, uncomment the following line to enable Stats
|
9
|
+
#Rhoconnect::Server.enable :stats
|
10
|
+
# uncomment the following line to disable Resque Front-end console
|
11
|
+
#Rhoconnect.disable_resque_console = true
|
12
|
+
# uncomment the following line to disable Rhoconnect Front-end console
|
13
|
+
#Rhoconnect.disable_rc_console = true
|
14
|
+
|
15
|
+
# run RhoConnect Application
|
16
|
+
run Rhoconnect.app
|
@@ -0,0 +1,23 @@
|
|
1
|
+
var JsSample = require('../../models/js/js_sample');
|
2
|
+
var app = require('ballroom');
|
3
|
+
var rc_helpers = require('rhoconnect_helpers');
|
4
|
+
|
5
|
+
app.controllerName('JsSample');
|
6
|
+
app.registerHandler('sync');
|
7
|
+
|
8
|
+
app.get('/custom_route',{}, function(req,resp){
|
9
|
+
JsSample.getUser(resp);
|
10
|
+
});
|
11
|
+
|
12
|
+
app.get('/custom_route2',{}, function(req,resp){
|
13
|
+
JsSample.getSource(resp);
|
14
|
+
});
|
15
|
+
|
16
|
+
app.get('/custom_route3',{}, function(req,resp){
|
17
|
+
JsSample.get_stash_result(resp);
|
18
|
+
});
|
19
|
+
|
20
|
+
app.post('/',{"rc_handler":"query"}, function(req,resp){
|
21
|
+
var result = {'id':req.params};
|
22
|
+
resp.send(result);
|
23
|
+
});
|
@@ -0,0 +1,32 @@
|
|
1
|
+
var app = require('ballroom');
|
2
|
+
var rc_helpers = require('rhoconnect_helpers');
|
3
|
+
|
4
|
+
app.controllerName('Sample2');
|
5
|
+
app.defaults({admin_required:false,login_required:true,source_required:true,client_required:true});
|
6
|
+
|
7
|
+
app.get('/',{"rc_handler":"query"}, function(req,resp){
|
8
|
+
var result = {'1':{'name':'iPhone'}};
|
9
|
+
resp.send(result);
|
10
|
+
});
|
11
|
+
|
12
|
+
app.get('/error_throw',{},function(req,resp){
|
13
|
+
throw "Error in function";
|
14
|
+
});
|
15
|
+
|
16
|
+
//json['args'] = {:product => {:name=>foo,:price=>bar}}
|
17
|
+
app.post('/',{}, function(req,resp){
|
18
|
+
var result = {'id':req.params};
|
19
|
+
resp.send(result);
|
20
|
+
});
|
21
|
+
|
22
|
+
//json['args'] = {:id=>1,:product => {:name=>foo,:price=>bar}}
|
23
|
+
app.put('/:id',{}, function(req,resp){
|
24
|
+
var result = {'id':req.params};
|
25
|
+
resp.send(result);
|
26
|
+
});
|
27
|
+
|
28
|
+
//json['args'] = {:id => 2}
|
29
|
+
app.del('/:id',{}, function(req,resp){
|
30
|
+
var result = {'id':req.params};
|
31
|
+
resp.send(result);
|
32
|
+
});
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class ApplicationController < Rhoconnect::Controller::AppBase
|
2
|
+
register Rhoconnect::EndPoint
|
3
|
+
|
4
|
+
post '/login', :rc_handler => :authenticate,
|
5
|
+
:deprecated_route => {:verb => :post, :url => ['/application/clientlogin', '/api/application/clientlogin']} do
|
6
|
+
username = params[:login]
|
7
|
+
password = params[:password]
|
8
|
+
session[:auth] = "delegated"
|
9
|
+
raise RuntimeError.new('server error') if password == 'server error'
|
10
|
+
raise LoginException.new('login exception') if password == 'wrongpass'
|
11
|
+
return "different" if password == "diffuser"
|
12
|
+
password == 'wrongpassnomsg' ? false : true
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/rps_login', :rc_handler => :rps_authenticate,
|
16
|
+
:login_required => true do
|
17
|
+
username = params[:login]
|
18
|
+
password = params[:password]
|
19
|
+
'rpsuser:secret' == [username,password].join(':')
|
20
|
+
end
|
21
|
+
end
|