@@ -12,8 +12,13 @@ const Author = DS.Model.extend(ModelMixin, {
12
12
} ) ;
13
13
14
14
const Post = DS . Model . extend ( ModelMixin , {
15
- title : DS . attr ( 'string' ) ,
16
- author : DS . belongsTo ( { async : false } )
15
+ title : DS . attr ( 'string' ) ,
16
+ author : DS . belongsTo ( { async : false } ) ,
17
+ tags : DS . hasMany ( { async : true } )
18
+ } ) ;
19
+
20
+ const Tag = DS . Model . extend ( ModelMixin , {
21
+ name : DS . attr ( 'string' )
17
22
} ) ;
18
23
19
24
moduleForAcceptance ( 'Unit | Mixin | model' , {
@@ -22,6 +27,7 @@ moduleForAcceptance('Unit | Mixin | model', {
22
27
store = getOwner ( this ) . lookup ( 'service:store' ) ;
23
28
getOwner ( this ) . register ( 'model:post' , Post ) ;
24
29
getOwner ( this ) . register ( 'model:author' , Author ) ;
30
+ getOwner ( this ) . register ( 'model:tag' , Tag ) ;
25
31
}
26
32
} ) ;
27
33
@@ -54,29 +60,65 @@ test('#hasDirtyAttributes', function(assert) {
54
60
} ) ;
55
61
} ) ;
56
62
57
- test ( '#save when resetRelations: false' , function ( assert ) {
58
- Ember . run ( ( ) => {
59
- let author = store . createRecord ( 'author' , { name : 'Joe Author' } ) ;
60
- let post = store . createRecord ( 'post' , { title : 'title' , author : author } ) ;
61
-
62
- let done = assert . async ( ) ;
63
- post . save ( { resetRelations : false } ) . then ( ( p ) => {
64
- assert . equal ( p . get ( 'author' ) , author ) ;
65
- done ( ) ;
63
+ // note tag with id 3 does not send attributes
64
+ test ( 'resetting relations when only sending dirty relations' , function ( assert ) {
65
+ let done = assert . async ( ) ;
66
+ server . patch ( '/posts/:id' , ( db , request ) => {
67
+ let relationships = JSON . parse ( request . requestBody ) . data . relationships ;
68
+ assert . deepEqual ( relationships , {
69
+ tags : {
70
+ data : [
71
+ {
72
+ id : '2' ,
73
+ type : 'tags' ,
74
+ attributes : { name : 'tag1 changed' }
75
+ } ,
76
+ {
77
+ id : '3' ,
78
+ type : 'tags'
79
+ }
80
+ ]
81
+ }
66
82
} ) ;
83
+ done ( ) ;
84
+ let post = db . posts . find ( request . params . id ) ;
85
+ post . tags . models [ 0 ] . update ( { name : 'tag1 changed' } ) ;
86
+ return post ;
67
87
} ) ;
68
- } ) ;
69
88
70
- test ( '#save when resetRelations: true' , function ( assert ) {
89
+ let post = server . create ( 'post' ) ;
90
+ post . createTag ( { name : 'tag1' } ) ;
91
+ post . createTag ( { name : 'tag2' } ) ;
71
92
Ember . run ( ( ) => {
72
- let author = store . createRecord ( 'author' , { name : 'Joe Author' } ) ;
73
- let post = store . createRecord ( 'post' , { title : 'title' , author : author } ) ;
93
+ store . pushPayload ( {
94
+ data : {
95
+ type : 'posts' ,
96
+ id : 1 ,
97
+ relationships : {
98
+ tags : {
99
+ data : [
100
+ { type : 'tags' , id : '2' } ,
101
+ { type : 'tags' , id : '3' }
102
+ ]
103
+ }
104
+ }
105
+ } ,
106
+ included : [
107
+ { type : 'tags' , id : '2' , attributes : { name : 'tag1' } } ,
108
+ { type : 'tags' , id : '3' , attributes : { name : 'tag2' } }
109
+ ]
110
+ } ) ;
111
+ } ) ;
74
112
75
- let done = assert . async ( ) ;
76
- post . save ( ) . then ( ( p ) => {
77
- let author = p . get ( 'author' ) ;
78
- assert . equal ( author , null ) ;
79
- done ( ) ;
113
+ post = store . peekRecord ( 'post' , 1 ) ;
114
+ assert . equal ( post . get ( 'tags.length' ) , 2 ) ;
115
+ post . set ( 'tags.firstObject.name' , 'tag1 changed' ) ;
116
+
117
+ let done2 = assert . async ( ) ;
118
+ Ember . run ( ( ) => {
119
+ post . save ( { adapterOptions : { relationships : 'tags' } } ) . then ( ( p ) => {
120
+ assert . equal ( p . get ( 'tags.length' ) , 2 ) ;
121
+ done2 ( ) ;
80
122
} ) ;
81
123
} ) ;
82
124
} ) ;
0 commit comments