rhoconnect 3.2.0.beta1 → 3.2.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +33 -7
- data/README.md +4 -0
- data/Rakefile +13 -11
- data/commands/commands/rhoconnect/create_user.rb +1 -1
- data/commands/commands/rhoconnect/delete_device.rb +1 -1
- data/commands/commands/rhoconnect/delete_user.rb +1 -1
- data/commands/commands/rhoconnect/get_token.rb +1 -1
- data/commands/commands/rhoconnect/reset.rb +1 -1
- data/commands/execute.rb +0 -1
- data/doc/bulk-sync.txt +35 -1
- data/doc/install.txt +7 -3
- data/examples/simple/config.ru +1 -1
- data/generators/templates/application/Gemfile +1 -1
- data/install.sh +4 -4
- data/installer/unix-like/create_texts.rb +31 -31
- data/installer/unix-like/pre_uninstall.sh +2 -3
- data/installer/unix-like/rho_connect_install_constants.rb +3 -3
- data/installer/unix-like/rho_connect_install_debian.rb +0 -5
- data/installer/unix-like/rho_connect_install_yum.rb +1 -3
- data/installer/utils/constants.rb +4 -4
- data/installer/utils/nix_install_test.rb +20 -20
- data/installer/utils/package_upload/repos.rake +2 -2
- data/installer/utils/package_upload/s3_single_file.rb +57 -0
- data/lib/rhoconnect/client_sync.rb +1 -1
- data/lib/rhoconnect/jobs/bulk_data_job.rb +30 -32
- data/lib/rhoconnect/jobs/ping_job.rb +15 -2
- data/lib/rhoconnect/server.rb +3 -0
- data/lib/rhoconnect/tasks.rb +5 -7
- data/lib/rhoconnect/user.rb +1 -0
- data/lib/rhoconnect/version.rb +1 -1
- data/lib/rhoconnect/web-console/models/adapter.js +2 -0
- data/lib/rhoconnect/web-console/models/client.js +0 -22
- data/lib/rhoconnect/web-console/models/source.js +1 -1
- data/lib/rhoconnect/web-console/templates/index.erb +2 -1
- data/lib/rhoconnect/web-console/views/home.js +22 -1
- data/lib/rhoconnect/web-console/views/set_adapter.js +5 -6
- data/rhoconnect.gemspec +2 -1
- data/spec/api/source/fast_insert_spec.rb +1 -1
- data/spec/api/user/create_user_spec.rb +11 -1
- data/spec/client_sync_spec.rb +32 -25
- data/spec/javascripts/admins_routes_spec.js +108 -103
- data/spec/javascripts/doc_view_spec.js +2 -3
- data/spec/javascripts/edit_user_view_spec.js +1 -1
- data/spec/javascripts/home_view_spec.js +6 -6
- data/spec/javascripts/server_doc_view_spec.js +4 -0
- data/spec/javascripts/session_spec.js +15 -0
- data/spec/javascripts/set_adapter_view_spec.js +2 -6
- data/spec/javascripts/show_device_view_spec.js +4 -1
- data/spec/javascripts/show_user_view_spec.js +4 -0
- data/spec/javascripts/source_docs_view_spec.js +2 -2
- data/spec/jobs/bulk_data_job_spec.rb +8 -12
- data/spec/jobs/ping_job_spec.rb +21 -0
- data/spec/perf/bulk_data_perf_spec.rb +1 -2
- data/spec/server/server_spec.rb +2 -4
- data/spec/spec_helper.rb +13 -3
- data/tasks/jasmine.rake +7 -0
- metadata +24 -7
- data/lib/rhoconnect/console/rhoconnect_api.rb +0 -245
- data/spec/api/application/rhoconnect_api_spec.rb +0 -592
data/spec/client_sync_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe "ClientSync" do
|
|
6
6
|
lambda { ClientSync.new(@s,nil,2) }.should raise_error(ArgumentError,'Unknown client')
|
7
7
|
end
|
8
8
|
|
9
|
-
it "should handle receive cud for
|
9
|
+
it "should handle receive cud for dynamic adapter" do
|
10
10
|
params = {'create'=>{'1'=>@product1}}
|
11
11
|
@c.source_name = 'Product2'
|
12
12
|
@cs1 = ClientSync.new(@s2,@c,2)
|
@@ -48,27 +48,39 @@ describe "ClientSync" do
|
|
48
48
|
it "should handle receive cud" do
|
49
49
|
params = {'create'=>{'1'=>@product1},'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
|
50
50
|
@cs.receive_cud(params)
|
51
|
-
|
52
|
-
@
|
53
|
-
@
|
51
|
+
verify_zresult(@s.docname(:create) => [],
|
52
|
+
@s.docname(:update) => [],
|
53
|
+
@s.docname(:delete) => [])
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should handle receive cud that triggers processing of the previously queued data" do
|
57
|
+
queued_create_data = {'1'=>@product1}
|
58
|
+
set_zstate({@s.docname(:create) => queued_create_data}, @c.id)
|
59
|
+
verify_zresult(@s.docname(:create) => [queued_create_data],
|
60
|
+
@cs.client.docname(:update) => [],
|
61
|
+
@cs.client.docname(:delete) => [])
|
62
|
+
@cs.receive_cud({:source_name => @s_fields[:name]})
|
63
|
+
verify_zresult(@s.docname(:create) => [],
|
64
|
+
@s.docname(:update) => [],
|
65
|
+
@s.docname(:delete) => [])
|
54
66
|
end
|
55
67
|
|
56
68
|
it "should handle receive cud with pass through" do
|
57
69
|
params = {'create'=>{'1'=>@product1},'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
|
58
70
|
@s.pass_through = 'true'
|
59
71
|
@cs.receive_cud(params)
|
60
|
-
|
61
|
-
@
|
62
|
-
@
|
72
|
+
verify_zresult(@s.docname(:create) => [],
|
73
|
+
@s.docname(:update) => [],
|
74
|
+
@s.docname(:delete) => [])
|
63
75
|
end
|
64
76
|
|
65
77
|
it "should handle exeptions in receive cud with pass through" do
|
66
78
|
params = {'create'=>{'1'=>@error},'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
|
67
79
|
@s.pass_through = 'true'
|
68
80
|
@cs.receive_cud(params)
|
69
|
-
|
70
|
-
@
|
71
|
-
@
|
81
|
+
verify_zresult(@s.docname(:create) => [],
|
82
|
+
@s.docname(:update) => [],
|
83
|
+
@s.docname(:delete) => [])
|
72
84
|
end
|
73
85
|
|
74
86
|
it "should handle send cud" do
|
@@ -225,9 +237,10 @@ describe "ClientSync" do
|
|
225
237
|
params = {'create'=>{'1'=>@product1},
|
226
238
|
'update'=>{'2'=>@product2},'delete'=>{'3'=>@product3}}
|
227
239
|
@cs.receive_cud(params)
|
228
|
-
|
229
|
-
@
|
230
|
-
@
|
240
|
+
verify_zresult(@s.docname(:create) => [],
|
241
|
+
@s.docname(:update) => [],
|
242
|
+
@s.docname(:delete) => [])
|
243
|
+
verify_result(
|
231
244
|
@s.docname(:md) => {},
|
232
245
|
@c.docname(:cd) => {})
|
233
246
|
end
|
@@ -698,8 +711,7 @@ describe "ClientSync" do
|
|
698
711
|
it "should return bulk data url for completed bulk data user partition" do
|
699
712
|
set_state('test_db_storage' => @data)
|
700
713
|
ClientSync.bulk_data(:user,@c)
|
701
|
-
|
702
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,@u.id))
|
714
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
|
703
715
|
ClientSync.bulk_data(:user,@c).should == {:result => :url,
|
704
716
|
:url => BulkData.load(bulk_data_docname(@a.id,@u.id)).url}
|
705
717
|
verify_result(
|
@@ -710,8 +722,7 @@ describe "ClientSync" do
|
|
710
722
|
|
711
723
|
it "should return empty bulk data url if there are errors in query" do
|
712
724
|
ClientSync.bulk_data(:user,@c)
|
713
|
-
|
714
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,@u.id))
|
725
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
|
715
726
|
errordoc = @s.docname(:errors) # source SampleAdapter
|
716
727
|
operation = 'query'
|
717
728
|
Store.lock(errordoc) do
|
@@ -727,8 +738,7 @@ describe "ClientSync" do
|
|
727
738
|
:app_id => @a.id,
|
728
739
|
:user_id => name,
|
729
740
|
:sources => [@s_fields[:name]])
|
730
|
-
|
731
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,name))
|
741
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,name))
|
732
742
|
data = BulkData.load(bulk_data_docname(@a.id,name))
|
733
743
|
data.url.should match /a%20b/
|
734
744
|
data.delete
|
@@ -738,8 +748,7 @@ describe "ClientSync" do
|
|
738
748
|
set_state('test_db_storage' => @data)
|
739
749
|
@s.partition = :app
|
740
750
|
ClientSync.bulk_data(:app,@c)
|
741
|
-
|
742
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,"*"))
|
751
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,"*"))
|
743
752
|
ClientSync.bulk_data(:app,@c).should == {:result => :url,
|
744
753
|
:url => BulkData.load(bulk_data_docname(@a.id,"*")).url}
|
745
754
|
verify_result(
|
@@ -752,8 +761,7 @@ describe "ClientSync" do
|
|
752
761
|
set_state('test_db_storage' => @data)
|
753
762
|
@s.sync_type = :bulk_sync_only
|
754
763
|
ClientSync.bulk_data(:user,@c)
|
755
|
-
|
756
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,@u.id))
|
764
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
|
757
765
|
ClientSync.bulk_data(:user,@c).should == {:result => :url,
|
758
766
|
:url => BulkData.load(bulk_data_docname(@a.id,@u.id)).url}
|
759
767
|
verify_result(
|
@@ -766,8 +774,7 @@ describe "ClientSync" do
|
|
766
774
|
set_state('test_db_storage' => @data)
|
767
775
|
Rhoconnect.blackberry_bulk_sync = true
|
768
776
|
ClientSync.bulk_data(:user,@c)
|
769
|
-
|
770
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,@u.id))
|
777
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
|
771
778
|
data = BulkData.load(bulk_data_docname(@a.id,@u.id))
|
772
779
|
ClientSync.bulk_data(:user,@c).should == {:result => :url, :url => data.url}
|
773
780
|
File.delete(data.dbfile)
|
@@ -2,116 +2,121 @@ describe("Admins routes", function() {
|
|
2
2
|
beforeEach(function() {
|
3
3
|
this.router = new App.Controllers.Admins();
|
4
4
|
this.routeSpy = sinon.spy();
|
5
|
+
sinon.stub(jQuery,'ajax')
|
5
6
|
try {
|
6
7
|
Backbone.History.start({silent:true, pushState:true});
|
7
8
|
} catch(e) {}
|
8
9
|
this.router.navigate("test");
|
9
10
|
});
|
11
|
+
|
12
|
+
afterEach(function(){
|
13
|
+
jQuery.ajax.restore();
|
14
|
+
});
|
10
15
|
|
11
16
|
it("fires the index route with a blank hash", function() {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
this.router.bind("route:index", this.routeSpy);
|
18
|
+
this.router.navigate("", true);
|
19
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
20
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
21
|
+
});
|
22
|
+
|
23
|
+
it("fires the home route with a blank hash", function() {
|
24
|
+
this.router.bind("route:index", this.routeSpy);
|
25
|
+
this.router.navigate("home", true);
|
26
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
27
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
28
|
+
});
|
29
|
+
|
30
|
+
it("fires the show_source route", function() {
|
31
|
+
this.router.bind('route:show_source', this.routeSpy);
|
32
|
+
this.router.navigate("sources/1/tuser/tdoc/tclient", true);
|
33
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
34
|
+
expect(this.routeSpy).toHaveBeenCalledWith("1","tuser","tdoc","tclient");
|
35
|
+
});
|
17
36
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
it("fires the user_device route", function() {
|
103
|
-
this.router.bind('route:user_device', this.routeSpy);
|
104
|
-
this.router.navigate("device/1/2", true);
|
105
|
-
expect(this.routeSpy).toHaveBeenCalledOnce();
|
106
|
-
expect(this.routeSpy).toHaveBeenCalledWith("1","2");
|
107
|
-
});
|
108
|
-
|
109
|
-
it("fires the change_admin route", function() {
|
110
|
-
this.router.bind('route:change_admin', this.routeSpy);
|
111
|
-
this.router.navigate("change_admin", true);
|
112
|
-
expect(this.routeSpy).toHaveBeenCalledOnce();
|
113
|
-
expect(this.routeSpy).toHaveBeenCalledWith();
|
114
|
-
});
|
115
|
-
|
37
|
+
it("fires the login route", function() {
|
38
|
+
this.router.bind('route:login', this.routeSpy);
|
39
|
+
this.router.navigate("login", true);
|
40
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
41
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
42
|
+
});
|
43
|
+
|
44
|
+
it("fires the logout route", function() {
|
45
|
+
this.router.bind('route:logout', this.routeSpy);
|
46
|
+
this.router.navigate("logout", true);
|
47
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
48
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
49
|
+
});
|
50
|
+
|
51
|
+
it("fires the get_doc route", function() {
|
52
|
+
this.router.bind('route:get_doc', this.routeSpy);
|
53
|
+
this.router.navigate("doc/testdoc/2", true);
|
54
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
55
|
+
expect(this.routeSpy).toHaveBeenCalledWith("testdoc","2");
|
56
|
+
});
|
57
|
+
|
58
|
+
it("fires the server_doc route", function() {
|
59
|
+
this.router.bind('route:server_doc', this.routeSpy);
|
60
|
+
this.router.navigate("docselect", true);
|
61
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
62
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
63
|
+
});
|
64
|
+
|
65
|
+
it("fires the adapter route", function() {
|
66
|
+
this.router.bind('route:adapter', this.routeSpy);
|
67
|
+
this.router.navigate("adapter", true);
|
68
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
69
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
70
|
+
});
|
71
|
+
|
72
|
+
it("fires the users route", function() {
|
73
|
+
this.router.bind('route:users', this.routeSpy);
|
74
|
+
this.router.navigate("users", true);
|
75
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
76
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
77
|
+
});
|
78
|
+
|
79
|
+
it("fires the new_user route", function() {
|
80
|
+
this.router.bind('route:new_user', this.routeSpy);
|
81
|
+
this.router.navigate("users/new", true);
|
82
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
83
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
84
|
+
});
|
85
|
+
|
86
|
+
it("fires the show_user route", function() {
|
87
|
+
this.router.bind('route:show_user', this.routeSpy);
|
88
|
+
this.router.navigate("user/1", true);
|
89
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
90
|
+
expect(this.routeSpy).toHaveBeenCalledWith("1");
|
91
|
+
});
|
92
|
+
|
93
|
+
it("fires the new_ping route", function() {
|
94
|
+
this.router.bind('route:new_ping', this.routeSpy);
|
95
|
+
this.router.navigate("user/newping/1", true);
|
96
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
97
|
+
expect(this.routeSpy).toHaveBeenCalledWith("1");
|
98
|
+
});
|
99
|
+
|
100
|
+
it("fires the new_ping_all route", function() {
|
101
|
+
this.router.bind('route:new_ping_all', this.routeSpy);
|
102
|
+
this.router.navigate("users/newping", true);
|
103
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
104
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
105
|
+
});
|
106
|
+
|
107
|
+
it("fires the user_device route", function() {
|
108
|
+
this.router.bind('route:user_device', this.routeSpy);
|
109
|
+
this.router.navigate("device/1/2", true);
|
110
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
111
|
+
expect(this.routeSpy).toHaveBeenCalledWith("1","2");
|
112
|
+
});
|
113
|
+
|
114
|
+
it("fires the change_admin route", function() {
|
115
|
+
this.router.bind('route:change_admin', this.routeSpy);
|
116
|
+
this.router.navigate("change_admin", true);
|
117
|
+
expect(this.routeSpy).toHaveBeenCalledOnce();
|
118
|
+
expect(this.routeSpy).toHaveBeenCalledWith();
|
119
|
+
});
|
120
|
+
|
116
121
|
});
|
117
122
|
|
@@ -27,11 +27,10 @@ describe("DocView", function(){
|
|
27
27
|
});
|
28
28
|
|
29
29
|
it("should have correct html rendered ",function(){
|
30
|
-
var title = this.docView.el.innerHTML.search('
|
30
|
+
var title = this.docView.el.innerHTML.search('testkey');
|
31
31
|
expect(title).toBeGreaterThan(0);
|
32
32
|
|
33
|
-
var change_btn = this.docView.el.innerHTML.search('Upload
|
33
|
+
var change_btn = this.docView.el.innerHTML.search('Upload token string');
|
34
34
|
expect(change_btn).toBeGreaterThan(0);
|
35
|
-
|
36
35
|
})
|
37
36
|
});
|
@@ -34,7 +34,7 @@ describe("EditUserView", function(){
|
|
34
34
|
});
|
35
35
|
|
36
36
|
it("should have correct html rendered ",function(){
|
37
|
-
var title = this.editUserView.el.innerHTML.search('
|
37
|
+
var title = this.editUserView.el.innerHTML.search('Change Admin Password');
|
38
38
|
expect(title).toBeGreaterThan(0);
|
39
39
|
|
40
40
|
var password = this.editUserView.el.innerHTML.search('Password');
|
@@ -8,7 +8,9 @@ describe("Home", function(){
|
|
8
8
|
|
9
9
|
sinon.stub(source,'fetch')
|
10
10
|
sinon.stub(source,'save');
|
11
|
-
|
11
|
+
confirmStub = sinon.stub(window, 'confirm');
|
12
|
+
confirmStub.returns(true);
|
13
|
+
|
12
14
|
this.homeView = new App.Views.Home({model : source});
|
13
15
|
});
|
14
16
|
|
@@ -16,6 +18,7 @@ describe("Home", function(){
|
|
16
18
|
var session = new Session();
|
17
19
|
session.setAuthenticated('false');
|
18
20
|
session.setApiKey(null);
|
21
|
+
confirmStub.restore();
|
19
22
|
});
|
20
23
|
|
21
24
|
it("should have render initial html",function(){
|
@@ -26,13 +29,10 @@ describe("Home", function(){
|
|
26
29
|
});
|
27
30
|
|
28
31
|
it("should have correct html rendered ",function(){
|
29
|
-
var
|
30
|
-
expect(title).toBeGreaterThan(0);
|
31
|
-
|
32
|
-
var change_btn = this.homeView.el.innerHTML.search('Change Admin Password');
|
32
|
+
var change_btn = this.homeView.el.innerHTML.search('App partition sources');
|
33
33
|
expect(change_btn).toBeGreaterThan(0);
|
34
34
|
|
35
|
-
var reset = this.homeView.el.innerHTML.search('
|
35
|
+
var reset = this.homeView.el.innerHTML.search('Sync Server URL');
|
36
36
|
expect(reset).toBeGreaterThan(0);
|
37
37
|
|
38
38
|
})
|
@@ -28,6 +28,10 @@ describe("ServerDocView", function(){
|
|
28
28
|
it("should clear doc",function(){
|
29
29
|
this.serverDocClearSpy = sinon.spy(this.serverDocView,'clear');
|
30
30
|
doc.set('dbkey','testdbkey');
|
31
|
+
function myevent(){
|
32
|
+
this.preventDefault=function(){return true;}
|
33
|
+
}
|
34
|
+
e = new myevent();
|
31
35
|
this.serverDocView.clear(e);
|
32
36
|
expect(this.serverDocClearSpy).toHaveBeenCalledOnce();
|
33
37
|
});
|
@@ -0,0 +1,15 @@
|
|
1
|
+
describe("Session", function(){
|
2
|
+
beforeEach(function(){
|
3
|
+
this.session = new Session;
|
4
|
+
});
|
5
|
+
|
6
|
+
it("should have set session key",function(){
|
7
|
+
this.session.setApiKey("testkey")
|
8
|
+
expect(this.session.getApiKey()).toEqual('testkey')
|
9
|
+
});
|
10
|
+
|
11
|
+
it("should have set authentication",function(){
|
12
|
+
this.session.setAuthenticated("true")
|
13
|
+
expect(this.session.getAuthenticated()).toEqual('true')
|
14
|
+
});
|
15
|
+
})
|
@@ -5,9 +5,9 @@ describe("SetAdapterView", function(){
|
|
5
5
|
session.setAuthenticated('true');
|
6
6
|
session.setApiKey('testtoken');
|
7
7
|
adapter = new Adapter();
|
8
|
-
|
8
|
+
|
9
9
|
sinon.stub(jQuery,'ajax')
|
10
|
-
|
10
|
+
var domain = 'http://test.com'
|
11
11
|
this.setAdapterView = new App.Views.SetAdapter({model : adapter});
|
12
12
|
});
|
13
13
|
|
@@ -25,8 +25,4 @@ describe("SetAdapterView", function(){
|
|
25
25
|
expect(this.setAdapterSpy).toHaveBeenCalledOnce();
|
26
26
|
});
|
27
27
|
|
28
|
-
it("should have correct html rendered ",function(){
|
29
|
-
var title = this.setAdapterView.el.innerHTML.search('Set Backend App URL');
|
30
|
-
expect(title).toBeGreaterThan(0);
|
31
|
-
})
|
32
28
|
});
|
@@ -9,7 +9,9 @@ describe("ShowDeviceView", function(){
|
|
9
9
|
client.set('user_id', 'user_id');
|
10
10
|
|
11
11
|
sinon.stub(jQuery,'ajax')
|
12
|
-
|
12
|
+
confirmStub = sinon.stub(window, 'confirm');
|
13
|
+
confirmStub.returns(true);
|
14
|
+
|
13
15
|
this.setdeviceView = new App.Views.ShowDevice({model : client});
|
14
16
|
});
|
15
17
|
|
@@ -18,6 +20,7 @@ describe("ShowDeviceView", function(){
|
|
18
20
|
session.setAuthenticated('false');
|
19
21
|
session.setApiKey(null);
|
20
22
|
jQuery.ajax.restore();
|
23
|
+
confirmStub.restore();
|
21
24
|
});
|
22
25
|
|
23
26
|
it("should have render initial html",function(){
|
@@ -11,6 +11,9 @@ describe("ShowUserView", function(){
|
|
11
11
|
sinon.stub(jQuery,'ajax')
|
12
12
|
sinon.stub(source,'fetch')
|
13
13
|
|
14
|
+
confirmStub = sinon.stub(window, 'confirm');
|
15
|
+
confirmStub.returns(true);
|
16
|
+
|
14
17
|
this.showUserView = new App.Views.ShowUser({model : user});
|
15
18
|
});
|
16
19
|
|
@@ -19,6 +22,7 @@ describe("ShowUserView", function(){
|
|
19
22
|
session.setAuthenticated('false');
|
20
23
|
session.setApiKey(null);
|
21
24
|
jQuery.ajax.restore();
|
25
|
+
confirmStub.restore();
|
22
26
|
});
|
23
27
|
|
24
28
|
it("should have render initial html",function(){
|
@@ -27,10 +27,10 @@ describe("SourceDocsView", function(){
|
|
27
27
|
});
|
28
28
|
|
29
29
|
it("should have correct html rendered ",function(){
|
30
|
-
var title = this.sourceDocsView.el.innerHTML.search("
|
30
|
+
var title = this.sourceDocsView.el.innerHTML.search("Attributes");
|
31
31
|
expect(title).toBeGreaterThan(0);
|
32
32
|
|
33
|
-
var title2 = this.sourceDocsView.el.innerHTML.search("Documents
|
33
|
+
var title2 = this.sourceDocsView.el.innerHTML.search("Documents");
|
34
34
|
expect(title2).toBeGreaterThan(0);
|
35
35
|
})
|
36
36
|
});
|
@@ -23,8 +23,7 @@ describe "BulkDataJob" do
|
|
23
23
|
:app_id => @a.id,
|
24
24
|
:user_id => @u.id,
|
25
25
|
:sources => [@s_fields[:name], 'FixedSchemaAdapter'])
|
26
|
-
|
27
|
-
BulkDataJob.after_perform_x("data_name" => data.name)
|
26
|
+
do_bulk_data_job("data_name" => data.name)
|
28
27
|
data = BulkData.load(docname)
|
29
28
|
data.completed?.should == true
|
30
29
|
verify_result(@s.docname(:md) => @data,@s.docname(:md_copy) => @data)
|
@@ -51,8 +50,7 @@ describe "BulkDataJob" do
|
|
51
50
|
:app_id => @a.id,
|
52
51
|
:user_id => @u.id,
|
53
52
|
:sources => [@s_fields[:name]])
|
54
|
-
|
55
|
-
BulkDataJob.after_perform_x("data_name" => data.name)
|
53
|
+
do_bulk_data_job("data_name" => data.name)
|
56
54
|
data = BulkData.load(docname)
|
57
55
|
data.completed?.should == true
|
58
56
|
verify_result(@s.docname(:md) => @data,@s.docname(:md_copy) => @data)
|
@@ -70,8 +68,7 @@ describe "BulkDataJob" do
|
|
70
68
|
:app_id => @a.id,
|
71
69
|
:user_id => @u.id,
|
72
70
|
:sources => [@s_fields[:name]])
|
73
|
-
|
74
|
-
BulkDataJob.after_perform_x("data_name" => data.name)
|
71
|
+
do_bulk_data_job("data_name" => data.name)
|
75
72
|
data = BulkData.load(docname)
|
76
73
|
data.completed?.should == true
|
77
74
|
verify_result(@s.docname(:md) => @data,
|
@@ -90,8 +87,7 @@ describe "BulkDataJob" do
|
|
90
87
|
:app_id => @a.id,
|
91
88
|
:user_id => @u.id,
|
92
89
|
:sources => [@s_fields[:name]])
|
93
|
-
|
94
|
-
BulkDataJob.after_perform_x("data_name" => data.name)
|
90
|
+
do_bulk_data_job("data_name" => data.name)
|
95
91
|
data = BulkData.load(docname)
|
96
92
|
data.completed?.should == true
|
97
93
|
verify_result(@s.docname(:md) => @data, @s.docname(:md_copy) => @data)
|
@@ -112,8 +108,8 @@ describe "BulkDataJob" do
|
|
112
108
|
|
113
109
|
it "should delete bulk data if exception is raised" do
|
114
110
|
lambda {
|
115
|
-
|
116
|
-
|
111
|
+
do_bulk_data_job("data_name" => 'broken')
|
112
|
+
}.should raise_error(Exception)
|
117
113
|
Store.db.keys('bulk_data*').should == []
|
118
114
|
end
|
119
115
|
|
@@ -124,8 +120,8 @@ describe "BulkDataJob" do
|
|
124
120
|
:user_id => @u.id,
|
125
121
|
:sources => [@s_fields[:name]])
|
126
122
|
lambda {
|
127
|
-
|
128
|
-
|
123
|
+
do_bulk_data_job("data_name" => data.name)
|
124
|
+
}.should raise_error(Exception)
|
129
125
|
Store.db.keys('bulk_data*').should == []
|
130
126
|
end
|
131
127
|
end
|
data/spec/jobs/ping_job_spec.rb
CHANGED
@@ -154,5 +154,26 @@ describe "PingJob" do
|
|
154
154
|
PingJob.should_receive(:log).once.with(/Dropping ping request for client/)
|
155
155
|
lambda { PingJob.perform(params) }.should_not raise_error
|
156
156
|
end
|
157
|
+
|
158
|
+
it "should process all pings even if some of them are failing" do
|
159
|
+
params = {"user_id" => [ @u.id, @u1.id], "api_token" => @api_token,
|
160
|
+
"sources" => [@s.name], "message" => 'hello world',
|
161
|
+
"vibrate" => '5', "badge" => '5', "sound" => 'hello.mp3', 'phone_id' => nil }
|
162
|
+
@c.phone_id = '3'
|
163
|
+
|
164
|
+
scrubbed_params = params.dup
|
165
|
+
scrubbed_params['vibrate'] = '5'
|
166
|
+
@c1.device_type = 'blackberry'
|
167
|
+
|
168
|
+
Apple.should_receive(:ping).with(params.merge!({'device_pin' => @c.device_pin, 'phone_id' => @c.phone_id, 'device_port' => @c.device_port})).and_return { raise SocketError.new("Socket failure") }
|
169
|
+
Blackberry.should_receive(:ping).with({'device_pin' => @c1.device_pin, 'device_port' => @c1.device_port}.merge!(scrubbed_params))
|
170
|
+
exception_raised = false
|
171
|
+
begin
|
172
|
+
PingJob.perform(params)
|
173
|
+
rescue Exception => e
|
174
|
+
exception_raised = true
|
175
|
+
end
|
176
|
+
exception_raised.should == true
|
177
|
+
end
|
157
178
|
end
|
158
179
|
end
|
@@ -24,8 +24,7 @@ describe "BulkData Performance" do
|
|
24
24
|
:app_id => @a.id,
|
25
25
|
:user_id => @u.id,
|
26
26
|
:sources => [@s_fields[:name]])
|
27
|
-
|
28
|
-
BulkDataJob.after_perform_x("data_name" => data.name)
|
27
|
+
do_bulk_data_job("data_name" => data.name)
|
29
28
|
lap_timer('BulkDataJob.perform duration',start)
|
30
29
|
end
|
31
30
|
end
|
data/spec/server/server_spec.rb
CHANGED
@@ -426,8 +426,7 @@ describe "Server" do
|
|
426
426
|
it "should receive url when bulk data is available" do
|
427
427
|
set_state('test_db_storage' => @data)
|
428
428
|
get "/api/application/bulk_data", :partition => :user, :client_id => @c.id
|
429
|
-
|
430
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,@u.id))
|
429
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
|
431
430
|
get "/api/application/bulk_data", :partition => :user, :client_id => @c.id
|
432
431
|
last_response.should be_ok
|
433
432
|
data = BulkData.load(bulk_data_docname(@a.id,@u.id))
|
@@ -439,8 +438,7 @@ describe "Server" do
|
|
439
438
|
it "should download bulk data file" do
|
440
439
|
set_state('test_db_storage' => @data)
|
441
440
|
get "/api/application/bulk_data", :partition => :user, :client_id => @c.id
|
442
|
-
|
443
|
-
BulkDataJob.after_perform_x("data_name" => bulk_data_docname(@a.id,@u.id))
|
441
|
+
do_bulk_data_job("data_name" => bulk_data_docname(@a.id,@u.id))
|
444
442
|
get "/api/application/bulk_data", :partition => :user, :client_id => @c.id
|
445
443
|
get JSON.parse(last_response.body)["url"]
|
446
444
|
last_response.should be_ok
|