lutaml-model 0.6.2 → 0.6.3

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
  SHA256:
3
- metadata.gz: 94d3957e15a5f50e2fc02c922f739acf71e99a592b97c4461c64b20cbc203bc5
4
- data.tar.gz: 0daf15d9e99b94ecce154a95b86d8b24a11bc4ae89f7e21f44cd7d251ec11ab9
3
+ metadata.gz: 99e9857c1f8a86d0fb3566c6d9e5e11723e203e7f58bd7fcfd3c5a0cb1702b6c
4
+ data.tar.gz: 270002530a82256d2682a060a9616320b76f9592aeb74d17451d26d311a45508
5
5
  SHA512:
6
- metadata.gz: a05e07d0948529796da6833032c9edae933a022734f9018fc459a4caf7e8ee6d475e325b002a58c4b5de764fecde077380ab528bc0a60f87eecef8919dfa16f4
7
- data.tar.gz: f6116e02319e52a64e6ed0817655b456ca0be1933f66fea70dab1999fbd4a1c2a70b52cfc60f153d1b18d6778b23882598c76ca7a4af0b7e7eb5eca0e563040c
6
+ metadata.gz: f1d98496343787aad60a34ee00c7df537b9fcd4160209cdd920d8265afdc048e7a26dbc3567b30ed1a5f5eb8120684b81dc9bb04a8964fd4495be67ae339bf5e
7
+ data.tar.gz: d51b92c1bda980ac8f30890236329880db515eb11e20e73a647dc78cdba2de58fc869d58a5905a20681f4b946dff205968f9f1cf619bac10aa677157497f05ff
@@ -6,13 +6,14 @@ module Lutaml
6
6
  self.class.attributes.each do |name, attr|
7
7
  value = public_send(:"#{name}")
8
8
  begin
9
- if value.respond_to?(:validate!)
10
- value.validate!
9
+ if value.respond_to?(:validate)
10
+ errors.concat(value.validate)
11
11
  else
12
12
  attr.validate_value!(value)
13
13
  end
14
14
  rescue Lutaml::Model::InvalidValueError,
15
15
  Lutaml::Model::CollectionCountOutOfRangeError,
16
+ Lutaml::Model::CollectionTrueMissingError,
16
17
  PatternNotMatchedError => e
17
18
  errors << e
18
19
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Model
5
- VERSION = "0.6.2"
5
+ VERSION = "0.6.3"
6
6
  end
7
7
  end
@@ -12,6 +12,18 @@ RSpec.describe Lutaml::Model::Validation do
12
12
  attribute :tags, :string, collection: true
13
13
  attribute :role, :string, collection: 1..3
14
14
  end)
15
+
16
+ stub_const("ValidationTestMainClass", Class.new(Lutaml::Model::Serializable) do
17
+ attribute :test_class, ValidationTestClass
18
+
19
+ xml do
20
+ map_element "test_class", to: :test_class
21
+ end
22
+
23
+ key_value do
24
+ map "test_class", to: :test_class
25
+ end
26
+ end)
15
27
  end
16
28
 
17
29
  let(:valid_instance) do
@@ -24,15 +36,29 @@ RSpec.describe Lutaml::Model::Validation do
24
36
  )
25
37
  end
26
38
 
39
+ let(:valid_nested_instance) do
40
+ ValidationTestMainClass.new(
41
+ test_class: valid_instance,
42
+ )
43
+ end
44
+
27
45
  describe "#validate" do
28
46
  it "returns an empty array for a valid instance" do
29
47
  expect(valid_instance.validate).to be_empty
30
48
  end
31
49
 
32
- xit "returns errors for invalid integer value" do
50
+ it "returns errors for invalid integer value" do
33
51
  instance = ValidationTestClass.new(age: "thirty", role: ["admin"])
34
52
  errors = instance.validate
35
- expect(errors).to include("Invalid value for attribute age: thirty")
53
+ expect(errors).to eq([])
54
+ expect(instance.age).to be_nil
55
+ end
56
+
57
+ it "raises error if Array is set but collection is not set" do
58
+ instance = ValidationTestClass.new(name: ["admin"])
59
+ expect do
60
+ instance.validate
61
+ end.not_to raise_error(Lutaml::Model::CollectionTrueMissingError)
36
62
  end
37
63
 
38
64
  it "returns errors for value not in allowed set" do
@@ -55,17 +81,20 @@ RSpec.describe Lutaml::Model::Validation do
55
81
  end
56
82
  end
57
83
 
58
- xit "returns multiple errors for multiple invalid attributes" do
84
+ it "returns multiple errors for multiple invalid attributes" do
59
85
  instance = ValidationTestClass.new(name: "123", age: "thirty",
60
86
  email: "invalid@example.com", role: [])
61
87
  expect do
62
88
  instance.validate!
63
89
  end.to raise_error(Lutaml::Model::ValidationError) do |error|
64
- expect(error.error_messages.join("\n")).to include("Invalid value for attribute age: thirty")
65
90
  expect(error.error_messages.join("\n")).to include("email is `invalid@example.com`, must be one of the following [test@example.com, user@example.com]")
66
91
  expect(error.error_messages.join("\n")).to include("role count is 0, must be between 1 and 3")
67
92
  end
68
93
  end
94
+
95
+ it "returns an empty array for a valid nested instance" do
96
+ expect(valid_nested_instance.validate).to be_empty
97
+ end
69
98
  end
70
99
 
71
100
  describe "#validate!" do
@@ -73,13 +102,31 @@ RSpec.describe Lutaml::Model::Validation do
73
102
  expect { valid_instance.validate! }.not_to raise_error
74
103
  end
75
104
 
76
- xit "raises a ValidationError with all error messages for an invalid instance" do
105
+ it "raises a ValidationError with all error messages for an invalid instance" do
77
106
  instance = ValidationTestClass.new(name: "test", age: "thirty")
78
107
  expect do
79
108
  instance.validate!
80
109
  end.to raise_error(Lutaml::Model::ValidationError) do |error|
81
110
  expect(error.error_messages.join("\n")).to include("role count is 0, must be between 1 and 3")
82
- expect(error.error_messages.join("\n")).to include("Invalid value for attribute age: thirty")
111
+ end
112
+ end
113
+
114
+ it "validates nested ValidationTestClass instance" do
115
+ invalid_nested = ValidationTestMainClass.new(
116
+ test_class: ValidationTestClass.new(
117
+ name: "John Doe",
118
+ age: 30,
119
+ email: "invalid@example.com",
120
+ role: ["admin"],
121
+ ),
122
+ )
123
+
124
+ expect do
125
+ invalid_nested.validate!
126
+ end.to raise_error(Lutaml::Model::ValidationError) do |error|
127
+ expect(error.error_messages.join("\n")).to include(
128
+ "email is `invalid@example.com`, must be one of the following [test@example.com, user@example.com]",
129
+ )
83
130
  end
84
131
  end
85
132
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-02-13 00:00:00.000000000 Z
11
+ date: 2025-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64