-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathcoercible_model_spec.rb
More file actions
39 lines (32 loc) · 1.33 KB
/
coercible_model_spec.rb
File metadata and controls
39 lines (32 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# frozen_string_literal: true
require "spec_helper"
require "bigdecimal"
describe "Definition.CoercibleModel" do
let(:test_model_class) do
AddressModelClass = address_model_class
Class.new(Definition::Model) do
required :username, Definition.Type(String)
required :address, Definition.CoercibleModel(AddressModelClass)
end
end
let(:address_model_class) do
Class.new(Definition::Model) do
required :street, Definition.Type(String)
required :postal_code, Definition.Type(String)
end
end
it "intantiates correctly when address is a plain hash" do
value = { username: "John", address: { street: "Fakestr", postal_code: "2222" } }
model_instance = test_model_class.new(value)
expect(model_instance.address).to eq(address_model_class.new(street: "Fakestr", postal_code: "2222"))
expect(model_instance.address).to be_a(address_model_class)
expect(model_instance.username).to eq("John")
end
it "instantiates correctly when address is a Address instance" do
address = address_model_class.new(street: "Fakestr", postal_code: "2222")
model_instance = test_model_class.new(username: "John", address: address)
expect(model_instance.address).to eq(address)
expect(model_instance.address).to be_a(address_model_class)
expect(model_instance.username).to eq("John")
end
end