lhs 3.0.2 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|