spec/dslh_spec.rb in dslh-0.4.1 vs spec/dslh_spec.rb in dslh-0.4.2
- old
+ new
@@ -3085,7 +3085,113 @@
code 202
email "bar@winebarrel.com"
end
EOS
end
+
+ context 'with schema' do
+ let(:schema) do
+ <<-EOS
+type: map
+mapping:
+ "employees":
+ type: seq
+ sequence:
+ - type: map
+ mapping:
+ "_id":
+ type: str
+ required: yes
+ "code":
+ type: int
+ required: yes
+ "email":
+ type: str
+ "employees2":
+ type: seq
+ sequence:
+ - type: map
+ mapping:
+ "_id":
+ type: str
+ required: yes
+ "code":
+ type: int
+ required: yes
+ "email":
+ type: str
+ EOS
+ end
+
+ let(:expected_errmsg) do
+ <<-EOS.chomp
+[/employees/0/_id] '123': not a string.
+[/employees/1/email] '100': not a string.
+[/employees2/0] key 'code:' is required.
+[/employees2/0/code1] key 'code1:' is undefined.
+[/employees2/0/email1] key 'email1:' is undefined.
+[/employees3] key 'employees3:' is undefined.
+ EOS
+ end
+
+ it 'has no error' do
+ h = Dslh.eval(:schema => schema, :root_identify => true) do
+ employees "foo" do
+ code 101
+ email "foo@winebarrel.com"
+ end
+ employees "bar" do
+ code 102
+ email "bar@winebarrel.com"
+ end
+ employees2 "foo2" do
+ code 201
+ email "foo@winebarrel.com"
+ end
+ employees2 "bar2" do
+ code 202
+ email "bar@winebarrel.com"
+ end
+ end
+
+ expect(h).to eq(
+ {"employees"=>
+ {"foo"=>{"code"=>101, "email"=>"foo@winebarrel.com"},
+ "bar"=>{"code"=>102, "email"=>"bar@winebarrel.com"}},
+ "employees2"=>
+ {"foo2"=>{"code"=>201, "email"=>"foo@winebarrel.com"},
+ "bar2"=>{"code"=>202, "email"=>"bar@winebarrel.com"}}}
+ )
+ end
+
+ it 'has error' do
+ block = proc do
+ employees 123 do
+ code 101
+ email "foo@winebarrel.com"
+ end
+ employees "bar" do
+ code 102
+ email 100
+ end
+ employees2 "foo2" do
+ code1 201
+ email1 "foo@winebarrel.com"
+ end
+ employees3 "bar2" do
+ code 202
+ email "bar@winebarrel.com"
+ end
+ end
+
+ begin
+ h = Dslh.eval(:schema => schema, :root_identify => true, &block)
+ fail "must raise validation error"
+ rescue Dslh::ValidationError => e
+ errmsg = e.errors.map {|i| i.to_s }.join("\n")
+ expect(errmsg).to eq expected_errmsg
+ expect(e.message).to eq expected_errmsg
+ end
+ end
+ end
end
end