-
-
Notifications
You must be signed in to change notification settings - Fork 59
Expand file tree
/
Copy pathon_error_test.rb
More file actions
150 lines (123 loc) · 2.93 KB
/
on_error_test.rb
File metadata and controls
150 lines (123 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# frozen_string_literal: true
require_relative '../test_helper'
class OnErrorTest < Minitest::Test
class User
attr_accessor :id, :name, :created_at, :updated_at
def initialize(id, name, email)
@id = id
@name = name
@email = email
@created_at = Time.now
@updated_at = Time.now
end
# rubocop:disable Style/RedundantException
def email
raise RuntimeError, 'Error!'
end
# rubocop:enable Style/RedundantException
end
class UserResource
include Alba::Resource
root_key :user
attributes :id, :name, :email
end
class UserResource1 < UserResource
on_error :raise
end
class UserResource2 < UserResource
on_error :ignore
end
class UserResource3 < UserResource
on_error :nullify
end
class UserResource4 < UserResource
on_error do |error, _, key|
[key, error.message]
end
end
class UserResource5 < UserResource
on_error :ignore
end
class UserResourceToChangeErrorKey < UserResource
on_error do |error|
['error', error.message]
end
end
class UserResourceForProcIgnoreKey < UserResource
on_error do |_error|
Alba::REMOVE_KEY
end
end
def setup
@user = User.new(1, 'Masafumi OKURA', 'masafumi@example.com')
end
def test_on_error_default
assert_raises RuntimeError do
UserResource.new(@user).serialize
end
end
def test_on_error_raise
assert_raises RuntimeError do
UserResource1.new(@user).serialize
end
end
def test_on_error_ignore
assert_equal(
'{"user":{"id":1,"name":"Masafumi OKURA"}}',
UserResource2.new(@user).serialize
)
end
def test_on_error_nullify
assert_equal(
'{"user":{"id":1,"name":"Masafumi OKURA","email":null}}',
UserResource3.new(@user).serialize
)
end
def test_on_error_block
assert_equal(
'{"user":{"id":1,"name":"Masafumi OKURA","email":"Error!"}}',
UserResource4.new(@user).serialize
)
end
def test_on_error_invalid
assert_raises Alba::Error do
Class.new(UserResource) do
on_error :invalid
end
end
end
def test_on_error_both_handler_and_block_provided
assert_raises ArgumentError do
Class.new(UserResource) do
def self.name
'UserResource7'
end
on_error :both do |error|
p error
end
end
end
end
def test_on_error_without_handler_and_block
assert_raises ArgumentError do
Class.new(UserResource) do
def self.name
'UserResource8'
end
on_error
end
end
end
def test_on_error_block_that_changes_key
assert_equal(
'{"user":{"id":1,"name":"Masafumi OKURA","error":"Error!"}}',
UserResourceToChangeErrorKey.new(@user).serialize
)
end
def test_on_error_proc_ignore
assert_equal(
'{"user":{"id":1,"name":"Masafumi OKURA"}}',
UserResourceForProcIgnoreKey.new(@user).serialize
)
end
end