Skip to content

Commit 794f9a7

Browse files
authored
fix(hooks): smart action hooks response correctly send back serialized fields (#514)
1 parent d7df89d commit 794f9a7

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

app/controllers/forest_liana/actions_controller.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ def handle_result(result, action)
7878
end
7979
end
8080

81-
updated_field
81+
# Response of load hook is not JSONAPI serialized
82+
# so we need to transform snake_case properties back to camelCase
83+
updated_field.transform_keys { |key| key.to_s.camelize(:lower) }
8284
end
8385

8486
render serializer: nil, json: { fields: fields }, status: :ok

app/models/forest_liana/model/action.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ def initialize(attributes = {})
4444
field.delete(:isRequired)
4545
end
4646

47+
if field.key?(:isReadOnly)
48+
FOREST_LOGGER.warn "DEPRECATION WARNING: isReadOnly on field \"#{field[:field]}\" is deprecated. Please use is_read_only."
49+
field[:is_read_only] = !!field[:isReadOnly]
50+
field.delete(:isReadOnly)
51+
end
52+
4753
field[:type] = "String" unless field.key?(:type)
4854
field[:default_value] = nil unless field.key?(:default_value)
4955
field[:enums] = nil unless field.key?(:enums)

spec/requests/actions_controller_spec.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@
154154
it 'should respond 200' do
155155
post '/forest/actions/my_action/hooks/load', params: JSON.dump(params), headers: headers
156156
expect(response.status).to eq(200)
157-
expect(JSON.parse(response.body)).to eq({'fields' => [foo.merge({:value => nil}).stringify_keys]})
157+
expect(JSON.parse(response.body)).to eq({'fields' => [foo.merge({:value => nil}).transform_keys { |key| key.to_s.camelize(:lower) }.stringify_keys]})
158158
end
159159

160160
it 'should respond 500 with bad params' do
@@ -184,7 +184,8 @@
184184
ids: [1],
185185
fields: [updated_foo],
186186
collection_name: 'Island',
187-
changed_field: 'foo'
187+
changed_field: 'foo',
188+
is_read_only: true
188189
}
189190
}
190191
}
@@ -195,6 +196,7 @@
195196
expected = updated_foo.clone.merge({:value => 'baz'})
196197
expected[:widgetEdit] = nil
197198
expected.delete(:widget)
199+
expected = expected.transform_keys { |key| key.to_s.camelize(:lower) }
198200
expect(JSON.parse(response.body)).to eq({'fields' => [expected.stringify_keys]})
199201
end
200202

@@ -230,6 +232,9 @@
230232
expected_foo = updated_foo.clone.merge({ :widgetEdit => nil})
231233
expected_foo.delete(:widget)
232234

235+
expected_enum = expected_enum.transform_keys { |key| key.to_s.camelize(:lower) }
236+
expected_foo = expected_foo.transform_keys { |key| key.to_s.camelize(:lower) }
237+
233238
expect(JSON.parse(response.body)).to eq({'fields' => [expected_foo.stringify_keys, expected_enum.stringify_keys]})
234239
end
235240

@@ -253,6 +258,9 @@
253258
expected_foo = foo.clone.merge({ :widgetEdit => nil})
254259
expected_foo.delete(:widget)
255260

261+
expected_multiple_enum = expected_multiple_enum.transform_keys { |key| key.to_s.camelize(:lower) }
262+
expected_foo = expected_foo.transform_keys { |key| key.to_s.camelize(:lower) }
263+
256264
expect(JSON.parse(response.body)).to eq({'fields' => [expected_foo.stringify_keys, expected_multiple_enum.stringify_keys]})
257265
end
258266

@@ -277,6 +285,9 @@
277285
expected_foo = foo.clone.merge({ :widgetEdit => nil})
278286
expected_foo.delete(:widget)
279287

288+
expected_multiple_enum = expected_multiple_enum.transform_keys { |key| key.to_s.camelize(:lower) }
289+
expected_foo = expected_foo.transform_keys { |key| key.to_s.camelize(:lower) }
290+
280291
expect(JSON.parse(response.body)).to eq({'fields' => [expected_foo.stringify_keys, expected_multiple_enum.stringify_keys]})
281292
end
282293
end

0 commit comments

Comments
 (0)