ixtlan-remote 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. data/Gemfile +2 -0
  2. data/README.md +64 -0
  3. data/agpl-3.0.txt +661 -0
  4. data/lib/ixtlan-remote.rb +23 -0
  5. data/lib/ixtlan/passwords.rb +52 -0
  6. data/lib/ixtlan/passwords.rb~ +47 -0
  7. data/lib/ixtlan/railtie.rb~ +17 -0
  8. data/lib/ixtlan/remote.rb +23 -0
  9. data/lib/ixtlan/remote/access_controller.rb +62 -0
  10. data/lib/ixtlan/remote/access_controller.rb~ +25 -0
  11. data/lib/ixtlan/remote/constant_time_compare.rb +39 -0
  12. data/lib/ixtlan/remote/constant_time_compare.rb~ +19 -0
  13. data/lib/ixtlan/remote/heartbeat.rb~ +80 -0
  14. data/lib/ixtlan/remote/model_conversion.rb~ +245 -0
  15. data/lib/ixtlan/remote/model_helpers.rb +73 -0
  16. data/lib/ixtlan/remote/model_helpers.rb~ +53 -0
  17. data/lib/ixtlan/remote/permission.rb +40 -0
  18. data/lib/ixtlan/remote/permission.rb~ +19 -0
  19. data/lib/ixtlan/remote/railtie.rb +30 -0
  20. data/lib/ixtlan/remote/railtie.rb~ +9 -0
  21. data/lib/ixtlan/remote/remote_access_controller.rb~ +25 -0
  22. data/lib/ixtlan/remote/remote_permisson.rb~ +9 -0
  23. data/lib/ixtlan/remote/resource.rb +145 -0
  24. data/lib/ixtlan/remote/resource.rb-~ +165 -0
  25. data/lib/ixtlan/remote/resource.rb~ +152 -0
  26. data/lib/ixtlan/remote/rest.rb +108 -0
  27. data/lib/ixtlan/remote/rest.rb~ +83 -0
  28. data/lib/ixtlan/remote/rest_resource.rb~ +140 -0
  29. data/lib/ixtlan/remote/rest_resource_config.rb~ +63 -0
  30. data/lib/ixtlan/remote/rest_resource_factory.rb~ +259 -0
  31. data/lib/ixtlan/remote/rest_resource_old.rb-~ +259 -0
  32. data/lib/ixtlan/remote/server.rb +119 -0
  33. data/lib/ixtlan/remote/server.rb~ +82 -0
  34. data/lib/ixtlan/remote/summary.rb +46 -0
  35. data/lib/ixtlan/remote/summary.rb~ +23 -0
  36. data/lib/ixtlan/remote/sync.rb +104 -0
  37. data/lib/ixtlan/remote/sync.rb~ +78 -0
  38. data/lib/ixtlan/remote/sync_summary.rb~ +23 -0
  39. data/lib/ixtlan/remote/tranlation_key.rb~ +7 -0
  40. data/lib/ixtlan/remote/translation.rake~ +194 -0
  41. data/lib/ixtlan/remote/translation_models.rb~ +11 -0
  42. data/lib/ixtlan/remote/updater.rb~ +71 -0
  43. data/lib/ixtlan/user_management/application_model.rb +30 -0
  44. data/lib/ixtlan/user_management/application_model.rb~ +21 -0
  45. data/lib/ixtlan/user_management/application_resource.rb +48 -0
  46. data/lib/ixtlan/user_management/application_resource.rb~ +21 -0
  47. data/lib/ixtlan/user_management/authentcator.rb~ +31 -0
  48. data/lib/ixtlan/user_management/authentication_model.rb +31 -0
  49. data/lib/ixtlan/user_management/authentication_model.rb~ +21 -0
  50. data/lib/ixtlan/user_management/authenticator.rb +55 -0
  51. data/lib/ixtlan/user_management/authenticator.rb~ +20 -0
  52. data/lib/ixtlan/user_management/domain_resource.rb +48 -0
  53. data/lib/ixtlan/user_management/domain_resource.rb~ +21 -0
  54. data/lib/ixtlan/user_management/dummy_authentication.rb +50 -0
  55. data/lib/ixtlan/user_management/dummy_authentication.rb~ +49 -0
  56. data/lib/ixtlan/user_management/group.rb~ +39 -0
  57. data/lib/ixtlan/user_management/group_model.rb +31 -0
  58. data/lib/ixtlan/user_management/group_model.rb~ +21 -0
  59. data/lib/ixtlan/user_management/models.rb~ +39 -0
  60. data/lib/ixtlan/user_management/session-serializer.rb~ +18 -0
  61. data/lib/ixtlan/user_management/session_cuba.rb +47 -0
  62. data/lib/ixtlan/user_management/session_cuba.rb~ +44 -0
  63. data/lib/ixtlan/user_management/session_manager.rb +38 -0
  64. data/lib/ixtlan/user_management/session_model.rb +36 -0
  65. data/lib/ixtlan/user_management/session_model.rb~ +10 -0
  66. data/lib/ixtlan/user_management/session_plugin.rb +32 -0
  67. data/lib/ixtlan/user_management/session_serializer.rb +21 -0
  68. data/lib/ixtlan/user_management/session_serializer.rb~ +21 -0
  69. data/lib/ixtlan/user_management/user.rb~ +16 -0
  70. data/lib/ixtlan/user_management/user_model.rb +36 -0
  71. data/lib/ixtlan/user_management/user_model.rb~ +33 -0
  72. data/lib/ixtlan/user_management/user_resource.rb +55 -0
  73. data/lib/ixtlan/user_management/user_resource.rb~ +24 -0
  74. data/lib/ixtlan/user_management/user_serializer.rb +15 -0
  75. data/lib/ixtlan/user_management/user_serializer.rb~ +23 -0
  76. data/spec/access_controller_spec.rb +65 -0
  77. data/spec/access_controller_spec.rb~ +65 -0
  78. data/spec/model_helpers_spec.rb +40 -0
  79. data/spec/model_helpers_spec.rb~ +36 -0
  80. data/spec/remote_access_controller_spec.rb~ +36 -0
  81. data/spec/resource_spec.rb +181 -0
  82. data/spec/resource_spec.rb~ +173 -0
  83. data/spec/rest_resource_spec.rb~ +173 -0
  84. data/spec/rest_spec.rb +94 -0
  85. data/spec/rest_spec.rb~ +99 -0
  86. data/spec/rest_with_attribute_name_like_model_name_spec.rb +82 -0
  87. data/spec/sync_spec.rb +83 -0
  88. data/spec/sync_spec.rb~ +81 -0
  89. metadata +313 -0
@@ -0,0 +1,173 @@
1
+ require 'ixtlan/remote/resource'
2
+ require 'ixtlan/remote/server'
3
+ require 'json'
4
+ class RestClientMock
5
+
6
+ def [](path)
7
+ @path = path
8
+ self
9
+ end
10
+
11
+ attr_reader :path
12
+ attr_accessor :response_payload
13
+
14
+ def response_payload( *args )
15
+ @response_payload
16
+ end
17
+
18
+ alias :post :response_payload
19
+ alias :put :response_payload
20
+ alias :delete :response_payload
21
+
22
+ end
23
+ class User
24
+
25
+ def initialize( args = {} )
26
+ @id = (args || {})['id'].to_i
27
+ @name = (args || {})['name']
28
+ end
29
+
30
+ attr_reader :id, :name
31
+
32
+ def attributes
33
+ {'id' => @id, 'name' => @name }
34
+ end
35
+ end
36
+ ClientUser = User
37
+
38
+ describe Ixtlan::Remote::RestResource do
39
+
40
+ subject do
41
+ Ixtlan::Remote::RestResource.new( rest_client,
42
+ { User => Ixtlan::Remote::Server::Meta.new( nil, User.method(:new) ),
43
+ ClientUser => Ixtlan::Remote::Server::Meta.new( :users, ClientUser.method(:new) ) } )
44
+ end
45
+
46
+ let( :rest_client ) { ::RestClientMock.new }
47
+
48
+ describe 'create' do
49
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
50
+ it 'user without root' do
51
+
52
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
53
+
54
+ u = subject.create( *user, :name => 'bla' ).send_it
55
+ u.id.must_equal 1
56
+ u.name.must_equal 'bla'
57
+
58
+ subject.model.must_equal User
59
+ rest_client.path.must_match /(.*\/)?users$/
60
+ end
61
+
62
+ it 'user with root' do
63
+
64
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
65
+
66
+ u = subject.create( *user, :name => 'bla' ).send_it
67
+ u.id.must_equal 1
68
+ u.name.must_equal 'bla'
69
+
70
+ subject.model.must_equal User
71
+ rest_client.path.must_match /(.*\/)?users$/
72
+ end
73
+ end
74
+ end
75
+
76
+ describe 'retrieve' do
77
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
78
+ it 'user without root' do
79
+
80
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
81
+
82
+ u = subject.create( *user, 1 ).send_it
83
+ u.id.must_equal 1
84
+ u.name.must_equal 'bla'
85
+
86
+ subject.model.must_equal User
87
+ rest_client.path.must_match /(.*\/)?users\/1$/
88
+ end
89
+
90
+ it 'users without root' do
91
+
92
+ rest_client.response_payload = '[ { "id": 1, "name": "bla" }, { "id": 2, "name": "blabla" } ]'
93
+
94
+ u = subject.create( *user ).send_it
95
+ u.size.must_equal 2
96
+ u[0].id.must_equal 1
97
+ u[0].name.must_equal 'bla'
98
+ u[1].id.must_equal 2
99
+ u[1].name.must_equal 'blabla'
100
+
101
+ subject.model.must_equal User
102
+ rest_client.path.must_match /(.*\/)?users$/
103
+ end
104
+
105
+ it 'user with root' do
106
+
107
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
108
+
109
+ u = subject.create( *user, 1 ).send_it
110
+ u.id.must_equal 1
111
+ u.name.must_equal 'bla'
112
+
113
+ subject.model.must_equal User
114
+ rest_client.path.must_match /(.*\/)?users\/1$/
115
+ end
116
+
117
+ it 'users with root' do
118
+
119
+ rest_client.response_payload = '[ { "user": { "id": 1, "name": "bla" } }, { "user": { "id": 2, "name": "blabla" } } ]'
120
+
121
+ u = subject.create( *user ).send_it
122
+ u.size.must_equal 2
123
+ u[0].id.must_equal 1
124
+ u[0].name.must_equal 'bla'
125
+ u[1].id.must_equal 2
126
+ u[1].name.must_equal 'blabla'
127
+
128
+ subject.model.must_equal User
129
+ rest_client.path.must_match /(.*\/)?users$/
130
+ end
131
+ end
132
+ end
133
+
134
+ describe 'update' do
135
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
136
+ it 'user without root' do
137
+
138
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
139
+
140
+ u = subject.update( *user, 1, :name => 'buh' ).send_it
141
+ u.id.must_equal 1
142
+ u.name.must_equal 'bla'
143
+
144
+ subject.model.must_equal User
145
+ rest_client.path.must_match /(.*\/)?users\/1$/
146
+ end
147
+
148
+ it 'user with root' do
149
+
150
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
151
+
152
+ u = subject.create( *user, 1, :name => 'buh' ).send_it
153
+ u.id.must_equal 1
154
+ u.name.must_equal 'bla'
155
+
156
+ subject.model.must_equal User
157
+ rest_client.path.must_match /(.*\/)?users\/1$/
158
+ end
159
+ end
160
+ end
161
+
162
+ describe 'delete' do
163
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
164
+ it 'user' do
165
+
166
+ subject.delete( *user, 1 ).send_it.must_be_nil
167
+
168
+ subject.model.must_equal User
169
+ rest_client.path.must_match /(.*\/)?users\/1$/
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,173 @@
1
+ require 'ixtlan/remote/rest_resource'
2
+ require 'ixtlan/remote/server'
3
+ require 'json'
4
+ class RestClientMock
5
+
6
+ def [](path)
7
+ @path = path
8
+ self
9
+ end
10
+
11
+ attr_reader :path
12
+ attr_accessor :response_payload
13
+
14
+ def response_payload( *args )
15
+ @response_payload
16
+ end
17
+
18
+ alias :post :response_payload
19
+ alias :put :response_payload
20
+ alias :delete :response_payload
21
+
22
+ end
23
+ class User
24
+
25
+ def initialize( args = {} )
26
+ @id = (args || {})['id'].to_i
27
+ @name = (args || {})['name']
28
+ end
29
+
30
+ attr_reader :id, :name
31
+
32
+ def attributes
33
+ {'id' => @id, 'name' => @name }
34
+ end
35
+ end
36
+ ClientUser = User
37
+
38
+ describe Ixtlan::Remote::RestResource do
39
+
40
+ subject do
41
+ Ixtlan::Remote::RestResource.new( rest_client,
42
+ { User => Ixtlan::Remote::Server::Meta.new( nil, User.method(:new) ),
43
+ ClientUser => Ixtlan::Remote::Server::Meta.new( :users, ClientUser.method(:new) ) } )
44
+ end
45
+
46
+ let( :rest_client ) { ::RestClientMock.new }
47
+
48
+ describe 'create' do
49
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
50
+ it 'user without root' do
51
+
52
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
53
+
54
+ u = subject.create( *user, :name => 'bla' ).send_it
55
+ u.id.must_equal 1
56
+ u.name.must_equal 'bla'
57
+
58
+ subject.model.must_equal User
59
+ rest_client.path.must_match /(.*\/)?users$/
60
+ end
61
+
62
+ it 'user with root' do
63
+
64
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
65
+
66
+ u = subject.create( *user, :name => 'bla' ).send_it
67
+ u.id.must_equal 1
68
+ u.name.must_equal 'bla'
69
+
70
+ subject.model.must_equal User
71
+ rest_client.path.must_match /(.*\/)?users$/
72
+ end
73
+ end
74
+ end
75
+
76
+ describe 'retrieve' do
77
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
78
+ it 'user without root' do
79
+
80
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
81
+
82
+ u = subject.create( *user, 1 ).send_it
83
+ u.id.must_equal 1
84
+ u.name.must_equal 'bla'
85
+
86
+ subject.model.must_equal User
87
+ rest_client.path.must_match /(.*\/)?users\/1$/
88
+ end
89
+
90
+ it 'users without root' do
91
+
92
+ rest_client.response_payload = '[ { "id": 1, "name": "bla" }, { "id": 2, "name": "blabla" } ]'
93
+
94
+ u = subject.create( *user ).send_it
95
+ u.size.must_equal 2
96
+ u[0].id.must_equal 1
97
+ u[0].name.must_equal 'bla'
98
+ u[1].id.must_equal 2
99
+ u[1].name.must_equal 'blabla'
100
+
101
+ subject.model.must_equal User
102
+ rest_client.path.must_match /(.*\/)?users$/
103
+ end
104
+
105
+ it 'user with root' do
106
+
107
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
108
+
109
+ u = subject.create( *user, 1 ).send_it
110
+ u.id.must_equal 1
111
+ u.name.must_equal 'bla'
112
+
113
+ subject.model.must_equal User
114
+ rest_client.path.must_match /(.*\/)?users\/1$/
115
+ end
116
+
117
+ it 'users with root' do
118
+
119
+ rest_client.response_payload = '[ { "user": { "id": 1, "name": "bla" } }, { "user": { "id": 2, "name": "blabla" } } ]'
120
+
121
+ u = subject.create( *user ).send_it
122
+ u.size.must_equal 2
123
+ u[0].id.must_equal 1
124
+ u[0].name.must_equal 'bla'
125
+ u[1].id.must_equal 2
126
+ u[1].name.must_equal 'blabla'
127
+
128
+ subject.model.must_equal User
129
+ rest_client.path.must_match /(.*\/)?users$/
130
+ end
131
+ end
132
+ end
133
+
134
+ describe 'update' do
135
+ [ User.new('id' => 1), User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
136
+ it 'user without root' do
137
+
138
+ rest_client.response_payload = '{ "id": 1, "name": "bla" }'
139
+
140
+ u = subject.update( *user, 1, :name => 'buh' ).send_it
141
+ u.id.must_equal 1
142
+ u.name.must_equal 'bla'
143
+
144
+ subject.model.must_equal User
145
+ rest_client.path.must_match /(.*\/)?users\/1$/
146
+ end
147
+
148
+ it 'user with root' do
149
+
150
+ rest_client.response_payload = '{ "user": { "id": 1, "name": "bla" } }'
151
+
152
+ u = subject.create( *user, 1, :name => 'buh' ).send_it
153
+ u.id.must_equal 1
154
+ u.name.must_equal 'bla'
155
+
156
+ subject.model.must_equal User
157
+ rest_client.path.must_match /(.*\/)?users\/1$/
158
+ end
159
+ end
160
+ end
161
+
162
+ describe 'delete' do
163
+ [ User, :users, "users", ["admins", 1, User], ["admins/1", User], ClientUser ].each do |user|
164
+ it 'user' do
165
+
166
+ subject.delete( *user, 1 ).send_it.must_be_nil
167
+
168
+ subject.model.must_equal User
169
+ rest_client.path.must_match /(.*\/)?users\/1$/
170
+ end
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,94 @@
1
+ require 'ixtlan/remote/sync'
2
+ require 'ixtlan/remote/rest'
3
+ require 'dm-migrations'
4
+ require 'dm-sqlite-adapter'
5
+ require 'webmock/minitest'
6
+
7
+ class Admin
8
+ include DataMapper::Resource
9
+
10
+ property :id, Serial
11
+ property :name, String
12
+ end
13
+ DataMapper.setup(:default, "sqlite::memory:")
14
+ Admin.auto_migrate!
15
+
16
+ describe Ixtlan::Remote::Rest do
17
+ subject do
18
+ factory = Ixtlan::Remote::Rest.new
19
+ factory.server( :users ) do |s|
20
+ s.url = baseurl
21
+ s.add_model( Admin )
22
+ end
23
+ factory
24
+ end
25
+
26
+ let( :baseurl ) { 'http://www.example.com' }
27
+ let( :headers ) { { 'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'Content-Type'=>'application/json' }}#, 'User-Agent'=>'Ruby' } }
28
+ let( :url ) { baseurl + "/admins/" }
29
+ let( :stub_get ) { stub_request(:get, url ).with(:headers => headers ) }
30
+ let( :stub_get432 ) { stub_request(:get, url + "432" ).with(:headers => headers ) }
31
+ let( :stub_post ) { stub_request(:post, url ) }
32
+ let( :stub_put ) { stub_request(:put, url + "1" ) }
33
+ let( :stub_delete ) { stub_request(:delete, url + "1" ) }
34
+
35
+ [ Admin, :admins, 'admins' ].each do |admin|
36
+ it 'retrieve collection' do
37
+ stub_get.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
38
+
39
+ a = subject.retrieve( admin ).first
40
+
41
+ a.new?.must_equal true
42
+ a.id.must_equal 123
43
+ a.name.must_equal 'bla'
44
+ end
45
+ end
46
+
47
+ [ [ Admin, 432 ], [ :admins, 432 ], [ 'admins', 432 ] ].each do |admin|
48
+ it 'retrieve entity' do
49
+ stub_get432.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
50
+
51
+ a = subject.retrieve( *admin ).first
52
+
53
+ a.new?.must_equal true
54
+ a.id.must_equal 123
55
+ a.name.must_equal 'bla'
56
+ end
57
+ end
58
+
59
+ [ Admin.new( :name => 'something' ), [ Admin, { :name => 'something' } ], [ :admins, { :name => 'something' } ], [ 'admins', { :name => 'something' } ] ].each do |admin|
60
+ it 'create' do
61
+ stub_post.with( :body => "{\"name\":\"something\"}", :headers => headers ).to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
62
+
63
+ a = subject.create( *admin )
64
+
65
+ a.new?.must_equal true
66
+ a.id.must_equal 111
67
+ a.name.must_equal 'bla'
68
+ end
69
+ end
70
+
71
+ DATA = { :id => 1, :name => 'something' }
72
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, DATA ], [ :admins, 1, DATA], [ 'admins', 1, DATA ] ].each do |admin|
73
+ it 'update' do
74
+ stub_put.with( :body => DATA.to_json, :headers => headers.merge({'Content-Length'=>'27'}) ).to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
75
+
76
+ a = subject.update( *admin )
77
+
78
+ a.new?.must_equal true
79
+ a.id.must_equal 111
80
+ a.name.must_equal 'bla'
81
+ end
82
+ end
83
+
84
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, { :id => 1, :name => 'something' } ], [ :admins, 1, { :id => 1, :name => 'something' } ], [ 'admins', 1, { :id => 1, :name => 'something' } ] ].each do |admin|
85
+ it 'delete' do
86
+ stub_delete.with( :headers => headers ).to_return( :status => 200 )
87
+
88
+ a = subject.delete( *admin )
89
+
90
+ a.must_be_nil
91
+ end
92
+ end
93
+
94
+ end
@@ -0,0 +1,99 @@
1
+ require 'ixtlan/remote/sync'
2
+ require 'ixtlan/remote/rest'
3
+ require 'dm-migrations'
4
+ require 'dm-sqlite-adapter'
5
+ require 'webmock/minitest'
6
+
7
+ class Admin
8
+ include DataMapper::Resource
9
+
10
+ property :id, Serial
11
+ property :name, String
12
+ end
13
+ DataMapper.setup(:default, "sqlite::memory:")
14
+ Admin.auto_migrate!
15
+
16
+ describe Ixtlan::Remote::Rest do
17
+ subject do
18
+ factory = Ixtlan::Remote::Rest.new
19
+ factory.server( :users ) do |s|
20
+ s.url = baseurl
21
+ s.add_model( Admin )
22
+ end
23
+ factory
24
+ end
25
+
26
+ let( :baseurl ) { 'http://www.example.com' }
27
+ let( :headers ) { { 'Accept'=>'application/json', 'Accept-Encoding'=>'gzip, deflate', 'Content-Type'=>'application/json', 'User-Agent'=>'Ruby' } }
28
+ let( :url ) { p baseurl; baseurl + "/admins" }
29
+ let( :stub_get ) { stub_request(:get, url ).with(:headers => headers ) }
30
+ let( :stub_get432 ) { stub_request(:get, url + "/432" ).with(:headers => headers ) }
31
+ let( :stub_post ) { stub_request(:post, url ) }
32
+ let( :stub_put ) { stub_request(:put, url + "/1" ) }
33
+ let( :stub_delete ) { stub_request(:put, url + "/1" ) }
34
+
35
+ [ Admin, :admins, 'admins' ].each do |admin|
36
+ it 'retrieve collection' do
37
+ stub_get.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
38
+
39
+ a = subject.retrieve( admin ).first
40
+
41
+ a.new?.must_equal true
42
+ a.id.must_equal 123
43
+ a.name.must_equal 'bla'
44
+ end
45
+ end
46
+
47
+ [ [ Admin, 432 ], [ :admins, 432 ], [ 'admins', 432 ] ].each do |admin|
48
+ it 'retrieve entity' do
49
+ stub_get432.to_return(:status => 200, :body => '[ {"id": 123, "name": "bla" } ]', :headers => {})
50
+
51
+ a = subject.retrieve( *admin ).first
52
+
53
+ a.new?.must_equal true
54
+ a.id.must_equal 123
55
+ a.name.must_equal 'bla'
56
+ end
57
+ end
58
+
59
+ [ Admin.new( :name => 'something' ), [ Admin, { :name => 'something' } ], [ :admins, { :name => 'something' } ], [ 'admins', { :name => 'something' } ] ].each do |admin|
60
+ it 'create' do
61
+ stub_post
62
+ .with( :body => "{\"name\":\"something\"}", :headers => headers )
63
+ .to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
64
+
65
+ a = subject.create( *admin )
66
+
67
+ a.new?.must_equal true
68
+ a.id.must_equal 111
69
+ a.name.must_equal 'bla'
70
+ end
71
+ end
72
+
73
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, { :id => 1, :name => 'something' } ], [ :admins, 1, { :id => 1, :name => 'something' } ], [ 'admins', 1, { :id => 1, :name => 'something' } ] ].each do |admin|
74
+ it 'update' do
75
+ stub_put
76
+ .with( :body => "{\"id\":1,\"name\":\"something\"}", :headers => headers )
77
+ .to_return( :status => 200, :body => '{"id": 111, "name": "bla" }' )
78
+
79
+ a = subject.update( *admin )
80
+
81
+ a.new?.must_equal true
82
+ a.id.must_equal 111
83
+ a.name.must_equal 'bla'
84
+ end
85
+ end
86
+
87
+ [ Admin.new( :id => 1, :name => 'something' ), [ Admin, 1, { :id => 1, :name => 'something' } ], [ :admins, 1, { :id => 1, :name => 'something' } ], [ 'admins', 1, { :id => 1, :name => 'something' } ] ].each do |admin|
88
+ it 'delete' do
89
+ stub_delete
90
+ .with( :body => "{\"id\":1,\"name\":\"something\"}", :headers => headers )
91
+ .to_return( :status => 200 )
92
+
93
+ a = subject.update( *admin )
94
+
95
+ a.must_be_nil
96
+ end
97
+ end
98
+
99
+ end