@@ -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 ;
@@ -230,4 +231,40 @@ describe('AbstractPolymorphicRepository', () => {
230231 } ) ;
231232 } ) ;
232233 } ) ;
234+
235+ describe ( 'Parent' , ( ) => {
236+ describe ( 'findOne' , ( ) => {
237+ it ( 'Can find parent entity with children' , async ( ) => {
238+ const repository = AbstractPolymorphicRepository . createRepository (
239+ connection ,
240+ UserRepository ,
241+ ) ;
242+ const advertRepository = AbstractPolymorphicRepository . createRepository (
243+ connection ,
244+ AdvertRepository ,
245+ ) ;
246+
247+ const user = await repository . save ( new UserEntity ( ) ) ;
248+
249+ const advert = await advertRepository . save (
250+ advertRepository . create ( {
251+ owner : user ,
252+ } ) ,
253+ ) ;
254+
255+ let result = await repository . findOne ( {
256+ where : { id : user . id } ,
257+ } ) ;
258+
259+ result = await repository . hydrateOne ( result ) ;
260+
261+ expect ( result ) . toBeInstanceOf ( UserEntity ) ;
262+ expect ( result ?. adverts ) . toHaveLength ( 1 ) ;
263+ expect ( result ?. adverts [ 0 ] ) . toBeInstanceOf ( AdvertEntity ) ;
264+ expect ( result ?. adverts [ 0 ] . id ) . toBe ( advert . id ) ;
265+ expect ( result ?. adverts [ 0 ] . entityType ) . toBe ( UserEntity . name ) ;
266+ expect ( result ?. adverts [ 0 ] . entityId ) . toBe ( user . id ) ;
267+ } ) ;
268+ } ) ;
269+ } ) ;
233270} ) ;
0 commit comments