Skip to content

Commit a35d203

Browse files
committed
feat: consider indices in withModuleSelection()
1 parent 3af4db7 commit a35d203

File tree

2 files changed

+379
-8
lines changed

2 files changed

+379
-8
lines changed

spec/project/select-modules-in-sources.spec.ts

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,232 @@ describe('selectModulesInProjectSource', () => {
117117
}
118118
`);
119119
});
120+
121+
it('keeps indices that are fully covered by the modules', () => {
122+
const result = run(
123+
gql`
124+
type Test
125+
@rootEntity(
126+
indices: [
127+
{ fields: ["field1", "key"] }
128+
{ fields: ["field1", "children.field1"], sparse: true }
129+
]
130+
)
131+
@modules(in: "module1") {
132+
key: String @key @modules(in: "module1")
133+
field1: String @modules(in: "module1")
134+
children: [Child] @modules(in: "module1")
135+
}
136+
137+
type Child @childEntity @modules(in: "module1") {
138+
field1: String @modules(in: "module1")
139+
field2: String @modules(in: "module1")
140+
}
141+
`,
142+
['module1'],
143+
);
144+
expect(result).to.equal(`
145+
type Test
146+
@rootEntity(
147+
indices: [
148+
{ fields: ["field1", "key"] }
149+
{ fields: ["field1", "children.field1"], sparse: true }
150+
]
151+
)
152+
@modules(in: ["module1"]) {
153+
key: String @key @modules(in: ["module1"])
154+
field1: String @modules(in: ["module1"])
155+
children: [Child] @modules(in: ["module1"])
156+
}
157+
158+
type Child @childEntity @modules(in: ["module1"]) {
159+
field1: String @modules(in: ["module1"])
160+
field2: String @modules(in: ["module1"])
161+
}
162+
`);
163+
});
164+
165+
it('removes indices where none of the specified fields are included in the selected modules', () => {
166+
const result = run(
167+
gql`
168+
type Test
169+
@rootEntity(
170+
indices: [
171+
{ fields: ["field1", "key"] }
172+
{ fields: ["field2", "children.field2"], sparse: true }
173+
]
174+
)
175+
@modules(in: "module1") {
176+
key: String @key @modules(in: "module1")
177+
field1: String @modules(in: "module1")
178+
field2: String @modules(in: "module2")
179+
children: [Child] @modules(in: "module1")
180+
}
181+
182+
type Child @childEntity @modules(in: "module1") {
183+
field1: String @modules(in: "module1")
184+
field2: String @modules(in: "module2")
185+
}
186+
`,
187+
['module1'],
188+
);
189+
expect(result).to.equal(`
190+
type Test
191+
@rootEntity(
192+
indices: [
193+
{ fields: ["field1", "key"] }
194+
195+
]
196+
)
197+
@modules(in: ["module1"]) {
198+
key: String @key @modules(in: ["module1"])
199+
field1: String @modules(in: ["module1"])
200+
201+
children: [Child] @modules(in: ["module1"])
202+
}
203+
204+
type Child @childEntity @modules(in: ["module1"]) {
205+
field1: String @modules(in: ["module1"])
206+
207+
}
208+
`);
209+
});
210+
211+
it('removes the whole indices arg if all indices have been removed', () => {
212+
const result = run(
213+
gql`
214+
type Test
215+
@rootEntity(
216+
indices: [
217+
{ fields: ["field2"] }
218+
{ fields: ["field2", "children.field2"], sparse: true }
219+
]
220+
)
221+
@modules(in: "module1") {
222+
key: String @key @modules(in: "module1")
223+
field1: String @modules(in: "module1")
224+
field2: String @modules(in: "module2")
225+
children: [Child] @modules(in: "module1")
226+
}
227+
228+
type Child @childEntity @modules(in: "module1") {
229+
field1: String @modules(in: "module1")
230+
field2: String @modules(in: "module2")
231+
}
232+
`,
233+
['module1'],
234+
);
235+
expect(result).to.equal(`
236+
type Test
237+
@rootEntity
238+
@modules(in: ["module1"]) {
239+
key: String @key @modules(in: ["module1"])
240+
field1: String @modules(in: ["module1"])
241+
242+
children: [Child] @modules(in: ["module1"])
243+
}
244+
245+
type Child @childEntity @modules(in: ["module1"]) {
246+
field1: String @modules(in: ["module1"])
247+
248+
}
249+
`);
250+
});
251+
252+
it('removes the whole indices arg if all indices have been removed (and there are other args)', () => {
253+
const result = run(
254+
gql`
255+
type Test
256+
@rootEntity(
257+
flexSearch: true
258+
indices: [
259+
{ fields: ["field2"] }
260+
{ fields: ["field2", "children.field2"], sparse: true }
261+
]
262+
)
263+
@modules(in: "module1") {
264+
key: String @key @modules(in: "module1")
265+
field1: String @modules(in: "module1")
266+
field2: String @modules(in: "module2")
267+
children: [Child] @modules(in: "module1")
268+
}
269+
270+
type Child @childEntity @modules(in: "module1") {
271+
field1: String @modules(in: "module1")
272+
field2: String @modules(in: "module2")
273+
}
274+
`,
275+
['module1'],
276+
);
277+
expect(result).to.equal(`
278+
type Test
279+
@rootEntity(
280+
flexSearch: true
281+
282+
)
283+
@modules(in: ["module1"]) {
284+
key: String @key @modules(in: ["module1"])
285+
field1: String @modules(in: ["module1"])
286+
287+
children: [Child] @modules(in: ["module1"])
288+
}
289+
290+
type Child @childEntity @modules(in: ["module1"]) {
291+
field1: String @modules(in: ["module1"])
292+
293+
}
294+
`);
295+
});
296+
297+
it('trims down indices that are partially covered by the modules', () => {
298+
const result = run(
299+
gql`
300+
type Test
301+
@rootEntity(
302+
indices: [
303+
{ fields: ["field1", "key"] }
304+
{
305+
fields: ["field1", "children.field1", "children.field2"]
306+
sparse: true
307+
}
308+
]
309+
)
310+
@modules(in: "module1") {
311+
key: String @key @modules(in: "module1")
312+
field1: String @modules(in: "module1")
313+
children: [Child] @modules(in: "module1")
314+
}
315+
316+
type Child @childEntity @modules(in: "module1") {
317+
field1: String @modules(in: "module1")
318+
field2: String @modules(in: "module2")
319+
}
320+
`,
321+
['module1'],
322+
);
323+
expect(result).to.equal(`
324+
type Test
325+
@rootEntity(
326+
indices: [
327+
{ fields: ["field1", "key"] }
328+
{
329+
fields: ["field1", "children.field1"]
330+
sparse: true
331+
}
332+
]
333+
)
334+
@modules(in: ["module1"]) {
335+
key: String @key @modules(in: ["module1"])
336+
field1: String @modules(in: ["module1"])
337+
children: [Child] @modules(in: ["module1"])
338+
}
339+
340+
type Child @childEntity @modules(in: ["module1"]) {
341+
field1: String @modules(in: ["module1"])
342+
343+
}
344+
`);
345+
});
120346
});
121347

122348
describe('with removeModuleDeclarations = true', () => {

0 commit comments

Comments
 (0)