@@ -3,9 +3,9 @@ import { IncludesUtil } from "../../src/index.js";
33
44describe ( "IncludesUtil" , function ( ) {
55
6- function includedIds ( document : object , include : string ) : string [ ] {
6+ function includedIds ( document : object , include : string , identityPartsSeparator ?: string ) : string [ ] {
77 const ids : string [ ] = [ ] ;
8- IncludesUtil . include ( document , include , id => ids . push ( id ) ) ;
8+ IncludesUtil . include ( document , include , id => ids . push ( id ) , identityPartsSeparator ) ;
99 return ids ;
1010 }
1111
@@ -21,6 +21,32 @@ describe("IncludesUtil", function () {
2121 assert . deepStrictEqual ( ids , [ "1/customer" , "1" ] ) ;
2222 } ) ;
2323
24+ it ( "include with prefix not ending with the identity parts separator yields only the raw id" , ( ) => {
25+ const ids = includedIds ( { customerId : "1" } , "customerId(customer-)" ) ;
26+
27+ assert . deepStrictEqual ( ids , [ "1" ] ) ;
28+ } ) ;
29+
30+ it ( "include with prefix ending with a custom identity parts separator" , ( ) => {
31+ const ids = includedIds ( { customerId : "1" } , "customerId(customer-)" , "-" ) ;
32+
33+ assert . deepStrictEqual ( ids , [ "customer-1" , "1" ] ) ;
34+ } ) ;
35+
36+ it ( "include with suffix not starting with the value and the identity parts separator yields no ids" , ( ) => {
37+ const document = { customerId : "1" } ;
38+
39+ assert . deepStrictEqual ( includedIds ( document , "customerId[{0}-customer]" ) , [ ] ) ;
40+ assert . deepStrictEqual ( includedIds ( document , "customerId[{0}]" ) , [ ] ) ;
41+ assert . deepStrictEqual ( includedIds ( document , "customerId[/customer]" ) , [ ] ) ;
42+ } ) ;
43+
44+ it ( "include with suffix using a custom identity parts separator" , ( ) => {
45+ const ids = includedIds ( { customerId : "1" } , "customerId[{0}-customer]" , "-" ) ;
46+
47+ assert . deepStrictEqual ( ids , [ "1-customer" , "1" ] ) ;
48+ } ) ;
49+
2450 it ( "include with prefix of a numeric id" , ( ) => {
2551 const ids = includedIds ( { supplierId : 5 } , "supplierId(suppliers/)" ) ;
2652
@@ -48,6 +74,20 @@ describe("IncludesUtil", function () {
4874 assert . deepStrictEqual ( ids , [ "suppliers/1" , "suppliers/2" ] ) ;
4975 } ) ;
5076
77+ it ( "include array of ids skips nested arrays" , ( ) => {
78+ const ids = includedIds ( { supplierIds : [ [ "suppliers/1" ] , "suppliers/2" ] } , "supplierIds" ) ;
79+
80+ assert . deepStrictEqual ( ids , [ "suppliers/2" ] ) ;
81+ } ) ;
82+
83+ it ( "include property of array items flattens one level of ids" , ( ) => {
84+ const ids = includedIds (
85+ { lines : [ { products : [ "products/1" , [ "products/2" ] ] } ] } ,
86+ "lines[].products" ) ;
87+
88+ assert . deepStrictEqual ( ids , [ "products/1" ] ) ;
89+ } ) ;
90+
5191 it ( "include property of array items" , ( ) => {
5292 const ids = includedIds (
5393 { lines : [ { product : "products/1" } , { product : "products/2" } ] } ,
@@ -85,6 +125,22 @@ describe("IncludesUtil", function () {
85125 assert . deepStrictEqual ( ids , [ "products/1" ] ) ;
86126 } ) ;
87127
128+ it ( "include property of dictionary values skips arrays" , ( ) => {
129+ const ids = includedIds (
130+ { lines : { first : { product : [ "products/1" ] } , second : { product : "products/2" } } } ,
131+ "lines[].product" ) ;
132+
133+ assert . deepStrictEqual ( ids , [ "products/2" ] ) ;
134+ } ) ;
135+
136+ it ( "include collection path below dictionary values yields no ids" , ( ) => {
137+ const ids = includedIds (
138+ { lines : { first : { parts : [ { product : "products/1" } ] } } } ,
139+ "lines[].parts[].product" ) ;
140+
141+ assert . deepStrictEqual ( ids , [ ] ) ;
142+ } ) ;
143+
88144 it ( "include path syntax the server does not resolve yields no ids" , ( ) => {
89145 const lines = [ { product : "products/1" } , { product : "products/2" } ] ;
90146
0 commit comments