lhs 3.0.2 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/lhs/concerns/item/validation.rb +2 -1
- data/lib/lhs/version.rb +1 -1
- data/spec/item/validation_spec.rb +73 -47
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5457dca94fecc849496d18aaff5a9caa087608f8
|
4
|
+
data.tar.gz: c1854bf19ecd17ab7383cda4ee2cc482e068fecc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ceabba06f22f3337a24ef9410b7f2cd17b072c4c86ba3d4e8e8f01991d98f51eaa10448d77021baf5bb3055fe5226127ab8d6ccebe1da993b43c68a5e0691cfd
|
7
|
+
data.tar.gz: 861a4ff34ea47ed94c33e3b247ad75a25119f74a9a430b307a4b8f3bd05459cfb29fd280d00d4be986c86b3ea7a3062bb378f3a58390f8b5a8712c0cc10d4d05
|
@@ -9,7 +9,8 @@ class LHS::Item < LHS::Proxy
|
|
9
9
|
self.errors = nil
|
10
10
|
fail 'No validation endpoint found!' unless validation_endpoint
|
11
11
|
record = LHS::Record.for_url(validation_endpoint.url)
|
12
|
-
|
12
|
+
validation_params = validation_endpoint.options[:validates] == true ? { persist: false } : { validation_endpoint.options[:validates] => false }
|
13
|
+
params = validation_endpoint.options.fetch(:params, {}).merge(validation_params)
|
13
14
|
begin
|
14
15
|
record.request(
|
15
16
|
url: validation_endpoint.url,
|
data/lib/lhs/version.rb
CHANGED
@@ -3,83 +3,109 @@ require 'rails_helper'
|
|
3
3
|
describe LHS::Item do
|
4
4
|
let(:datastore) { 'http://local.ch' }
|
5
5
|
|
6
|
-
|
7
|
-
LHC.config.placeholder('datastore', datastore)
|
8
|
-
class User < LHS::Record
|
9
|
-
endpoint ':datastore/v2/users', validates: true
|
10
|
-
end
|
11
|
-
mock_validation
|
12
|
-
end
|
6
|
+
let(:validation_parameter) { 'persist' }
|
13
7
|
|
14
8
|
let(:mock_validation) do
|
15
9
|
successful_validation
|
16
10
|
end
|
17
11
|
|
18
12
|
let(:successful_validation) do
|
19
|
-
stub_request(:post, "#{datastore}/v2/users
|
13
|
+
stub_request(:post, "#{datastore}/v2/users?#{validation_parameter}=false").to_return(body: '{}')
|
20
14
|
end
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
.to_return(status: 400,
|
25
|
-
body: {
|
26
|
-
field_errors: [{ code: "UNSUPPORTED_PROPERTY_VALUE", "path" => ["email"] }]
|
27
|
-
}.to_json
|
28
|
-
)
|
16
|
+
before(:each) do
|
17
|
+
mock_validation
|
29
18
|
end
|
30
19
|
|
31
|
-
context '
|
20
|
+
context 'custom validation parameter' do
|
21
|
+
let(:validation_parameter) { 'publish' }
|
22
|
+
|
32
23
|
let(:user) do
|
33
24
|
User.build(email: 'steve@local.ch')
|
34
25
|
end
|
35
26
|
|
36
|
-
|
37
|
-
|
27
|
+
before(:each) do
|
28
|
+
LHC.config.placeholder('datastore', datastore)
|
29
|
+
class User < LHS::Record
|
30
|
+
endpoint ':datastore/v2/users', validates: 'publish'
|
31
|
+
end
|
38
32
|
end
|
39
33
|
|
40
|
-
it '
|
34
|
+
it 'validates' do
|
41
35
|
expect(user.valid?).to eq true
|
42
|
-
user.email = 'not a valid email'
|
43
|
-
failing_validation
|
44
|
-
expect(user.valid?).to eq false
|
45
|
-
expect(user.errors[:email]).to be
|
46
36
|
end
|
47
37
|
end
|
48
38
|
|
49
|
-
context '
|
50
|
-
|
51
|
-
|
39
|
+
context 'default parameter' do
|
40
|
+
before(:each) do
|
41
|
+
LHC.config.placeholder('datastore', datastore)
|
42
|
+
class User < LHS::Record
|
43
|
+
endpoint ':datastore/v2/users', validates: true
|
44
|
+
end
|
52
45
|
end
|
53
46
|
|
54
|
-
let(:
|
55
|
-
|
47
|
+
let(:failing_validation) do
|
48
|
+
stub_request(:post, "#{datastore}/v2/users?persist=false")
|
49
|
+
.to_return(status: 400,
|
50
|
+
body: {
|
51
|
+
field_errors: [{ code: "UNSUPPORTED_PROPERTY_VALUE", "path" => ["email"] }]
|
52
|
+
}.to_json
|
53
|
+
)
|
56
54
|
end
|
57
55
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
56
|
+
context 'valid data' do
|
57
|
+
let(:user) do
|
58
|
+
User.build(email: 'steve@local.ch')
|
59
|
+
end
|
62
60
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
61
|
+
it 'validates' do
|
62
|
+
expect(user.valid?).to eq true
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'turns to be invalid if validating on changed, invalid data' do
|
66
|
+
expect(user.valid?).to eq true
|
67
|
+
user.email = 'not a valid email'
|
68
|
+
failing_validation
|
69
|
+
expect(user.valid?).to eq false
|
70
|
+
expect(user.errors[:email]).to be
|
71
|
+
end
|
69
72
|
end
|
70
|
-
end
|
71
73
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
74
|
+
context 'invalid data' do
|
75
|
+
let(:user) do
|
76
|
+
User.build(email: 'im not an email address')
|
77
|
+
end
|
78
|
+
|
79
|
+
let(:mock_validation) do
|
80
|
+
failing_validation
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'does not validate and provides error messages' do
|
84
|
+
expect(user.valid?).to eq false
|
85
|
+
expect(user.errors[:email]).to be
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'resets errors when revalidating' do
|
89
|
+
expect(user.valid?).to eq false
|
90
|
+
user.email = 'steve@local.ch'
|
91
|
+
successful_validation
|
92
|
+
expect(user.valid?).to eq true
|
93
|
+
expect(user.errors).to be_nil
|
76
94
|
end
|
77
95
|
end
|
78
96
|
|
79
|
-
|
80
|
-
|
81
|
-
Favorite
|
82
|
-
|
97
|
+
context 'endpoint does not support validations' do
|
98
|
+
before(:each) do
|
99
|
+
class Favorite < LHS::Record
|
100
|
+
endpoint ':datastore/v2/favorites'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'fails when trying to use an endpoint for validations that does not support it' do
|
105
|
+
expect(lambda do
|
106
|
+
Favorite.build.valid?
|
107
|
+
end).to raise_error('Endpoint does not support validations!')
|
108
|
+
end
|
83
109
|
end
|
84
110
|
end
|
85
111
|
end
|