@@ -11,6 +11,7 @@ const options = { Mongoose: mongoose, connections: { mongoose } };
1111
1212describe ( 'service > resource-getter' , ( ) => {
1313 let ReviewModel ;
14+ let UserModel ;
1415 let scopeSpy ;
1516
1617 beforeAll ( async ( ) => {
@@ -24,16 +25,36 @@ describe('service > resource-getter', () => {
2425 fields : [
2526 { field : '_id' , type : 'String' } ,
2627 { field : 'rating' , type : 'Number' } ,
28+ { field : 'reviewer' , type : 'String' , reference : 'User._id' } ,
29+ ] ,
30+ } ,
31+ User : {
32+ name : 'User' ,
33+ idField : '_id' ,
34+ primaryKeys : [ '_id' ] ,
35+ isCompositePrimary : false ,
36+ searchFields : [ 'name' ] ,
37+ fields : [
38+ { field : '_id' , type : 'String' } ,
39+ { field : 'name' , type : 'String' } ,
2740 ] ,
2841 } ,
2942 } ,
3043 } ;
3144
3245 await mongooseConnect ( ) ;
3346
34- ReviewModel = mongoose . model ( 'ReviewsRGet' , new mongoose . Schema ( {
47+ const UserSchema = new mongoose . Schema ( {
48+ _id : { type : 'ObjectId' } ,
49+ name : { type : String } ,
50+ } ) ;
51+ UserModel = mongoose . model ( 'User' , UserSchema , 'users' ) ;
52+
53+ const ReviewSchema = new mongoose . Schema ( {
3554 rating : { type : Number } ,
36- } ) ) ;
55+ reviewer : { type : 'ObjectId' , ref : 'User' } ,
56+ } ) ;
57+ ReviewModel = mongoose . model ( 'ReviewsRGet' , ReviewSchema ) ;
3758 } ) ;
3859
3960 afterAll ( async ( ) => {
@@ -43,6 +64,7 @@ describe('service > resource-getter', () => {
4364
4465 beforeEach ( async ( ) => {
4566 await ReviewModel . deleteMany ( { } ) ;
67+ await UserModel . deleteMany ( { } ) ;
4668 } ) ;
4769
4870 it ( 'should reject when the record does not exists' , async ( ) => {
@@ -68,4 +90,33 @@ describe('service > resource-getter', () => {
6890 rating : 0 ,
6991 } ) ;
7092 } ) ;
93+
94+ describe ( 'when fetching with referenced field' , ( ) => {
95+ it ( 'should return the record properly' , async ( ) => {
96+ expect . assertions ( 1 ) ;
97+
98+ await loadFixture ( UserModel , [
99+ { _id : '64fad8058f3de3f425abc85c' , name : 'Bobby' } ,
100+ ] ) ;
101+ await loadFixture ( ReviewModel , [
102+ { _id : '507f1f77bcf86cd799439011' , rating : 5 , reviewer : '64fad8058f3de3f425abc85c' } ,
103+ ] ) ;
104+
105+ const params = {
106+ ...baseParams ,
107+ recordId : '507f1f77bcf86cd799439011' ,
108+ } ;
109+ const getter = new ResourceGetter ( ReviewModel , params , options , user ) ;
110+ expect ( await getter . perform ( ) ) . toStrictEqual ( {
111+ __v : 0 , // mongoose version
112+ _id : new mongoose . Types . ObjectId ( '507f1f77bcf86cd799439011' ) ,
113+ rating : 5 ,
114+ reviewer : {
115+ __v : 0 , // mongoose version
116+ _id : new mongoose . Types . ObjectId ( '64fad8058f3de3f425abc85c' ) ,
117+ name : 'Bobby' ,
118+ } ,
119+ } ) ;
120+ } ) ;
121+ } ) ;
71122} ) ;
0 commit comments