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

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

未關閉
#685 0 則留言 1 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
JavaScript
星號
439
分支
172
PR 合併指標
30 天內沒有已合併 PR

描述

### 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`

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。