Skip to content

Commit 5e3dd03

Browse files
authored
fix: remove unnecessary validation logic in serializer relationships (#754)
1 parent 60cfed3 commit 5e3dd03

File tree

2 files changed

+46
-8
lines changed

2 files changed

+46
-8
lines changed

app/serializers/forest_liana/serializer_factory.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,28 +60,20 @@ def self.get_serializer_name(active_record_class)
6060
unformatted_attr_name = serializer.unformat_name(attribute_name).to_sym
6161
object = nil
6262
is_collection = false
63-
is_valid_attr = false
6463
if serializer.has_one_relationships.has_key?(unformatted_attr_name)
6564
# only added this condition
6665
if root_object.class.reflect_on_association(unformatted_attr_name)&.polymorphic?
6766
options[:context][:unoptimized] = true
6867
end
6968

70-
is_valid_attr = true
7169
attr_data = serializer.has_one_relationships[unformatted_attr_name]
7270
object = serializer.has_one_relationship(unformatted_attr_name, attr_data)
7371
elsif serializer.has_many_relationships.has_key?(unformatted_attr_name)
74-
is_valid_attr = true
7572
is_collection = true
7673
attr_data = serializer.has_many_relationships[unformatted_attr_name]
7774
object = serializer.has_many_relationship(unformatted_attr_name, attr_data)
7875
end
7976

80-
if !is_valid_attr
81-
raise ForestAdmin::JSONAPI::Serializer::InvalidIncludeError.new(
82-
"'#{attribute_name}' is not a valid include.")
83-
end
84-
8577
if attribute_name != serializer.format_name(attribute_name)
8678
expected_name = serializer.format_name(attribute_name)
8779

spec/requests/resources_spec.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,52 @@
167167
end
168168
end
169169
end
170+
171+
describe 'csv' do
172+
it 'should return CSV with correct headers and data' do
173+
params = {
174+
fields: { 'Tree' => 'id,name,owner', 'owner' => 'name'},
175+
page: { 'number' => '1', 'size' => '10' },
176+
searchExtended: '0',
177+
sort: '-id',
178+
timezone: 'Europe/Paris',
179+
header: 'id,name,owner',
180+
}
181+
get '/forest/Tree.csv', params: params, headers: headers
182+
183+
expect(response.status).to eq(200)
184+
expect(response.headers['Content-Type']).to include('text/csv')
185+
expect(response.headers['Content-Disposition']).to include('attachment')
186+
187+
csv_content = response.body
188+
csv_lines = csv_content.split("\n")
189+
190+
expect(csv_lines.first).to eq(params[:header])
191+
expect(csv_lines[1]).to eq('1,Lemon Tree,Michel')
192+
end
193+
194+
it 'returns CSV with only requested fields and ignores optional relation' do
195+
params = {
196+
fields: { 'Tree' => 'id,name', 'owner' => 'name'},
197+
page: { 'number' => '1', 'size' => '10' },
198+
searchExtended: '0',
199+
sort: '-id',
200+
timezone: 'Europe/Paris',
201+
header: 'id,name',
202+
}
203+
get '/forest/Tree.csv', params: params, headers: headers
204+
205+
expect(response.status).to eq(200)
206+
expect(response.headers['Content-Type']).to include('text/csv')
207+
expect(response.headers['Content-Disposition']).to include('attachment')
208+
209+
csv_content = response.body
210+
csv_lines = csv_content.split("\n")
211+
212+
expect(csv_lines.first).to eq(params[:header])
213+
expect(csv_lines[1]).to eq('1,Lemon Tree')
214+
end
215+
end
170216
end
171217

172218
describe 'Requesting User resources', :type => :request do

0 commit comments

Comments
 (0)