apicasso 0.4.11 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/Rakefile +0 -0
- data/app/controllers/apicasso/apidocs_controller.rb +332 -326
- data/app/controllers/apicasso/application_controller.rb +46 -1
- data/app/controllers/apicasso/crud_controller.rb +4 -20
- data/app/controllers/concerns/orderable.rb +1 -1
- data/app/controllers/concerns/sql_security.rb +67 -0
- data/app/models/apicasso/ability.rb +3 -0
- data/app/models/apicasso/application_record.rb +0 -0
- data/app/models/apicasso/key.rb +0 -0
- data/app/models/apicasso/request.rb +0 -0
- data/config/routes.rb +7 -0
- data/lib/apicasso/active_record_extension.rb +5 -0
- data/lib/apicasso/engine.rb +0 -0
- data/lib/apicasso/version.rb +1 -1
- data/lib/apicasso.rb +0 -0
- data/lib/generators/apicasso/install/install_generator.rb +6 -0
- data/lib/generators/apicasso/install/templates/create_apicasso_tables.rb +8 -0
- data/spec/apicasso_spec.rb +0 -0
- data/spec/dummy/Gemfile +0 -0
- data/spec/dummy/Gemfile.lock +0 -0
- data/spec/dummy/Rakefile +0 -0
- data/spec/dummy/app/controllers/application_controller.rb +0 -0
- data/spec/dummy/app/models/application_record.rb +0 -0
- data/spec/dummy/app/models/used_model.rb +0 -0
- data/spec/dummy/bin/bundle +0 -0
- data/spec/dummy/bin/rails +0 -0
- data/spec/dummy/bin/rake +0 -0
- data/spec/dummy/bin/setup +0 -0
- data/spec/dummy/bin/spring +0 -0
- data/spec/dummy/bin/update +0 -0
- data/spec/dummy/config/application.rb +0 -0
- data/spec/dummy/config/boot.rb +0 -0
- data/spec/dummy/config/cable.yml +0 -0
- data/spec/dummy/config/credentials.yml.enc +0 -0
- data/spec/dummy/config/database.yml +0 -0
- data/spec/dummy/config/environment.rb +0 -0
- data/spec/dummy/config/environments/development.rb +0 -0
- data/spec/dummy/config/environments/production.rb +0 -0
- data/spec/dummy/config/environments/test.rb +0 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -0
- data/spec/dummy/config/initializers/cors.rb +0 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -0
- data/spec/dummy/config/initializers/inflections.rb +0 -0
- data/spec/dummy/config/initializers/mime_types.rb +0 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +0 -0
- data/spec/dummy/config/locales/en.yml +0 -0
- data/spec/dummy/config/puma.rb +0 -0
- data/spec/dummy/config/routes.rb +0 -0
- data/spec/dummy/config/spring.rb +0 -0
- data/spec/dummy/config/storage.yml +0 -0
- data/spec/dummy/config.ru +0 -0
- data/spec/dummy/db/migrate/20180918134607_create_apicasso_tables.rb +0 -0
- data/spec/dummy/db/migrate/20180918141254_create_used_models.rb +0 -0
- data/spec/dummy/db/migrate/20180919130152_create_active_storage_tables.active_storage.rb +0 -0
- data/spec/dummy/db/migrate/20180920133933_change_used_model_to_validates.rb +0 -0
- data/spec/dummy/db/schema.rb +0 -0
- data/spec/dummy/db/seeds.rb +0 -0
- data/spec/dummy/package.json +0 -0
- data/spec/factories/used_model.rb +0 -0
- data/spec/models/used_model_spec.rb +0 -0
- data/spec/rails_helper.rb +0 -0
- data/spec/requests/bad_requests_spec.rb +51 -0
- data/spec/requests/requests_spec.rb +98 -23
- data/spec/spec_helper.rb +1 -1
- data/spec/support/database_cleaner.rb +8 -0
- data/spec/support/factory_bot.rb +0 -0
- data/spec/token/token_spec.rb +322 -0
- metadata +32 -27
- data/spec/dummy/app/serializers/used_model_serializer.rb +0 -3
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rails_helper'
|
4
|
-
|
5
4
|
RSpec.describe 'Used Model requests', type: :request do
|
6
5
|
token = Apicasso::Key.create(scope: { manage: { used_model: true } }).token
|
7
6
|
access_token = { 'AUTHORIZATION' => "Token token=#{token}" }
|
@@ -38,7 +37,7 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
38
37
|
end
|
39
38
|
|
40
39
|
context 'with pagination' do
|
41
|
-
per_page = (1..UsedModel.count+1).to_a.sample
|
40
|
+
per_page = (1..UsedModel.count + 1).to_a.sample
|
42
41
|
page = (1..5).to_a.sample
|
43
42
|
|
44
43
|
before(:all) do
|
@@ -72,16 +71,25 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
72
71
|
end
|
73
72
|
|
74
73
|
context 'by grouping' do
|
74
|
+
column_by, column_fields = [:active, :account_id, :unit_id, :brand, :name, :slug,
|
75
|
+
:model, :version, :model_year, :production_year, :kind, :new_vehicle, :old_price,
|
76
|
+
:price_value, :price, :category, :transmission, :km_value, :km, :plate, :color, :doors,
|
77
|
+
:fuel, :fuel_text, :shielded].sample(2)
|
78
|
+
|
75
79
|
before(:all) do
|
76
|
-
get '/api/v1/used_model', params: {
|
80
|
+
get '/api/v1/used_model', params: {
|
81
|
+
'group[by]': column_by,
|
82
|
+
'group[calculate]': 'count',
|
83
|
+
'group[fields]': column_fields
|
84
|
+
}, headers: access_token
|
77
85
|
end
|
78
86
|
|
79
87
|
it 'returns status ok' do
|
80
88
|
expect(response).to have_http_status(:ok)
|
81
89
|
end
|
82
90
|
|
83
|
-
it 'returns all records grouped
|
84
|
-
expect(
|
91
|
+
it 'returns all records grouped by field queried' do
|
92
|
+
expect(response.body).to eq(UsedModel.where("#{column_fields} is NOT NULL").group(column_by).count.to_json)
|
85
93
|
end
|
86
94
|
end
|
87
95
|
|
@@ -102,7 +110,10 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
102
110
|
end
|
103
111
|
|
104
112
|
context 'with field selecting' do
|
105
|
-
|
113
|
+
fields = UsedModel.column_names
|
114
|
+
fields.delete('id')
|
115
|
+
field_select = fields.sample
|
116
|
+
|
106
117
|
before(:all) do
|
107
118
|
get '/api/v1/used_model', params: { 'select': field_select }, headers: access_token
|
108
119
|
end
|
@@ -111,9 +122,9 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
111
122
|
expect(response).to have_http_status(:ok)
|
112
123
|
end
|
113
124
|
|
114
|
-
it 'returns all records that have field queried' do
|
125
|
+
it 'returns all records with id (default) and that have field queried' do
|
115
126
|
JSON.parse(response.body)['entries'].each do |record|
|
116
|
-
expect(record.keys).to
|
127
|
+
expect(record.keys).to eq(['id', field_select])
|
117
128
|
end
|
118
129
|
end
|
119
130
|
end
|
@@ -134,19 +145,11 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
134
145
|
end
|
135
146
|
end
|
136
147
|
|
137
|
-
context '
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
it 'returns status ok' do
|
143
|
-
expect(response).to have_http_status(:ok)
|
144
|
-
end
|
145
|
-
|
146
|
-
it 'returns all records without includes queried' do
|
147
|
-
JSON.parse(response.body)['entries'].each do |record|
|
148
|
-
expect(record.keys).not_to include('files_blobs', 'files_url')
|
149
|
-
end
|
148
|
+
context 'when include invalid associations' do
|
149
|
+
it 'raise a bad request exception' do
|
150
|
+
expect {
|
151
|
+
get '/api/v1/used_model', params: { 'include': 'filess,filee' }, headers: access_token
|
152
|
+
}.to raise_exception(ActionController::BadRequest)
|
150
153
|
end
|
151
154
|
end
|
152
155
|
end
|
@@ -168,6 +171,51 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
168
171
|
it 'return matches with object searched' do
|
169
172
|
expect(UsedModel.find(id_to_get_id.to_i).attributes.to_json).to eq(response.body)
|
170
173
|
end
|
174
|
+
|
175
|
+
context 'with field selecting' do
|
176
|
+
id_to_get_id = UsedModel.all.sample.id.to_s
|
177
|
+
fields = UsedModel.column_names
|
178
|
+
fields.delete('id')
|
179
|
+
field_select = fields.sample
|
180
|
+
|
181
|
+
before(:all) do
|
182
|
+
get '/api/v1/used_model/' + id_to_get_id, params: { 'select': field_select }, headers: access_token
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'returns status ok' do
|
186
|
+
expect(response).to have_http_status(:ok)
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'returns the record with id (default) and that have field queried' do
|
190
|
+
expect(JSON.parse(response.body).keys).to eq([field_select])
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
context 'with include associations valid' do
|
195
|
+
id_to_test = UsedModel.all.sample.id.to_s
|
196
|
+
|
197
|
+
before(:all) do
|
198
|
+
get '/api/v1/used_model/' + id_to_test, params: { 'include': 'files_blobs,files_url' }, headers: access_token
|
199
|
+
end
|
200
|
+
|
201
|
+
it 'returns status ok' do
|
202
|
+
expect(response).to have_http_status(:ok)
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'returns the record with includes queried' do
|
206
|
+
expect(JSON.parse(response.body).keys).to include('files_blobs', 'files_url')
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
context 'when include invalid associations' do
|
211
|
+
id_to_test = UsedModel.all.sample.id.to_s
|
212
|
+
|
213
|
+
it 'raise a bad request exception' do
|
214
|
+
expect {
|
215
|
+
get '/api/v1/used_model/' + id_to_test, params: { 'include': 'filess,filee' }, headers: access_token
|
216
|
+
}.to raise_exception(ActionController::BadRequest)
|
217
|
+
end
|
218
|
+
end
|
171
219
|
end
|
172
220
|
|
173
221
|
describe 'GET /api/v1/used_model/:slug' do
|
@@ -195,7 +243,35 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
195
243
|
context 'with valid params' do
|
196
244
|
before(:all) do
|
197
245
|
@quantity = UsedModel.all.size
|
198
|
-
|
246
|
+
slug_to_post = Faker::Lorem.word
|
247
|
+
post '/api/v1/used_model/', params: {
|
248
|
+
'used_model': {
|
249
|
+
'active': Faker::Boolean.boolean,
|
250
|
+
'account_id': Faker::Number.number(1),
|
251
|
+
'unit_id': Faker::Number.number(1),
|
252
|
+
'brand': Faker::Vehicle.make,
|
253
|
+
'name': Faker::Vehicle.make_and_model,
|
254
|
+
'model': Faker::Vehicle.model,
|
255
|
+
'slug': slug_to_post,
|
256
|
+
'version': Faker::Number.decimal(1, 1),
|
257
|
+
'model_year': Faker::Vehicle.year,
|
258
|
+
'production_year': Faker::Vehicle.year,
|
259
|
+
'kind': 'car',
|
260
|
+
'new_vehicle': Faker::Boolean.boolean,
|
261
|
+
'old_price': Faker::Number.decimal(4, 2).to_s,
|
262
|
+
'price_value': Faker::Number.decimal(4, 2),
|
263
|
+
'price': Faker::Number.decimal(4, 2).to_s,
|
264
|
+
'category': Faker::Vehicle.car_type,
|
265
|
+
'transmission': Faker::Vehicle.transmission,
|
266
|
+
'km_value': Faker::Number.number(8),
|
267
|
+
'km': Faker::Number.number(8),
|
268
|
+
'plate': Faker::Number.number(4),
|
269
|
+
'color': Faker::Vehicle.color,
|
270
|
+
'doors': Faker::Number.number(1),
|
271
|
+
'fuel': Faker::Number.number(1),
|
272
|
+
'fuel_text': Faker::Vehicle.fuel_type,
|
273
|
+
'shielded': Faker::Boolean.boolean,
|
274
|
+
}}, headers: access_token
|
199
275
|
end
|
200
276
|
|
201
277
|
it 'returns status created' do
|
@@ -222,7 +298,6 @@ RSpec.describe 'Used Model requests', type: :request do
|
|
222
298
|
describe 'PUT /api/v1/used_model/:id' do
|
223
299
|
id_to_put = UsedModel.all.sample.id.to_s
|
224
300
|
name_to_put = Faker::Lorem.word
|
225
|
-
slug_to_put = UsedModel.all.sample.slug
|
226
301
|
|
227
302
|
context 'with valid params' do
|
228
303
|
before(:all) do
|
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,7 @@ ENV['RAILS_ENV'] ||= 'test'
|
|
3
3
|
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
4
4
|
require 'rspec/rails'
|
5
5
|
require 'factory_bot_rails'
|
6
|
+
require 'database_cleaner'
|
6
7
|
require 'faker'
|
7
8
|
require 'simplecov'
|
8
9
|
SimpleCov.start
|
@@ -13,4 +14,3 @@ Rails.backtrace_cleaner.remove_silencers!
|
|
13
14
|
|
14
15
|
# Load support files
|
15
16
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
16
|
-
|
data/spec/support/factory_bot.rb
CHANGED
File without changes
|
@@ -0,0 +1,322 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
RSpec.describe 'Apicasso Keys', type: :request do
|
6
|
+
describe 'Generation keys' do
|
7
|
+
context 'with scope manage' do
|
8
|
+
apicasso_key = Apicasso::Key.create(scope: { manage: { used_model: true } })
|
9
|
+
access_token = { 'AUTHORIZATION' => "Token token=#{apicasso_key.token}" }
|
10
|
+
|
11
|
+
it 'returns ok to GET' do
|
12
|
+
get '/api/v1/used_model', headers: access_token
|
13
|
+
expect(response).to have_http_status(:ok)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns ok to POST' do
|
17
|
+
size_before = UsedModel.all.size
|
18
|
+
|
19
|
+
post '/api/v1/used_model/', params: {
|
20
|
+
'used_model': {
|
21
|
+
'active': Faker::Boolean.boolean,
|
22
|
+
'account_id': Faker::Number.number(1),
|
23
|
+
'unit_id': Faker::Number.number(1),
|
24
|
+
'brand': Faker::Vehicle.make,
|
25
|
+
'name': Faker::Vehicle.make_and_model,
|
26
|
+
'model': Faker::Vehicle.model,
|
27
|
+
'version': Faker::Number.decimal(1, 1),
|
28
|
+
'model_year': Faker::Vehicle.year,
|
29
|
+
'production_year': Faker::Vehicle.year,
|
30
|
+
'kind': 'car',
|
31
|
+
'new_vehicle': Faker::Boolean.boolean,
|
32
|
+
'old_price': Faker::Number.decimal(4, 2).to_s,
|
33
|
+
'price_value': Faker::Number.decimal(4, 2),
|
34
|
+
'price': Faker::Number.decimal(4, 2).to_s,
|
35
|
+
'category': Faker::Vehicle.car_type,
|
36
|
+
'transmission': Faker::Vehicle.transmission,
|
37
|
+
'km_value': Faker::Number.number(8),
|
38
|
+
'km': Faker::Number.number(8),
|
39
|
+
'plate': Faker::Number.number(4),
|
40
|
+
'color': Faker::Vehicle.color,
|
41
|
+
'doors': Faker::Number.number(1),
|
42
|
+
'fuel': Faker::Number.number(1),
|
43
|
+
'fuel_text': Faker::Vehicle.fuel_type,
|
44
|
+
'shielded': Faker::Boolean.boolean,
|
45
|
+
}}, headers: access_token
|
46
|
+
|
47
|
+
expect(UsedModel.all.size).to eq(size_before + 1)
|
48
|
+
expect(response).to have_http_status(:created)
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'returns ok to UPDATE' do
|
52
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
53
|
+
|
54
|
+
patch '/api/v1/used_model/' + id_to_del, params: {'used_model': { 'name': Faker::Vehicle.make_and_model }}, headers: access_token
|
55
|
+
expect(response).to have_http_status(:ok)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'returns ok to DELETE' do
|
59
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
60
|
+
size_before = UsedModel.all.size
|
61
|
+
|
62
|
+
delete '/api/v1/used_model/' + id_to_del, headers: access_token
|
63
|
+
|
64
|
+
expect(UsedModel.all.size).to eq(size_before - 1)
|
65
|
+
expect(response).to have_http_status(:no_content)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'with scope to read' do
|
70
|
+
apicasso_key = Apicasso::Key.create(scope: { read: { used_model: true } })
|
71
|
+
access_token = { 'AUTHORIZATION' => "Token token=#{apicasso_key.token}" }
|
72
|
+
|
73
|
+
it 'returns ok to GET' do
|
74
|
+
get '/api/v1/used_model', headers: access_token
|
75
|
+
expect(response).to have_http_status(:ok)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'returns a raise to POST' do
|
79
|
+
size_before = UsedModel.all.size
|
80
|
+
|
81
|
+
expect {
|
82
|
+
post '/api/v1/used_model/', params: {
|
83
|
+
'used_model': {
|
84
|
+
'active': Faker::Boolean.boolean,
|
85
|
+
'account_id': Faker::Number.number(1),
|
86
|
+
'unit_id': Faker::Number.number(1),
|
87
|
+
'brand': Faker::Vehicle.make,
|
88
|
+
'name': Faker::Vehicle.make_and_model,
|
89
|
+
'model': Faker::Vehicle.model,
|
90
|
+
'version': Faker::Number.decimal(1, 1),
|
91
|
+
'model_year': Faker::Vehicle.year,
|
92
|
+
'production_year': Faker::Vehicle.year,
|
93
|
+
'kind': 'car',
|
94
|
+
'new_vehicle': Faker::Boolean.boolean,
|
95
|
+
'old_price': Faker::Number.decimal(4, 2).to_s,
|
96
|
+
'price_value': Faker::Number.decimal(4, 2),
|
97
|
+
'price': Faker::Number.decimal(4, 2).to_s,
|
98
|
+
'category': Faker::Vehicle.car_type,
|
99
|
+
'transmission': Faker::Vehicle.transmission,
|
100
|
+
'km_value': Faker::Number.number(8),
|
101
|
+
'km': Faker::Number.number(8),
|
102
|
+
'plate': Faker::Number.number(4),
|
103
|
+
'color': Faker::Vehicle.color,
|
104
|
+
'doors': Faker::Number.number(1),
|
105
|
+
'fuel': Faker::Number.number(1),
|
106
|
+
'fuel_text': Faker::Vehicle.fuel_type,
|
107
|
+
'shielded': Faker::Boolean.boolean
|
108
|
+
}}, headers: access_token
|
109
|
+
}.to raise_exception(CanCan::AccessDenied)
|
110
|
+
expect(UsedModel.all.size).to eq(size_before)
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'returns a raise to UPDATE' do
|
114
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
115
|
+
|
116
|
+
expect {
|
117
|
+
patch '/api/v1/used_model/' + id_to_del, params: { 'used_model': { 'name': Faker::Vehicle.make_and_model }}, headers: access_token
|
118
|
+
}.to raise_exception(CanCan::AccessDenied)
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'returns a raise to DELETE' do
|
122
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
123
|
+
size_before = UsedModel.all.size
|
124
|
+
|
125
|
+
expect {
|
126
|
+
delete '/api/v1/used_model/' + id_to_del, headers: access_token
|
127
|
+
}.to raise_exception(CanCan::AccessDenied)
|
128
|
+
expect(UsedModel.all.size).to eq(size_before)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'with scope to write' do
|
133
|
+
apicasso_key = Apicasso::Key.create(scope: { create: { used_model: true } })
|
134
|
+
access_token = { 'AUTHORIZATION' => "Token token=#{apicasso_key.token}" }
|
135
|
+
|
136
|
+
it 'returns a raise to GET' do
|
137
|
+
expect {
|
138
|
+
get '/api/v1/used_model', headers: access_token
|
139
|
+
}.to raise_exception(CanCan::AccessDenied)
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'returns ok to POST' do
|
143
|
+
size_before = UsedModel.all.size
|
144
|
+
|
145
|
+
post '/api/v1/used_model/', params: {
|
146
|
+
'used_model': {
|
147
|
+
'active': Faker::Boolean.boolean,
|
148
|
+
'account_id': Faker::Number.number(1),
|
149
|
+
'unit_id': Faker::Number.number(1),
|
150
|
+
'brand': Faker::Vehicle.make,
|
151
|
+
'name': Faker::Vehicle.make_and_model,
|
152
|
+
'model': Faker::Vehicle.model,
|
153
|
+
'version': Faker::Number.decimal(1, 1),
|
154
|
+
'model_year': Faker::Vehicle.year,
|
155
|
+
'production_year': Faker::Vehicle.year,
|
156
|
+
'kind': 'car',
|
157
|
+
'new_vehicle': Faker::Boolean.boolean,
|
158
|
+
'old_price': Faker::Number.decimal(4, 2).to_s,
|
159
|
+
'price_value': Faker::Number.decimal(4, 2),
|
160
|
+
'price': Faker::Number.decimal(4, 2).to_s,
|
161
|
+
'category': Faker::Vehicle.car_type,
|
162
|
+
'transmission': Faker::Vehicle.transmission,
|
163
|
+
'km_value': Faker::Number.number(8),
|
164
|
+
'km': Faker::Number.number(8),
|
165
|
+
'plate': Faker::Number.number(4),
|
166
|
+
'color': Faker::Vehicle.color,
|
167
|
+
'doors': Faker::Number.number(1),
|
168
|
+
'fuel': Faker::Number.number(1),
|
169
|
+
'fuel_text': Faker::Vehicle.fuel_type,
|
170
|
+
'shielded': Faker::Boolean.boolean
|
171
|
+
}}, headers: access_token
|
172
|
+
|
173
|
+
expect(response).to have_http_status(:created)
|
174
|
+
expect(UsedModel.all.size).to eq(size_before + 1)
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'returns a raise to UPDATE' do
|
178
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
179
|
+
|
180
|
+
expect {
|
181
|
+
patch '/api/v1/used_model/' + id_to_del, params: { 'used_model': { 'name': Faker::Vehicle.make_and_model }}, headers: access_token
|
182
|
+
}.to raise_exception(CanCan::AccessDenied)
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'returns a raise to DELETE' do
|
186
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
187
|
+
size_before = UsedModel.all.size
|
188
|
+
|
189
|
+
expect {
|
190
|
+
delete '/api/v1/used_model/' + id_to_del, headers: access_token
|
191
|
+
}.to raise_exception(CanCan::AccessDenied)
|
192
|
+
expect(UsedModel.all.size).to eq(size_before)
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
context 'with scope to update' do
|
197
|
+
apicasso_key = Apicasso::Key.create(scope: { update: { used_model: true } })
|
198
|
+
access_token = { 'AUTHORIZATION' => "Token token=#{apicasso_key.token}" }
|
199
|
+
|
200
|
+
it 'returns a raise to GET' do
|
201
|
+
expect {
|
202
|
+
get '/api/v1/used_model', headers: access_token
|
203
|
+
}.to raise_exception(CanCan::AccessDenied)
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'returns a raise to POST' do
|
207
|
+
size_before = UsedModel.all.size
|
208
|
+
|
209
|
+
expect {
|
210
|
+
post '/api/v1/used_model/', params: {
|
211
|
+
'used_model': {
|
212
|
+
'active': Faker::Boolean.boolean,
|
213
|
+
'account_id': Faker::Number.number(1),
|
214
|
+
'unit_id': Faker::Number.number(1),
|
215
|
+
'brand': Faker::Vehicle.make,
|
216
|
+
'name': Faker::Vehicle.make_and_model,
|
217
|
+
'model': Faker::Vehicle.model,
|
218
|
+
'version': Faker::Number.decimal(1, 1),
|
219
|
+
'model_year': Faker::Vehicle.year,
|
220
|
+
'production_year': Faker::Vehicle.year,
|
221
|
+
'kind': 'car',
|
222
|
+
'new_vehicle': Faker::Boolean.boolean,
|
223
|
+
'old_price': Faker::Number.decimal(4, 2).to_s,
|
224
|
+
'price_value': Faker::Number.decimal(4, 2),
|
225
|
+
'price': Faker::Number.decimal(4, 2).to_s,
|
226
|
+
'category': Faker::Vehicle.car_type,
|
227
|
+
'transmission': Faker::Vehicle.transmission,
|
228
|
+
'km_value': Faker::Number.number(8),
|
229
|
+
'km': Faker::Number.number(8),
|
230
|
+
'plate': Faker::Number.number(4),
|
231
|
+
'color': Faker::Vehicle.color,
|
232
|
+
'doors': Faker::Number.number(1),
|
233
|
+
'fuel': Faker::Number.number(1),
|
234
|
+
'fuel_text': Faker::Vehicle.fuel_type,
|
235
|
+
'shielded': Faker::Boolean.boolean
|
236
|
+
}}, headers: access_token
|
237
|
+
}.to raise_exception(CanCan::AccessDenied)
|
238
|
+
expect(UsedModel.all.size).to eq(size_before)
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'returns ok to UPDATE' do
|
242
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
243
|
+
|
244
|
+
patch '/api/v1/used_model/' + id_to_del, params: { 'used_model': { 'name': Faker::Vehicle.make_and_model }}, headers: access_token
|
245
|
+
expect(response).to have_http_status(:ok)
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'returns a raise to DELETE' do
|
249
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
250
|
+
size_before = UsedModel.all.size
|
251
|
+
|
252
|
+
expect {
|
253
|
+
delete '/api/v1/used_model/' + id_to_del, headers: access_token
|
254
|
+
}.to raise_exception(CanCan::AccessDenied)
|
255
|
+
expect(UsedModel.all.size).to eq(size_before)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context 'with scope to destroy' do
|
260
|
+
apicasso_key = Apicasso::Key.create(scope: { destroy: { used_model: true } })
|
261
|
+
access_token = { 'AUTHORIZATION' => "Token token=#{apicasso_key.token}" }
|
262
|
+
|
263
|
+
it 'returns a raise to GET' do
|
264
|
+
expect {
|
265
|
+
get '/api/v1/used_model', headers: access_token
|
266
|
+
}.to raise_exception(CanCan::AccessDenied)
|
267
|
+
end
|
268
|
+
|
269
|
+
it 'returns a raise to POST' do
|
270
|
+
size_before = UsedModel.all.size
|
271
|
+
|
272
|
+
expect {
|
273
|
+
post '/api/v1/used_model/', params: {
|
274
|
+
'used_model': {
|
275
|
+
'active': Faker::Boolean.boolean,
|
276
|
+
'account_id': Faker::Number.number(1),
|
277
|
+
'unit_id': Faker::Number.number(1),
|
278
|
+
'brand': Faker::Vehicle.make,
|
279
|
+
'name': Faker::Vehicle.make_and_model,
|
280
|
+
'model': Faker::Vehicle.model,
|
281
|
+
'version': Faker::Number.decimal(1, 1),
|
282
|
+
'model_year': Faker::Vehicle.year,
|
283
|
+
'production_year': Faker::Vehicle.year,
|
284
|
+
'kind': 'car',
|
285
|
+
'new_vehicle': Faker::Boolean.boolean,
|
286
|
+
'old_price': Faker::Number.decimal(4, 2).to_s,
|
287
|
+
'price_value': Faker::Number.decimal(4, 2),
|
288
|
+
'price': Faker::Number.decimal(4, 2).to_s,
|
289
|
+
'category': Faker::Vehicle.car_type,
|
290
|
+
'transmission': Faker::Vehicle.transmission,
|
291
|
+
'km_value': Faker::Number.number(8),
|
292
|
+
'km': Faker::Number.number(8),
|
293
|
+
'plate': Faker::Number.number(4),
|
294
|
+
'color': Faker::Vehicle.color,
|
295
|
+
'doors': Faker::Number.number(1),
|
296
|
+
'fuel': Faker::Number.number(1),
|
297
|
+
'fuel_text': Faker::Vehicle.fuel_type,
|
298
|
+
'shielded': Faker::Boolean.boolean
|
299
|
+
}}, headers: access_token
|
300
|
+
}.to raise_exception(CanCan::AccessDenied)
|
301
|
+
expect(UsedModel.all.size).to eq(size_before)
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'returns a raise to UPDATE' do
|
305
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
306
|
+
|
307
|
+
expect {
|
308
|
+
patch '/api/v1/used_model/' + id_to_del, params: { 'used_model': { 'name': Faker::Vehicle.make_and_model }}, headers: access_token
|
309
|
+
}.to raise_exception(CanCan::AccessDenied)
|
310
|
+
end
|
311
|
+
|
312
|
+
it 'returns ok to DELETE' do
|
313
|
+
id_to_del = UsedModel.all.sample.id.to_s
|
314
|
+
size_before = UsedModel.all.size
|
315
|
+
|
316
|
+
delete '/api/v1/used_model/' + id_to_del, headers: access_token
|
317
|
+
expect(response).to have_http_status(:no_content)
|
318
|
+
expect(UsedModel.all.size).to eq(size_before - 1)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|