rapid_api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +120 -0
- data/lib/rapid_api/action_controller/errors.rb +75 -0
- data/lib/rapid_api/action_controller/filterable_params.rb +29 -0
- data/lib/rapid_api/action_controller/macros.rb +28 -0
- data/lib/rapid_api/action_controller/permitted_params.rb +38 -0
- data/lib/rapid_api/action_controller/rest_actions.rb +158 -0
- data/lib/rapid_api/action_controller/scope.rb +44 -0
- data/lib/rapid_api/action_controller.rb +11 -0
- data/lib/rapid_api/auth/concerns/authenticated_controller.rb +54 -0
- data/lib/rapid_api/auth/concerns/jwt_helpers.rb +33 -0
- data/lib/rapid_api/auth/concerns/sessions_controller.rb +49 -0
- data/lib/rapid_api/auth/concerns.rb +11 -0
- data/lib/rapid_api/auth/support/jwt.rb +28 -0
- data/lib/rapid_api/auth/support.rb +9 -0
- data/lib/rapid_api/auth.rb +8 -0
- data/lib/rapid_api/configuration.rb +11 -0
- data/lib/rapid_api/model_adapters/abstract.rb +33 -0
- data/lib/rapid_api/model_adapters/active_record_adapter.rb +49 -0
- data/lib/rapid_api/model_adapters/query_result.rb +22 -0
- data/lib/rapid_api/model_adapters.rb +9 -0
- data/lib/rapid_api/serializer_adapters/abstract.rb +22 -0
- data/lib/rapid_api/serializer_adapters/ams_adapter.rb +20 -0
- data/lib/rapid_api/serializer_adapters.rb +8 -0
- data/lib/rapid_api/version.rb +3 -0
- data/lib/rapid_api.rb +36 -0
- data/test/integration/ams_ar_test.rb +44 -0
- data/test/support/code_climate.rb +2 -0
- data/test/support/models.rb +24 -0
- data/test/support/schema.rb +14 -0
- data/test/support/serializers.rb +7 -0
- data/test/support/test_model_adapter.rb +23 -0
- data/test/support/test_module/test_model_adapter.rb +25 -0
- data/test/support/test_serializer_adapter.rb +10 -0
- data/test/test_helper.rb +28 -0
- data/test/unit/rapid_api/action_controller/errors_test.rb +53 -0
- data/test/unit/rapid_api/action_controller/filterable_params_test.rb +32 -0
- data/test/unit/rapid_api/action_controller/permitted_params_test.rb +30 -0
- data/test/unit/rapid_api/action_controller/rest_actions_test.rb +160 -0
- data/test/unit/rapid_api/action_controller/scope_test.rb +29 -0
- data/test/unit/rapid_api/auth/concerns/authenticated_controller_test.rb +56 -0
- data/test/unit/rapid_api/auth/concerns/sessions_controller_test.rb +55 -0
- data/test/unit/rapid_api/auth/support/jwt_test.rb +28 -0
- data/test/unit/rapid_api/model_adapters/abstract_test.rb +45 -0
- data/test/unit/rapid_api/model_adapters/active_record_adapter_test.rb +121 -0
- data/test/unit/rapid_api/serializer_adapters/abstract_test.rb +27 -0
- data/test/unit/rapid_api/serializer_adapters/ams_adapter_test.rb +31 -0
- data/test/unit/rapid_api/test_configuration.rb +17 -0
- metadata +197 -0
@@ -0,0 +1,160 @@
|
|
1
|
+
require File.expand_path '../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
|
5
|
+
class RestActionsTest < ActionController::TestCase
|
6
|
+
|
7
|
+
class BricksController < ActionController::Base
|
8
|
+
include RapidApi::ActionController::RestActions
|
9
|
+
|
10
|
+
self.model_adapter = TestModelAdapter
|
11
|
+
self.serializer_adapter = TestSerializerAdapter
|
12
|
+
|
13
|
+
permit_params :color, :weight, :material
|
14
|
+
filterable_params :color
|
15
|
+
|
16
|
+
scope_by :color do |controller|
|
17
|
+
'blue'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Foo = Class.new(Brick)
|
22
|
+
|
23
|
+
tests BricksController
|
24
|
+
|
25
|
+
def test_model_class_name
|
26
|
+
assert_equal BricksController.model_class_name, "Brick"
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_model
|
30
|
+
assert_equal Brick, BricksController.model
|
31
|
+
BricksController.model = Foo
|
32
|
+
assert_equal Foo, BricksController.model
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_params_key
|
36
|
+
BricksController.model = Brick
|
37
|
+
assert_equal 'brick', BricksController.params_key
|
38
|
+
BricksController.params_key = 'foo'
|
39
|
+
assert_equal 'foo', BricksController.params_key
|
40
|
+
BricksController.params_key = 'brick'
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_model_adapter
|
44
|
+
assert_equal TestModelAdapter, BricksController.model_adapter
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_adapted_serializer
|
48
|
+
BricksController.serializer_adapter = TestSerializerAdapter
|
49
|
+
assert_equal TestSerializerAdapter, BricksController.serializer_adapter
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_index
|
53
|
+
BricksController.adapted_model = Minitest::Mock.new
|
54
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new(data: 'data')
|
55
|
+
BricksController.adapted_model.expect :find_all, query_result, [{'color' => 'green'}, {color: 'blue'}]
|
56
|
+
BricksController.adapted_serializer = Minitest::Mock.new
|
57
|
+
BricksController.adapted_serializer.expect :serialize_collection, nil, ['data']
|
58
|
+
get :index, {color: 'green', material: 'leaves'}
|
59
|
+
assert_response :ok
|
60
|
+
BricksController.adapted_model.verify
|
61
|
+
BricksController.adapted_serializer.verify
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_show
|
65
|
+
BricksController.adapted_model = Minitest::Mock.new
|
66
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new(data: 'data')
|
67
|
+
BricksController.adapted_model.expect :find, query_result, ["1", {color: 'blue'}]
|
68
|
+
BricksController.adapted_serializer = Minitest::Mock.new
|
69
|
+
BricksController.adapted_serializer.expect :serialize, nil, ['data']
|
70
|
+
get :show, {id: 1}
|
71
|
+
assert_response :ok
|
72
|
+
BricksController.adapted_model.verify
|
73
|
+
BricksController.adapted_serializer.verify
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_show_not_found
|
77
|
+
BricksController.adapted_model = Minitest::Mock.new
|
78
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new()
|
79
|
+
BricksController.adapted_model.expect :find, query_result, ["1", {color: 'blue'}]
|
80
|
+
get :show, {id: 1}
|
81
|
+
assert_response :not_found
|
82
|
+
BricksController.adapted_model.verify
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_create
|
86
|
+
params = {'color' => 'red', 'weight' => '10', 'material' => 'clay'}
|
87
|
+
BricksController.adapted_model = Minitest::Mock.new
|
88
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new(data: 'data')
|
89
|
+
BricksController.adapted_model.expect :create, query_result, [params, {color: 'blue'}]
|
90
|
+
BricksController.adapted_serializer = Minitest::Mock.new
|
91
|
+
BricksController.adapted_serializer.expect :serialize, nil, ['data']
|
92
|
+
post :create, {brick: params}
|
93
|
+
assert_response :created
|
94
|
+
BricksController.adapted_model.verify
|
95
|
+
BricksController.adapted_serializer.verify
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_create_errors
|
99
|
+
params = {'color' => 'red', 'weight' => '10', 'material' => 'clay'}
|
100
|
+
BricksController.adapted_model = Minitest::Mock.new
|
101
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new(data: 'data', errors: 'dummy error')
|
102
|
+
BricksController.adapted_model.expect :create, query_result, [params, {color: 'blue'}]
|
103
|
+
post :create, {brick: params}
|
104
|
+
assert_response :unprocessable_entity
|
105
|
+
assert_equal 'dummy error', JSON.parse(@controller.response.body)['errors']
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_update
|
109
|
+
params = {'color' => 'red', 'weight' => '10', 'material' => 'clay'}
|
110
|
+
BricksController.adapted_model = Minitest::Mock.new
|
111
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new(data: 'data')
|
112
|
+
BricksController.adapted_model.expect :update, query_result, ["1", params, {color: 'blue'}]
|
113
|
+
BricksController.adapted_serializer = Minitest::Mock.new
|
114
|
+
BricksController.adapted_serializer.expect :serialize, nil, ['data']
|
115
|
+
post :update, {brick: params, id: 1}
|
116
|
+
assert_response :ok
|
117
|
+
BricksController.adapted_model.verify
|
118
|
+
BricksController.adapted_serializer.verify
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_update_not_found
|
122
|
+
params = {'color' => 'red', 'weight' => '10', 'material' => 'clay'}
|
123
|
+
BricksController.adapted_model = Minitest::Mock.new
|
124
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new()
|
125
|
+
BricksController.adapted_model.expect :update, query_result, ["1", params, {color: 'blue'}]
|
126
|
+
post :update, {brick: params, id: 1}
|
127
|
+
assert_response :not_found
|
128
|
+
BricksController.adapted_model.verify
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_update_errors
|
132
|
+
params = {'color' => 'red', 'weight' => '10', 'material' => 'clay'}
|
133
|
+
BricksController.adapted_model = Minitest::Mock.new
|
134
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new(data: 'data', errors: 'dummy error')
|
135
|
+
BricksController.adapted_model.expect :update, query_result, ["1", params, {color: 'blue'}]
|
136
|
+
post :update, {brick: params, id: 1}
|
137
|
+
assert_response :unprocessable_entity
|
138
|
+
BricksController.adapted_model.verify
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_destroy
|
142
|
+
BricksController.adapted_model = Minitest::Mock.new
|
143
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new()
|
144
|
+
BricksController.adapted_model.expect :destroy, query_result, ["1", {color: 'blue'}]
|
145
|
+
post :destroy, {id: 1}
|
146
|
+
assert_response :no_content
|
147
|
+
BricksController.adapted_model.verify
|
148
|
+
end
|
149
|
+
|
150
|
+
def test_destroy_errors
|
151
|
+
BricksController.adapted_model = Minitest::Mock.new
|
152
|
+
query_result = RapidApi::ModelAdapters::QueryResult.new(errors: 'dummy error')
|
153
|
+
BricksController.adapted_model.expect :destroy, query_result, ["1", {color: 'blue'}]
|
154
|
+
post :destroy, {id: 1}
|
155
|
+
assert_response :unprocessable_entity
|
156
|
+
BricksController.adapted_model.verify
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path '../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
module ActionController
|
4
|
+
|
5
|
+
class ScopeTest < ActionController::TestCase
|
6
|
+
|
7
|
+
class TestScopesController < ActionController::Base
|
8
|
+
include RapidApi::ActionController::Scope
|
9
|
+
|
10
|
+
scope_by :user_id, :org_id do |controller|
|
11
|
+
[controller.params['user_id'], controller.params['org_id']]
|
12
|
+
end
|
13
|
+
|
14
|
+
def scoped_bricks
|
15
|
+
render json: scope.to_json, status: :ok
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
tests TestScopesController
|
20
|
+
|
21
|
+
def test_scope_by
|
22
|
+
get :scoped_bricks, { user_id: 1, org_id: 2 }
|
23
|
+
body = JSON.parse(@controller.response.body)
|
24
|
+
assert_equal '1', body['user_id']
|
25
|
+
assert_equal '2', body['org_id']
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require File.expand_path '../../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
class AuthenticatedControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
class TestAuthenticatedController < ActionController::Base
|
6
|
+
include RapidApi::ActionController::Errors
|
7
|
+
include RapidApi::Auth::Concerns::AuthenticatedController
|
8
|
+
|
9
|
+
rapid_actions model: Brick, serializer: BrickSerializer
|
10
|
+
|
11
|
+
permit_params :color, :weight, :material
|
12
|
+
|
13
|
+
authenticate do |controller|
|
14
|
+
token = controller.decode_jwt_token!(controller.request.headers.env['Authorization'])
|
15
|
+
user_id = token[0].try :[], 'user_id'
|
16
|
+
if user_id.present?
|
17
|
+
User.find user_id
|
18
|
+
else
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
TestChildAuthenticatedController = Class.new TestAuthenticatedController
|
25
|
+
|
26
|
+
tests TestAuthenticatedController
|
27
|
+
|
28
|
+
def setup
|
29
|
+
super
|
30
|
+
DatabaseCleaner.start
|
31
|
+
end
|
32
|
+
|
33
|
+
def teardown
|
34
|
+
DatabaseCleaner.clean
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_authenticated
|
38
|
+
@user = User.create
|
39
|
+
token = RapidApi::Auth::Support::JWT.encode({ user_id: @user.id })
|
40
|
+
@request.env['Authorization'] = token
|
41
|
+
get :index
|
42
|
+
assert_response :ok
|
43
|
+
assert_equal @controller.authenticated.id, @user.id
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_not_authenticated_without_user
|
47
|
+
User.delete_all
|
48
|
+
get :index
|
49
|
+
assert_response :unauthorized
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_child_controller
|
53
|
+
assert_equal TestAuthenticatedController.authenticate_proc, TestChildAuthenticatedController.authenticate_proc
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.expand_path '../../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
class SessionsControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
class TestSessionsController < ActionController::Base
|
6
|
+
include RapidApi::Auth::Concerns::SessionsController
|
7
|
+
|
8
|
+
authenticates_with :username, :password do |params|
|
9
|
+
User.where(username: params[:username], password: params[:password]).first
|
10
|
+
end
|
11
|
+
|
12
|
+
responds_with do |authenticated|
|
13
|
+
{
|
14
|
+
token: jwt_encode({ secret: 'foo' }),
|
15
|
+
user: {
|
16
|
+
id: authenticated.id,
|
17
|
+
username: authenticated.username
|
18
|
+
}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
tests TestSessionsController
|
24
|
+
|
25
|
+
def setup
|
26
|
+
super
|
27
|
+
DatabaseCleaner.start
|
28
|
+
|
29
|
+
@user = User.create username: 'bob_the_builder', password: 'password'
|
30
|
+
end
|
31
|
+
|
32
|
+
def teardown
|
33
|
+
DatabaseCleaner.clean
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_authenticate
|
37
|
+
params = {'username' => 'bob_the_builder', 'password' => 'password'}
|
38
|
+
post :authenticate, params
|
39
|
+
body = JSON.parse(@controller.response.body)
|
40
|
+
assert_response :ok
|
41
|
+
decoded_token = RapidApi::Auth::Support::JWT.decode(body["token"])
|
42
|
+
assert_equal decoded_token[0]['secret'], 'foo'
|
43
|
+
assert_equal body["user"]["id"], @user.id
|
44
|
+
assert_equal body["user"]["username"], @user.username
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_invalid_credentials
|
48
|
+
params = {'username' => 'bob_the_builder', 'password' => 'wrong_password'}
|
49
|
+
post :authenticate, params
|
50
|
+
body = JSON.parse(@controller.response.body)
|
51
|
+
assert_response :unauthorized
|
52
|
+
assert_equal body["errors"].first, 'Invalid credentials'
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.expand_path '../../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
class JwtTest < Minitest::Test
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
@subject = RapidApi::Auth::Support::JWT
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_encode
|
15
|
+
payload = { user_id: 1 }
|
16
|
+
refute_equal @subject.encode(payload), nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_decode
|
20
|
+
payload = { user_id: 1, secret: 'secret' }
|
21
|
+
token = @subject.encode(payload)
|
22
|
+
|
23
|
+
decoded_token = @subject.decode(token)
|
24
|
+
assert_equal decoded_token[0]['secret'], 'secret'
|
25
|
+
assert_equal decoded_token[1]['alg'], 'none'
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.expand_path '../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
module RapidApi
|
4
|
+
module ModelAdapters
|
5
|
+
class AbstractModelAdapterTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@adapter = RapidApi::ModelAdapters::Abstract.new(nil)
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_find
|
15
|
+
assert_raises NotImplementedError do
|
16
|
+
@adapter.find(nil, nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_find_all
|
21
|
+
assert_raises NotImplementedError do
|
22
|
+
@adapter.find_all(nil, nil)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_create
|
27
|
+
assert_raises NotImplementedError do
|
28
|
+
@adapter.create(nil, nil)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_update
|
33
|
+
assert_raises NotImplementedError do
|
34
|
+
@adapter.update(nil, nil)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_destroy
|
39
|
+
assert_raises NotImplementedError do
|
40
|
+
@adapter.destroy(nil, nil)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require File.expand_path '../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
module RapidApi
|
4
|
+
module ModelAdapters
|
5
|
+
class ActiveRecordAdapterTest < Minitest::Test
|
6
|
+
|
7
|
+
def setup
|
8
|
+
DatabaseCleaner.start
|
9
|
+
@adapter = RapidApi::ModelAdapters::ActiveRecordAdapter.new(Brick)
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
DatabaseCleaner.clean
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_adapted_klass
|
17
|
+
assert_equal Brick, @adapter.klass
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_find
|
21
|
+
brick = Brick.create color: 'red1'
|
22
|
+
query_result = @adapter.find(brick.id)
|
23
|
+
assert_equal brick, query_result.data
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_find_all
|
27
|
+
Brick.delete_all
|
28
|
+
brick1 = Brick.create color: 'blue'
|
29
|
+
brick2 = Brick.create color: 'green'
|
30
|
+
query_result = @adapter.find_all
|
31
|
+
assert_equal [brick1.id, brick2.id], query_result.data.map(&:id)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_create
|
35
|
+
params = {color: 'red2', weight: 1, material: 'clay'}
|
36
|
+
query_result = @adapter.create params
|
37
|
+
assert_equal 'red2', query_result.data.color
|
38
|
+
assert_equal 1, query_result.data.weight
|
39
|
+
assert_equal 'clay', query_result.data.material
|
40
|
+
refute_equal nil, query_result.data.id
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_create_errors
|
44
|
+
params = {color: 'red3', weight: 1, material: 'clay'}
|
45
|
+
@adapter.create params
|
46
|
+
query_result = @adapter.create params
|
47
|
+
assert_equal true, query_result.has_errors?
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_update
|
51
|
+
params = {color: 'red4', weight: 1, material: 'clay'}
|
52
|
+
update_params = {color: 'yellow1', weight: 10, material: 'gold'}
|
53
|
+
brick = Brick.create params
|
54
|
+
query_result = @adapter.update(brick.id, update_params)
|
55
|
+
assert_equal 'yellow1', query_result.data.color
|
56
|
+
assert_equal 10, query_result.data.weight
|
57
|
+
assert_equal 'gold', query_result.data.material
|
58
|
+
assert_equal brick.id, query_result.data.id
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_update_errors
|
62
|
+
params = {color: 'red5', weight: 1, material: 'clay'}
|
63
|
+
update_params = {color: 'yellow2', weight: 10, material: 'gold'}
|
64
|
+
brick = Brick.create params
|
65
|
+
Brick.create update_params
|
66
|
+
query_result = @adapter.update(brick.id, update_params)
|
67
|
+
assert_equal true, query_result.has_errors?
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_destroy
|
71
|
+
params = {color: 'red6', weight: 1, material: 'clay'}
|
72
|
+
brick = Brick.create params
|
73
|
+
@adapter.destroy brick.id
|
74
|
+
assert Brick.where(id: brick.id).empty?
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_destroy_errors
|
78
|
+
params = {color: 'prevent_destroy', weight: 1, material: 'clay'}
|
79
|
+
brick = Brick.create params
|
80
|
+
query_result = @adapter.destroy brick.id
|
81
|
+
assert_equal true, query_result.has_errors?
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_find_with_scope
|
85
|
+
brick = Brick.create color: 'magenta'
|
86
|
+
query_result = @adapter.find(brick.id, {color: 'orange'})
|
87
|
+
assert_equal nil, query_result.data
|
88
|
+
query_result = @adapter.find(brick.id, {color: 'magenta'})
|
89
|
+
assert_equal brick, query_result.data
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_find_all_with_scope
|
93
|
+
Brick.delete_all
|
94
|
+
brick1 = Brick.create color: 'blue'
|
95
|
+
brick2 = Brick.create color: 'green'
|
96
|
+
params = {color: 'green'}
|
97
|
+
scope = {color: 'blue'}
|
98
|
+
query_result = @adapter.find_all params, scope
|
99
|
+
assert_equal [brick1.id], query_result.data.map(&:id)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_create_with_scope
|
103
|
+
params = {color: 'lavender', weight: 1, material: 'clay'}
|
104
|
+
query_result = @adapter.create params, {weight: 2, material: 'flowers'}
|
105
|
+
assert_equal 'lavender', query_result.data.color
|
106
|
+
assert_equal 2, query_result.data.weight
|
107
|
+
assert_equal 'flowers', query_result.data.material
|
108
|
+
refute_equal nil, query_result.data.id
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_find_all_with_params
|
112
|
+
Brick.delete_all
|
113
|
+
brick1 = Brick.create color: 'blue'
|
114
|
+
brick2 = Brick.create color: 'green'
|
115
|
+
params = {color: 'green'}
|
116
|
+
query_result = @adapter.find_all params
|
117
|
+
assert_equal [brick2.id], query_result.data.map(&:id)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path '../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
module RapidApi
|
4
|
+
module SerializerAdapters
|
5
|
+
class AbstractAdapterTest < Minitest::Test
|
6
|
+
def setup
|
7
|
+
@adapter = RapidApi::SerializerAdapters::Abstract.new(nil, nil)
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_serialize
|
15
|
+
assert_raises NotImplementedError do
|
16
|
+
@adapter.serialize(nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_serialize_collection
|
21
|
+
assert_raises NotImplementedError do
|
22
|
+
@adapter.serialize_collection(nil)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path '../../../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
module RapidApi
|
4
|
+
module SerializerAdapters
|
5
|
+
class AmsAdapterTest < Minitest::Test
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@adapter = RapidApi::SerializerAdapters::AmsAdapter.new(BrickSerializer, "brick")
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_klass
|
12
|
+
assert_equal BrickSerializer, @adapter.klass
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_serialize
|
16
|
+
brick = Brick.create color: 'yellow', weight: 10, material: 'gold'
|
17
|
+
serialized_brick = @adapter.serialize brick
|
18
|
+
assert_equal "{\"brick\":{\"color\":\"yellow\",\"weight\":\"10.0\",\"material\":\"gold\"}}", serialized_brick
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_serialize_collection
|
22
|
+
Brick.destroy_all
|
23
|
+
brick1 = Brick.create color: 'yellow', weight: 10, material: 'gold'
|
24
|
+
brick2 = Brick.create color: 'red', weight: 1, material: 'clay'
|
25
|
+
serialized_brick_array = @adapter.serialize_collection Brick.all
|
26
|
+
assert_equal "{\"bricks\":[{\"color\":\"yellow\",\"weight\":\"10.0\",\"material\":\"gold\"},{\"color\":\"red\",\"weight\":\"1.0\",\"material\":\"clay\"}]}", serialized_brick_array
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path '../../test_helper.rb', __FILE__
|
2
|
+
|
3
|
+
class ConfigurationTest < Minitest::Test
|
4
|
+
|
5
|
+
DefaultModelAdapter = Class.new(RapidApi::ModelAdapters::Abstract)
|
6
|
+
RapidApi.config.model_adapter = DefaultModelAdapter
|
7
|
+
|
8
|
+
class BricksController < ActionController::Base
|
9
|
+
include RapidApi::ActionController::RestActions
|
10
|
+
|
11
|
+
permit_params :color
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_default_model_adapter
|
15
|
+
assert_equal DefaultModelAdapter, BricksController.model_adapter
|
16
|
+
end
|
17
|
+
end
|