adopted-ember-addons / adopted-ember-addons/ember-cp-validations

Has-many relationship propagates 'messages' property but not 'errors' property

Ouverte
#685 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
Langage dominant
JavaScript
Étoiles
439
Forks
172
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

### 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](https://rawgit.com/offirgolan/ember-cp-validations/c4123c983e54f24dd790ffa1bad66cfdf2f47ec6/docs/classes/ResultCollection.html#property_errors), it shouldn't be possible for `errors` to be empty but `messages` non-empty. In fact, based on (what I assume is) [the code](https://github.com/offirgolan/ember-cp-validations/blob/v4.0.0-beta.10/addon/-private/internal-result-object.js#L42-L52), it looks like `error` shouldn't ever be `undefined`

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.