@@ -3,7 +3,7 @@ import ArrayProxy from '@ember/array/proxy';
33import EmberObject from '@ember/object' ;
44import { isNone } from '@ember/utils' ;
55import { A as emberArray } from '@ember/array' ;
6- import DS from 'ember-data' ;
6+ import Model , { belongsTo , hasMany } from '@ ember-data/model ' ;
77import setupObject from '../../helpers/setup-object' ;
88import DefaultMessages from 'dummy/validators/messages' ;
99import BelongsToValidator from 'ember-cp-validations/validators/belongs-to' ;
@@ -508,16 +508,22 @@ module('Integration | Validations | Model Relationships', function (hooks) {
508508 assert . true ( user . get ( 'validations.attrs.fullName.isValid' ) ) ;
509509 } ) ;
510510
511- test ( 'presence on empty DS.PromiseObject ' , function ( assert ) {
511+ test ( 'presence on empty belongsTo - sync ' , function ( assert ) {
512512 this . owner . register ( 'validator:presence' , PresenceValidator ) ;
513+ this . owner . register (
514+ 'model:user' ,
515+ Model . extend (
516+ buildValidations ( {
517+ friend : validator ( 'presence' , true ) ,
518+ } ) ,
519+ {
520+ friend : belongsTo ( 'user' , { async : false , inverse : null } ) ,
521+ }
522+ )
523+ ) ;
513524
514- let Validations = buildValidations ( {
515- friend : validator ( 'presence' , true ) ,
516- } ) ;
517-
518- let user = setupObject ( this , EmberObject . extend ( Validations ) , {
519- friend : DS . PromiseObject . create ( ) ,
520- } ) ;
525+ const store = this . owner . lookup ( 'service:store' ) ;
526+ const user = store . createRecord ( 'user' ) ;
521527
522528 let { validations, model } = user . get ( 'validations' ) . validateSync ( ) ;
523529
@@ -533,16 +539,53 @@ module('Integration | Validations | Model Relationships', function (hooks) {
533539 assert . strictEqual ( friend . get ( 'message' ) , "This field can't be blank" ) ;
534540 } ) ;
535541
536- test ( 'presence on empty DS.PromiseArray' , function ( assert ) {
542+ test ( 'presence on empty belongsTo - async' , async function ( assert ) {
537543 this . owner . register ( 'validator:presence' , PresenceValidator ) ;
544+ this . owner . register (
545+ 'model:user' ,
546+ Model . extend (
547+ buildValidations ( {
548+ friend : validator ( 'presence' , true ) ,
549+ } ) ,
550+ {
551+ friend : belongsTo ( 'user' , { async : true , inverse : null } ) ,
552+ }
553+ )
554+ ) ;
538555
539- let Validations = buildValidations ( {
540- friends : validator ( 'presence' , true ) ,
541- } ) ;
556+ const store = this . owner . lookup ( 'service:store' ) ;
557+ const user = store . createRecord ( 'user' ) ;
542558
543- let user = setupObject ( this , EmberObject . extend ( Validations ) , {
544- friends : DS . PromiseArray . create ( ) ,
545- } ) ;
559+ let { validations, model } = await user . get ( 'validations' ) . validate ( ) ;
560+
561+ assert . strictEqual ( model , user , 'expected model to be the correct model' ) ;
562+ assert . deepEqual (
563+ validations . get ( 'content' ) . getEach ( 'attribute' ) . sort ( ) ,
564+ [ 'friend' ] . sort ( )
565+ ) ;
566+
567+ let friend = validations . get ( 'content' ) . findBy ( 'attribute' , 'friend' ) ;
568+
569+ assert . false ( friend . get ( 'isValid' ) ) ;
570+ assert . strictEqual ( friend . get ( 'message' ) , "This field can't be blank" ) ;
571+ } ) ;
572+
573+ test ( 'presence on empty hasMany - sync' , function ( assert ) {
574+ this . owner . register ( 'validator:presence' , PresenceValidator ) ;
575+ this . owner . register (
576+ 'model:user' ,
577+ Model . extend (
578+ buildValidations ( {
579+ friends : validator ( 'presence' , true ) ,
580+ } ) ,
581+ {
582+ friends : hasMany ( 'user' , { async : false , inverse : null } ) ,
583+ }
584+ )
585+ ) ;
586+
587+ const store = this . owner . lookup ( 'service:store' ) ;
588+ const user = store . createRecord ( 'user' ) ;
546589
547590 let { validations, model } = user . get ( 'validations' ) . validateSync ( ) ;
548591
@@ -558,6 +601,37 @@ module('Integration | Validations | Model Relationships', function (hooks) {
558601 assert . strictEqual ( friends . get ( 'message' ) , "This field can't be blank" ) ;
559602 } ) ;
560603
604+ test ( 'presence on empty hasMany - async' , async function ( assert ) {
605+ this . owner . register ( 'validator:presence' , PresenceValidator ) ;
606+ this . owner . register (
607+ 'model:user' ,
608+ Model . extend (
609+ buildValidations ( {
610+ friends : validator ( 'presence' , true ) ,
611+ } ) ,
612+ {
613+ friends : hasMany ( 'user' , { async : true , inverse : null } ) ,
614+ }
615+ )
616+ ) ;
617+
618+ const store = this . owner . lookup ( 'service:store' ) ;
619+ const user = store . createRecord ( 'user' ) ;
620+
621+ let { validations, model } = await user . get ( 'validations' ) . validate ( ) ;
622+
623+ assert . strictEqual ( model , user , 'expected model to be the correct model' ) ;
624+ assert . deepEqual (
625+ validations . get ( 'content' ) . getEach ( 'attribute' ) . sort ( ) ,
626+ [ 'friends' ] . sort ( )
627+ ) ;
628+
629+ let friends = validations . get ( 'content' ) . findBy ( 'attribute' , 'friends' ) ;
630+
631+ assert . false ( friends . get ( 'isValid' ) ) ;
632+ assert . strictEqual ( friends . get ( 'message' ) , "This field can't be blank" ) ;
633+ } ) ;
634+
561635 test ( 'debounce should work across nested HasMany relationships' , function ( assert ) {
562636 this . owner . register ( 'validator:presence' , PresenceValidator ) ;
563637 this . owner . register ( 'validator:has-many' , HasManyValidator ) ;
0 commit comments