aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-08-25 18:11:06 +0200
committerTeddy Wing2017-08-25 18:11:06 +0200
commit9e4616f8dd82545aa2101aee96ca08615343c28e (patch)
tree7bf09039a1147c5fabff28b25c0eac82499b668f
parent614719bfd45d496c686366842fa57277e71664dd (diff)
downloadchouette-core-9e4616f8dd82545aa2101aee96ca08615343c28e.tar.bz2
ErrorFormat: Change collection structure
These tests were failing: 1) NetexImport POST netex_imports with correct credentials and incorrect request behaves like illegal attributes missing file does not succeed Failure/Error: expect( json_response_body['errors'][bad_attribute.to_s] ).not_to be_empty TypeError: no implicit conversion of String into Integer Shared Example Group: "illegal attributes" called from ./spec/requests/api/v1/netex_import_spec.rb:90 # ./spec/requests/api/v1/netex_import_spec.rb:77:in `[]' # ./spec/requests/api/v1/netex_import_spec.rb:77:in `block (6 levels) in <top (required)>' # -e:1:in `<main>' 2) NetexImport POST netex_imports with correct credentials and incorrect request name already taken behaves like illegal attributes missing name does not succeed Failure/Error: expect( json_response_body['errors'][bad_attribute.to_s] ).not_to be_empty TypeError: no implicit conversion of String into Integer Shared Example Group: "illegal attributes" called from ./spec/requests/api/v1/netex_import_spec.rb:96 # ./spec/requests/api/v1/netex_import_spec.rb:77:in `[]' # ./spec/requests/api/v1/netex_import_spec.rb:77:in `block (6 levels) in <top (required)>' # -e:1:in `<main>' The problem was caused by the fact that the error messages come back from `ErrorFormat` as an array of hashes, which contain a single key corresponding to the invalid field. Instead, the error messages should be returned as a single hash with a bunch of keys corresponding to the invalid fields. This change gets the above tests to pass.
-rw-r--r--app/models/concerns/error_format.rb4
-rw-r--r--spec/models/concerns/error_format_spec.rb14
2 files changed, 10 insertions, 8 deletions
diff --git a/app/models/concerns/error_format.rb b/app/models/concerns/error_format.rb
index 4e6b3f328..7f5c357ce 100644
--- a/app/models/concerns/error_format.rb
+++ b/app/models/concerns/error_format.rb
@@ -1,7 +1,9 @@
module ErrorFormat extend self
def details error_object
- error_object.errors.messages.map(&partial(:detail, error_object))
+ error_object.errors.messages.inject({}) do |hash, error|
+ hash.merge(partial(:detail, error_object, error).call)
+ end
end
private
diff --git a/spec/models/concerns/error_format_spec.rb b/spec/models/concerns/error_format_spec.rb
index 9b0110bcd..45b4c2f60 100644
--- a/spec/models/concerns/error_format_spec.rb
+++ b/spec/models/concerns/error_format_spec.rb
@@ -18,9 +18,9 @@ RSpec.describe ErrorFormat do
it 'if an error is present and validation has been carried out' do
invalid = build_stubbed(:referential, name: nil)
expect( invalid ).not_to be_valid
- expect( described_class.details(invalid) ).to eq([
- {name: {error: 'doit ĂȘtre rempli(e)', value: nil}}
- ])
+ expect( described_class.details(invalid) ).to eq({
+ name: { error: 'doit ĂȘtre rempli(e)', value: nil }
+ })
end
it 'and can even hold many errors' do
@@ -31,10 +31,10 @@ RSpec.describe ErrorFormat do
slug: 'hello world'
)
expect( invalid ).not_to be_valid
- expect( described_class.details(invalid) ).to eq([
- {name: {error: "n'est pas disponible", value: 'hello'}},
- {slug: {error: "n'est pas valide", value: 'hello world'}}
- ])
+ expect( described_class.details(invalid) ).to eq({
+ name: { error: "n'est pas disponible", value: 'hello' },
+ slug: { error: "n'est pas valide", value: 'hello world' }
+ })
end
end
end