Has-many relationship propagates 'messages' property but not 'errors' property
BlueRaja opened this issue · comments
BlueRaja commented
Environment
- Ember Version: 3.16
- Ember CLI Version: 3.16?
- Ember CP Validations Version: 4.0.0-beta.10
Steps to Reproduce
Here is our setup, with doubly-nested classes. It might reproduce with only a single layer of nesting, though:
outerClass:
buildValidations({
middleClass: validator('has-many'),
});
middleClass:
buildValidations({
innerClass: validator('has-many'),
});
innerClass:
buildValidations({
value: validator('presence', { presence: true }),
});
Here is what the data looks like:
///////////////////////////////////
// outerClass validations
///////////////////////////////////
this.get('outerClass.validations.isValid')
> false
this.get('outerClass.validations.messages')
> ["This field can't be blank"]
this.get('outerClass.validations.errors')
> []
///////////////////////////////////
// Access middleClass through validations.attrs
///////////////////////////////////
this.get('outerClass.validations.attrs.middleClass.isValid')
> false
this.get('outerClass.validations.attrs.middleClass.messages')
> ["This field can't be blank"]
this.get('outerClass.validations.attrs.middleClass.message')
> "This field can't be blank"
this.get('outerClass.validations.attrs.middleClass.errors')
> []
this.get('outerClass.validations.attrs.middleClass.error')
> undefined
///////////////////////////////////
// Access middleClass directly:
///////////////////////////////////
this.get('outerClass.middleClass.0.validations.messages')
> ["This field can't be blank"]
this.get('outerClass.middleClass.0.validations.errors')
> []
///////////////////////////////////
// Access innerClass through middleClass.validations.attrs
///////////////////////////////////
this.get('outerClass.middleClass.0.validations.attrs.innerClass.messages')
> ["This field can't be blank"]
this.get('outerClass.middleClass.0.validations.attrs.innerClass.errors')
> []
///////////////////////////////////
// Access innerClass directly
///////////////////////////////////
this.get('outerClass.middleClass.0.innerClass.0.validations.messages')
> ["This field can't be blank"]
this.get('outerClass.middleClass.0.innerClass.0.validations.errors')
> [Class]
As you can see, the innerClass
has an error on it, but the hasMany
is not propagating it.
Based on the documentation, it shouldn't be possible for errors
to be empty but messages
non-empty. In fact, based on (what I assume is) the code, it looks like error
shouldn't ever be undefined