22
33class TestJsonapiErrorsHandler
44 include JsonapiErrorsHandler
5-
5+
6+ def render ( json : { } , status :)
7+ json . to_h . merge ( status : status )
8+ end
9+ end
10+
11+ class DummyErrorLogger
12+ include JsonapiErrorsHandler
13+
614 def render ( json : { } , status :)
715 json . to_h . merge ( status : status )
816 end
17+
18+ def log_error ( e )
19+ end
920end
1021
11- RSpec . describe JsonapiErrorsHandler do
22+ RSpec . describe JsonapiErrorsHandler do
1223 let ( :dummy ) { TestJsonapiErrorsHandler . new }
13-
24+
1425 it 'expects ErrorMapper to have already mapped some errors' do
1526 dummy
1627 expect ( JsonapiErrorsHandler ::ErrorMapper . mapped_errors ) . not_to be_empty
1728 end
1829
1930 describe '.handle_error' do
31+ let ( :mapped_error ) { JsonapiErrorsHandler ::Errors ::Forbidden . new }
2032 let ( :subject ) { dummy . handle_error ( mapped_error ) }
2133
2234 context 'when error is mapped' do
23- let ( :mapped_error ) { JsonapiErrorsHandler ::Errors ::Forbidden . new }
2435 let ( :expected_result ) do
2536 { errors : [ { detail : 'You have no rights to access this resource' ,
2637 source : { 'pointer' => '/request/headers/authorization' } ,
@@ -32,10 +43,20 @@ def render(json: {}, status:)
3243 it 'renders mapped error' do
3344 expect ( subject ) . to include ( expected_result )
3445 end
46+
47+ context 'when responds to log_error method' do
48+ let ( :dummy ) { DummyErrorLogger . new }
49+ let ( :subject ) { dummy . handle_error ( mapped_error ) }
50+ it 'does not call error that is mapped' do
51+ expect ( dummy ) . not_to receive ( :log_error )
52+ subject
53+ end
54+ end
3555 end
3656
3757 context 'when error is not mapped' do
38- let ( :mapped_error ) { 'Error' }
58+ let ( :unmapped_error ) { 'Error' }
59+ let ( :subject ) { dummy . handle_error ( unmapped_error ) }
3960 let ( :expected_result ) do
4061 { errors : [ { detail : 'We encountered unexpected error, but our developers had been already notified about it' ,
4162 source : { } ,
@@ -47,12 +68,21 @@ def render(json: {}, status:)
4768 it 'renders 500 error' do
4869 expect ( subject ) . to include ( expected_result )
4970 end
71+
72+ context 'when responds to log_error method' do
73+ let ( :dummy ) { DummyErrorLogger . new }
74+ let ( :subject ) { dummy . handle_error ( unmapped_error ) }
75+ it 'logs unmapped error' do
76+ expect ( dummy ) . to receive ( :log_error ) . with ( unmapped_error )
77+ subject
78+ end
79+ end
5080 end
5181 end
5282
5383 describe '.map_error' do
5484 let ( :subject ) { dummy . map_error ( mapped_error ) }
55-
85+
5686 context 'error is not in defined error list' do
5787 let ( :mapped_error ) { 'Error' }
5888
@@ -72,7 +102,7 @@ def render(json: {}, status:)
72102
73103 describe '.render_error' do
74104 let ( :subject ) { dummy . render_error ( error ) }
75-
105+
76106 context 'renders the error' do
77107 let ( :error ) { JsonapiErrorsHandler ::Errors ::Forbidden . new }
78108 let ( :expected_result ) do
0 commit comments