@@ -21,6 +21,73 @@ describe('FilterQueryBuilder', (): void => {
2121 expect ( params ) . toMatchSnapshot ( ) ;
2222 } ;
2323
24+ describe ( '#getReferencedRelationsRecursive' , ( ) => {
25+ it ( 'with deeply nested and / or' , ( ) => {
26+ const complexQuery : Filter < TestEntity > = {
27+ and : [
28+ {
29+ or : [
30+ { and : [ { stringType : { eq : '123' } } ] } ,
31+ {
32+ and : [ { stringType : { eq : '123' } } , { id : { gt : '123' } } ] ,
33+ } ,
34+ ] ,
35+ } ,
36+ {
37+ stringType : { eq : '345' } ,
38+ or : [
39+ { oneTestRelation : { relationName : { eq : '123' } } } ,
40+ { oneTestRelation : { relationOfTestRelation : { testRelationId : { eq : 'e1' } } } } ,
41+ ] ,
42+ } ,
43+ ] ,
44+ } ;
45+ const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
46+ const qb = getEntityQueryBuilder ( TestEntity , instance ( mockWhereBuilder ) ) ;
47+ expect ( qb . getReferencedRelationsRecursive ( qb . repo . metadata , complexQuery ) ) . toEqual ( {
48+ oneTestRelation : { relationOfTestRelation : { } } ,
49+ } ) ;
50+ } ) ;
51+ it ( 'with nested and / or' , ( ) => {
52+ const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
53+ const qb = getEntityQueryBuilder ( TestEntity , instance ( mockWhereBuilder ) ) ;
54+ expect (
55+ qb . getReferencedRelationsRecursive ( qb . repo . metadata , {
56+ test : '123' ,
57+ and : [
58+ {
59+ boolType : { is : true } ,
60+ } ,
61+ {
62+ testRelations : {
63+ relationName : { eq : '123' } ,
64+ } ,
65+ } ,
66+ ] ,
67+ or : [
68+ {
69+ boolType : { is : true } ,
70+ } ,
71+ {
72+ oneTestRelation : {
73+ testRelationPk : { eq : '123' } ,
74+ } ,
75+ } ,
76+ {
77+ oneTestRelation : {
78+ relationsOfTestRelation : {
79+ testRelationId : {
80+ eq : '123' ,
81+ } ,
82+ } ,
83+ } ,
84+ } ,
85+ ] ,
86+ } as Filter < TestEntity > ) ,
87+ ) . toEqual ( { testRelations : { } , oneTestRelation : { relationsOfTestRelation : { } } } ) ;
88+ } ) ;
89+ } ) ;
90+
2491 describe ( '#select' , ( ) => {
2592 const expectSelectSQLSnapshot = ( query : Query < TestEntity > , whereBuilder : WhereBuilder < TestEntity > ) : void => {
2693 const selectQueryBuilder = getEntityQueryBuilder ( TestEntity , whereBuilder ) . select ( query ) ;
@@ -31,13 +98,13 @@ describe('FilterQueryBuilder', (): void => {
3198 it ( 'should not call whereBuilder#build' , ( ) => {
3299 const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
33100 expectSelectSQLSnapshot ( { } , instance ( mockWhereBuilder ) ) ;
34- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
101+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
35102 } ) ;
36103
37104 it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
38105 const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
39106 const query = { filter : { stringType : { eq : 'foo' } } } ;
40- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( [ ] ) , 'TestEntity' ) ) . thenCall (
107+ when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , 'TestEntity' ) ) . thenCall (
41108 ( where : WhereExpression , field : Filter < TestEntity > , relationNames : string [ ] , alias : string ) =>
42109 where . andWhere ( `${ alias } .stringType = 'foo'` ) ,
43110 ) ;
@@ -49,19 +116,19 @@ describe('FilterQueryBuilder', (): void => {
49116 it ( 'should apply empty paging args' , ( ) => {
50117 const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
51118 expectSelectSQLSnapshot ( { } , instance ( mockWhereBuilder ) ) ;
52- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( [ ] ) , 'TestEntity' ) ) . never ( ) ;
119+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( { } ) , 'TestEntity' ) ) . never ( ) ;
53120 } ) ;
54121
55122 it ( 'should apply paging args going forward' , ( ) => {
56123 const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
57124 expectSelectSQLSnapshot ( { paging : { limit : 10 , offset : 11 } } , instance ( mockWhereBuilder ) ) ;
58- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( [ ] ) , 'TestEntity' ) ) . never ( ) ;
125+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , deepEqual ( { } ) , 'TestEntity' ) ) . never ( ) ;
59126 } ) ;
60127
61128 it ( 'should apply paging args going backward' , ( ) => {
62129 const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
63130 expectSelectSQLSnapshot ( { paging : { limit : 10 , offset : 10 } } , instance ( mockWhereBuilder ) ) ;
64- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
131+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
65132 } ) ;
66133 } ) ;
67134
@@ -72,7 +139,7 @@ describe('FilterQueryBuilder', (): void => {
72139 { sorting : [ { field : 'numberType' , direction : SortDirection . ASC } ] } ,
73140 instance ( mockWhereBuilder ) ,
74141 ) ;
75- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
142+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
76143 } ) ;
77144
78145 it ( 'should apply ASC NULLS_FIRST sorting' , ( ) => {
@@ -81,7 +148,7 @@ describe('FilterQueryBuilder', (): void => {
81148 { sorting : [ { field : 'numberType' , direction : SortDirection . ASC , nulls : SortNulls . NULLS_FIRST } ] } ,
82149 instance ( mockWhereBuilder ) ,
83150 ) ;
84- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
151+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
85152 } ) ;
86153
87154 it ( 'should apply ASC NULLS_LAST sorting' , ( ) => {
@@ -90,7 +157,7 @@ describe('FilterQueryBuilder', (): void => {
90157 { sorting : [ { field : 'numberType' , direction : SortDirection . ASC , nulls : SortNulls . NULLS_LAST } ] } ,
91158 instance ( mockWhereBuilder ) ,
92159 ) ;
93- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
160+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
94161 } ) ;
95162
96163 it ( 'should apply DESC sorting' , ( ) => {
@@ -99,7 +166,7 @@ describe('FilterQueryBuilder', (): void => {
99166 { sorting : [ { field : 'numberType' , direction : SortDirection . DESC } ] } ,
100167 instance ( mockWhereBuilder ) ,
101168 ) ;
102- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
169+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
103170 } ) ;
104171
105172 it ( 'should apply DESC NULLS_FIRST sorting' , ( ) => {
@@ -116,7 +183,7 @@ describe('FilterQueryBuilder', (): void => {
116183 { sorting : [ { field : 'numberType' , direction : SortDirection . DESC , nulls : SortNulls . NULLS_LAST } ] } ,
117184 instance ( mockWhereBuilder ) ,
118185 ) ;
119- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
186+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
120187 } ) ;
121188
122189 it ( 'should apply multiple sorts' , ( ) => {
@@ -132,7 +199,7 @@ describe('FilterQueryBuilder', (): void => {
132199 } ,
133200 instance ( mockWhereBuilder ) ,
134201 ) ;
135- verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , [ ] , 'TestEntity' ) ) . never ( ) ;
202+ verify ( mockWhereBuilder . build ( anything ( ) , anything ( ) , { } , 'TestEntity' ) ) . never ( ) ;
136203 } ) ;
137204 } ) ;
138205 } ) ;
@@ -147,7 +214,7 @@ describe('FilterQueryBuilder', (): void => {
147214 it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
148215 const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
149216 const query = { filter : { stringType : { eq : 'foo' } } } ;
150- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( [ ] ) , undefined ) ) . thenCall (
217+ when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , undefined ) ) . thenCall (
151218 ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ,
152219 ) ;
153220 expectUpdateSQLSnapshot ( query , instance ( mockWhereBuilder ) ) ;
@@ -244,7 +311,7 @@ describe('FilterQueryBuilder', (): void => {
244311 it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
245312 const mockWhereBuilder = mock < WhereBuilder < TestEntity > > ( WhereBuilder ) ;
246313 const query = { filter : { stringType : { eq : 'foo' } } } ;
247- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( [ ] ) , undefined ) ) . thenCall (
314+ when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , undefined ) ) . thenCall (
248315 ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ,
249316 ) ;
250317 expectDeleteSQLSnapshot ( query , instance ( mockWhereBuilder ) ) ;
@@ -290,7 +357,7 @@ describe('FilterQueryBuilder', (): void => {
290357 it ( 'should call whereBuilder#build if there is a filter' , ( ) => {
291358 const mockWhereBuilder = mock < WhereBuilder < TestSoftDeleteEntity > > ( WhereBuilder ) ;
292359 const query = { filter : { stringType : { eq : 'foo' } } } ;
293- when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( [ ] ) , undefined ) ) . thenCall (
360+ when ( mockWhereBuilder . build ( anything ( ) , query . filter , deepEqual ( { } ) , undefined ) ) . thenCall (
294361 ( where : WhereExpression ) => where . andWhere ( `stringType = 'foo'` ) ,
295362 ) ;
296363 expectSoftDeleteSQLSnapshot ( query , instance ( mockWhereBuilder ) ) ;
0 commit comments