@@ -37,9 +37,13 @@ def update
3737 end
3838
3939 def destroy
40- employee = Employee . find ( params [ :id ] )
41- employee . destroy
42- render_jsonapi ( employee , scope : false )
40+ employee , success = jsonapi_destroy . to_a
41+
42+ if success
43+ render json : { meta : { } }
44+ else
45+ render json : { error : employee . errors }
46+ end
4347 end
4448 end
4549
@@ -135,17 +139,37 @@ def do_put(id)
135139 end
136140
137141 describe 'basic destroy' do
138- let ( :employee ) { Employee . create! ( first_name : 'Joe' ) }
142+ let! ( :employee ) { Employee . create! ( first_name : 'Joe' ) }
143+
144+ before do
145+ allow_any_instance_of ( Employee )
146+ . to receive ( :force_validation_error ) { force_validation_error }
147+ end
148+
149+ let ( :force_validation_error ) { false }
139150
140151 it 'deletes the object' do
141- delete :destroy , params : { id : employee . id }
152+ expect {
153+ delete :destroy , params : { id : employee . id }
154+ } . to change { Employee . count } . by ( -1 )
142155 expect { employee . reload } . to raise_error ( ActiveRecord ::RecordNotFound )
143156 end
144157
145- it 'responds with object ' do
158+ it 'responds with 200, empty meta ' do
146159 delete :destroy , params : { id : employee . id }
147- expect ( json_item [ 'id' ] ) . to eq ( employee . id . to_s )
148- expect ( json_item [ 'first_name' ] ) . to eq ( 'Joe' )
160+ expect ( response . status ) . to eq ( 200 )
161+ expect ( json ) . to eq ( { 'meta' => { } } )
162+ end
163+
164+ context 'when validation errors' do
165+ let ( :force_validation_error ) { true }
166+
167+ it 'responds with correct error payload' do
168+ expect {
169+ delete :destroy , params : { id : employee . id }
170+ } . to_not change { Employee . count }
171+ expect ( json [ 'error' ] ) . to eq ( 'base' => [ 'Forced validation error' ] )
172+ end
149173 end
150174 end
151175
0 commit comments