lhs 1.2.3 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d19aca4a6fcb6ae3919253eb5dfc56dd15b9dee
4
- data.tar.gz: 923b15da62737dd1dd0b1f1fa9b326eba4401da9
3
+ metadata.gz: 4d2fe9d241de70e1547f04ecc340becf4758a22e
4
+ data.tar.gz: 9203ee6326411236cf93485beb289862fd3ec060
5
5
  SHA512:
6
- metadata.gz: 96cc284a37e9107fbb5eb86ca6baae8fa97cf23cef4db5dea91b78331d5ee145d03d2d27c8da555eb231ecb6b12595630bf9c10884b768f0c6a3a778db4818c2
7
- data.tar.gz: e99b4c5f0d0f49b99e852e7439515b361c7d566d2bc8a1991d0f96d7fae3aeacd9c5883e180f57e12ad5ac6f6533c8827b56e11f59817502715a00e5debc4d0d
6
+ metadata.gz: 6d5169f5bc32a55a05e0ed1ffbe5e236e79f65714a7f7ae177516517c0dbd3d6f06082dfb5393e3188294db94b9fb958fe9bda6459ef1bfc3da77e13a8fc4c2f
7
+ data.tar.gz: 6d86b6cc756b977d07a991794b91665b82b0e426ff5d0321a1f4dcad0bfdbdfb1ea4bbdce65adf62015675c07d54e1ae25c7736c192da863f9ed7131c4b2e56d
@@ -64,21 +64,34 @@ class LHS::Errors
64
64
 
65
65
  private
66
66
 
67
- def messages_from_response(response)
67
+ def add_error(messages, key, value)
68
+ messages[key] ||= []
69
+ messages[key].push(value)
70
+ end
71
+
72
+ def parse_messages(json)
68
73
  messages = {}
69
- return messages if !response.body.is_a?(String) || response.body.length.zero?
70
- json = JSON.parse(response.body)
71
- return messages unless json['fields']
72
- json['fields'].each do |field|
73
- name = field['name'].to_sym
74
- messages[name] ||= []
75
- field['details'].each do |detail|
76
- messages[name].push(detail['code'])
74
+ if json['fields']
75
+ json['fields'].each do |field|
76
+ field['details'].each do |detail|
77
+ add_error(messages, field['name'].to_sym, detail['code'])
78
+ end
79
+ end
80
+ end
81
+ if json['field_errors']
82
+ json['field_errors'].each do |field_error|
83
+ add_error(messages, field_error['path'].join('.').to_sym, field_error['code'])
77
84
  end
78
85
  end
79
86
  messages
80
87
  end
81
88
 
89
+ def messages_from_response(response)
90
+ return {} if !response.body.is_a?(String) || response.body.length.zero?
91
+ json = JSON.parse(response.body)
92
+ parse_messages(json)
93
+ end
94
+
82
95
  def message_from_response(response)
83
96
  json = JSON.parse(response.body)
84
97
  json['message']
@@ -1,3 +1,3 @@
1
1
  module LHS
2
- VERSION = "1.2.3"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -14,14 +14,14 @@ describe LHS::Item do
14
14
  end
15
15
  end
16
16
 
17
- let(:save_error) do
17
+ let(:error_format_fields) do
18
18
  {
19
19
  "status" => 400,
20
20
  "message" => "ratings must be set when review or name or review_title is set | The property value is required; it cannot be null, empty, or blank.",
21
21
  "fields" => [
22
22
  {
23
23
  "name" => "ratings",
24
- "details" => [{ "code" => "REQUIRED_PROPERTY_VALUE" }]
24
+ "details" => [{ "code" => "REQUIRED_PROPERTY_VALUE" }, { "code" => "UNSUPPORTED_PROPERTY_VALUE" }]
25
25
  },{
26
26
  "name" => "recommended",
27
27
  "details" => [{"code" => "REQUIRED_PROPERTY_VALUE"}]
@@ -30,9 +30,29 @@ describe LHS::Item do
30
30
  }
31
31
  end
32
32
 
33
- it 'provides errors when creation failed' do
33
+ let(:error_format_field_errors) do
34
+ {
35
+ "status" => 400,
36
+ "message" => "Some data in the request body failed validation. Inspect the field errors for details.",
37
+ "field_errors" => [ {
38
+ "code" => "UNSUPPORTED_PROPERTY_VALUE",
39
+ "path" => [ "gender" ],
40
+ "message" => "The property value is unsupported. Supported values are: FEMALE, MALE"
41
+ }, {
42
+ "code" => "INCOMPLETE_PROPERTY_VALUE",
43
+ "path" => [ "gender" ],
44
+ "message" => "The property value is incomplete. It misses some data"
45
+ }, {
46
+ "code" => "INCOMPLETE_PROPERTY_VALUE",
47
+ "path" => [ "contract", "entry_id" ],
48
+ "message" => "The property value is incomplete. It misses some data"
49
+ } ]
50
+ }
51
+ end
52
+
53
+ it 'parses fields correctly when creation failed' do
34
54
  stub_request(:post, "#{datastore}/feedbacks")
35
- .to_return(status: 400, body: save_error.to_json)
55
+ .to_return(status: 400, body: error_format_fields.to_json)
36
56
  record = SomeService.build
37
57
  record.name = 'Steve'
38
58
  result = record.save
@@ -41,8 +61,22 @@ describe LHS::Item do
41
61
  expect(record.name).to eq 'Steve'
42
62
  expect(record.errors.include?(:ratings)).to eq true
43
63
  expect(record.errors.include?(:recommended)).to eq true
44
- expect(record.errors[:ratings]).to eq ['REQUIRED_PROPERTY_VALUE']
64
+ expect(record.errors[:ratings]).to eq ['REQUIRED_PROPERTY_VALUE', 'UNSUPPORTED_PROPERTY_VALUE']
45
65
  expect(record.errors[:recommended]).to eq ['REQUIRED_PROPERTY_VALUE']
46
66
  end
67
+
68
+ it 'parses field errors correctly when creation failed' do
69
+ stub_request(:post, "#{datastore}/feedbacks")
70
+ .to_return(status: 400, body: error_format_field_errors.to_json)
71
+ record = SomeService.build
72
+ record.name = 'Steve'
73
+ result = record.save
74
+ expect(result).to eq false
75
+ expect(record.errors).to be
76
+ expect(record.errors.include?(:gender)).to eq true
77
+ expect(record.errors.include?(:"contract.entry_id")).to eq true
78
+ expect(record.errors[:gender]).to eq ['UNSUPPORTED_PROPERTY_VALUE', 'INCOMPLETE_PROPERTY_VALUE']
79
+ expect(record.errors[:"contract.entry_id"]).to eq ['INCOMPLETE_PROPERTY_VALUE']
80
+ end
47
81
  end
48
82
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - local.ch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-26 00:00:00.000000000 Z
11
+ date: 2015-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lhc