@@ -6,6 +6,7 @@ import { resolve } from 'path';
66import { AdvertRepository } from './repository/advert.repository' ;
77import { AbstractPolymorphicRepository } from '../' ;
88import { MerchantEntity } from './entities/merchant.entity' ;
9+ import { UserRepository } from './repository/user.repository' ;
910
1011describe ( 'AbstractPolymorphicRepository' , ( ) => {
1112 let connection : DataSource ;
@@ -172,4 +173,40 @@ describe('AbstractPolymorphicRepository', () => {
172173 } ) ;
173174 } ) ;
174175 } ) ;
176+
177+ describe ( 'Parent' , ( ) => {
178+ describe ( 'findOne' , ( ) => {
179+ it ( 'Can find parent entity with children' , async ( ) => {
180+ const repository = AbstractPolymorphicRepository . createRepository (
181+ connection ,
182+ UserRepository ,
183+ ) ;
184+ const advertRepository = AbstractPolymorphicRepository . createRepository (
185+ connection ,
186+ AdvertRepository ,
187+ ) ;
188+
189+ const user = await repository . save ( new UserEntity ( ) ) ;
190+
191+ const advert = await advertRepository . save (
192+ advertRepository . create ( {
193+ owner : user ,
194+ } ) ,
195+ ) ;
196+
197+ let result = await repository . findOne ( {
198+ where : { id : user . id } ,
199+ } ) ;
200+
201+ result = await repository . hydrateOne ( result ) ;
202+
203+ expect ( result ) . toBeInstanceOf ( UserEntity ) ;
204+ expect ( result ?. adverts ) . toHaveLength ( 1 ) ;
205+ expect ( result ?. adverts [ 0 ] ) . toBeInstanceOf ( AdvertEntity ) ;
206+ expect ( result ?. adverts [ 0 ] . id ) . toBe ( advert . id ) ;
207+ expect ( result ?. adverts [ 0 ] . entityType ) . toBe ( UserEntity . name ) ;
208+ expect ( result ?. adverts [ 0 ] . entityId ) . toBe ( user . id ) ;
209+ } ) ;
210+ } ) ;
211+ } ) ;
175212} ) ;
0 commit comments