Skip to content

Commit

Permalink
feat: consider indices in withModuleSelection()
Browse files Browse the repository at this point in the history
  • Loading branch information
Yogu committed Sep 18, 2024
1 parent 3af4db7 commit a35d203
Show file tree
Hide file tree
Showing 2 changed files with 379 additions and 8 deletions.
226 changes: 226 additions & 0 deletions spec/project/select-modules-in-sources.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,232 @@ describe('selectModulesInProjectSource', () => {
}
`);
});

it('keeps indices that are fully covered by the modules', () => {
const result = run(
gql`
type Test
@rootEntity(
indices: [
{ fields: ["field1", "key"] }
{ fields: ["field1", "children.field1"], sparse: true }
]
)
@modules(in: "module1") {
key: String @key @modules(in: "module1")
field1: String @modules(in: "module1")
children: [Child] @modules(in: "module1")
}
type Child @childEntity @modules(in: "module1") {
field1: String @modules(in: "module1")
field2: String @modules(in: "module1")
}
`,
['module1'],
);
expect(result).to.equal(`
type Test
@rootEntity(
indices: [
{ fields: ["field1", "key"] }
{ fields: ["field1", "children.field1"], sparse: true }
]
)
@modules(in: ["module1"]) {
key: String @key @modules(in: ["module1"])
field1: String @modules(in: ["module1"])
children: [Child] @modules(in: ["module1"])
}
type Child @childEntity @modules(in: ["module1"]) {
field1: String @modules(in: ["module1"])
field2: String @modules(in: ["module1"])
}
`);
});

it('removes indices where none of the specified fields are included in the selected modules', () => {
const result = run(
gql`
type Test
@rootEntity(
indices: [
{ fields: ["field1", "key"] }
{ fields: ["field2", "children.field2"], sparse: true }
]
)
@modules(in: "module1") {
key: String @key @modules(in: "module1")
field1: String @modules(in: "module1")
field2: String @modules(in: "module2")
children: [Child] @modules(in: "module1")
}
type Child @childEntity @modules(in: "module1") {
field1: String @modules(in: "module1")
field2: String @modules(in: "module2")
}
`,
['module1'],
);
expect(result).to.equal(`
type Test
@rootEntity(
indices: [
{ fields: ["field1", "key"] }
]
)
@modules(in: ["module1"]) {
key: String @key @modules(in: ["module1"])
field1: String @modules(in: ["module1"])
children: [Child] @modules(in: ["module1"])
}
type Child @childEntity @modules(in: ["module1"]) {
field1: String @modules(in: ["module1"])
}
`);
});

it('removes the whole indices arg if all indices have been removed', () => {
const result = run(
gql`
type Test
@rootEntity(
indices: [
{ fields: ["field2"] }
{ fields: ["field2", "children.field2"], sparse: true }
]
)
@modules(in: "module1") {
key: String @key @modules(in: "module1")
field1: String @modules(in: "module1")
field2: String @modules(in: "module2")
children: [Child] @modules(in: "module1")
}
type Child @childEntity @modules(in: "module1") {
field1: String @modules(in: "module1")
field2: String @modules(in: "module2")
}
`,
['module1'],
);
expect(result).to.equal(`
type Test
@rootEntity
@modules(in: ["module1"]) {
key: String @key @modules(in: ["module1"])
field1: String @modules(in: ["module1"])
children: [Child] @modules(in: ["module1"])
}
type Child @childEntity @modules(in: ["module1"]) {
field1: String @modules(in: ["module1"])
}
`);
});

it('removes the whole indices arg if all indices have been removed (and there are other args)', () => {
const result = run(
gql`
type Test
@rootEntity(
flexSearch: true
indices: [
{ fields: ["field2"] }
{ fields: ["field2", "children.field2"], sparse: true }
]
)
@modules(in: "module1") {
key: String @key @modules(in: "module1")
field1: String @modules(in: "module1")
field2: String @modules(in: "module2")
children: [Child] @modules(in: "module1")
}
type Child @childEntity @modules(in: "module1") {
field1: String @modules(in: "module1")
field2: String @modules(in: "module2")
}
`,
['module1'],
);
expect(result).to.equal(`
type Test
@rootEntity(
flexSearch: true
)
@modules(in: ["module1"]) {
key: String @key @modules(in: ["module1"])
field1: String @modules(in: ["module1"])
children: [Child] @modules(in: ["module1"])
}
type Child @childEntity @modules(in: ["module1"]) {
field1: String @modules(in: ["module1"])
}
`);
});

it('trims down indices that are partially covered by the modules', () => {
const result = run(
gql`
type Test
@rootEntity(
indices: [
{ fields: ["field1", "key"] }
{
fields: ["field1", "children.field1", "children.field2"]
sparse: true
}
]
)
@modules(in: "module1") {
key: String @key @modules(in: "module1")
field1: String @modules(in: "module1")
children: [Child] @modules(in: "module1")
}
type Child @childEntity @modules(in: "module1") {
field1: String @modules(in: "module1")
field2: String @modules(in: "module2")
}
`,
['module1'],
);
expect(result).to.equal(`
type Test
@rootEntity(
indices: [
{ fields: ["field1", "key"] }
{
fields: ["field1", "children.field1"]
sparse: true
}
]
)
@modules(in: ["module1"]) {
key: String @key @modules(in: ["module1"])
field1: String @modules(in: ["module1"])
children: [Child] @modules(in: ["module1"])
}
type Child @childEntity @modules(in: ["module1"]) {
field1: String @modules(in: ["module1"])
}
`);
});
});

describe('with removeModuleDeclarations = true', () => {
Expand Down
Loading

0 comments on commit a35d203

Please sign in to comment.