Skip to content

Commit

Permalink
fix: Stop to emit unneeded disappeare record of DefinitionFileStore
Browse files Browse the repository at this point in the history
  • Loading branch information
Quramy committed Mar 12, 2024
1 parent 81a5385 commit 7d83fd3
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 3 deletions.
60 changes: 58 additions & 2 deletions src/gql-ast-util/fragment-registry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,11 +130,11 @@ describe(DefinitionFileStore, () => {
describe('updating', () => {
describe.each`
docs | updated | appeared | disappeared | unique | duplicated
${[]} | ${[]} | ${[]} | ${['A']} | ${[]} | ${[]}
${['A:0']} | ${[]} | ${[]} | ${[]} | ${['A']} | ${[]}
${['A:1']} | ${['A']} | ${[]} | ${[]} | ${['A']} | ${[]}
${[]} | ${[]} | ${[]} | ${['A']} | ${[]} | ${[]}
${['B:0']} | ${[]} | ${['B']} | ${['A']} | ${['B']} | ${[]}
${['A:1', 'A:2']} | ${[]} | ${[]} | ${['A']} | ${[]} | ${['A']}
${['B:0']} | ${[]} | ${['B']} | ${['A']} | ${['B']} | ${[]}
`('file1: ["A:0"] -> file1: $docs', ({ docs, ...expected }) => {
let store: TestingStore;
beforeEach(() => {
Expand All @@ -158,6 +158,62 @@ describe(DefinitionFileStore, () => {
});
});

describe.each`
docs | updated | appeared | disappeared | unique | duplicated
${[]} | ${[]} | ${[]} | ${[]} | ${[]} | ${[]}
${['A:0']} | ${[]} | ${['A']} | ${[]} | ${['A']} | ${[]}
${['A:1']} | ${[]} | ${['A']} | ${[]} | ${['A']} | ${[]}
${['A:1', 'A:2']} | ${[]} | ${[]} | ${[]} | ${[]} | ${['A']}
${['B:0']} | ${[]} | ${['B']} | ${[]} | ${['B']} | ${[]}
`('file1: ["A:0", "A:1"] -> file1: $docs', ({ docs, ...expected }) => {
let store: TestingStore;
beforeEach(() => {
store = createTestingStore();
store.update('main.ts', ['A:0', 'A:1']);
store.update('main.ts', docs);
});

test('correct history', () => {
expect([...store.getDetailedAffectedDefinitions(1)[0].updated.values()]).toEqual(expected.updated);
expect([...store.getDetailedAffectedDefinitions(1)[0].appeared.values()]).toEqual(expected.appeared);
expect([...store.getDetailedAffectedDefinitions(1)[0].disappeared.values()]).toEqual(expected.disappeared);
});

test('correct unique definition', () => {
expect([...store.getUniqueDefinitonMap().keys()]).toEqual(expected.unique);
});

test('correct duplicated definition', () => {
expect([...store.getDuplicatedDefinitonMap().keys()]).toEqual(expected.duplicated);
});
});

describe.each`
docs | updated | appeared | disappeared | unique | duplicated
${['A:0', 'A:1']} | ${[]} | ${[]} | ${[]} | ${[]} | ${['A']}
`('file1: ["A:0", "A:1", "A:2"] -> file1: $docs', ({ docs, ...expected }) => {
let store: TestingStore;
beforeEach(() => {
store = createTestingStore();
store.update('main.ts', ['A:0', 'A:1', 'A:2']);
store.update('main.ts', docs);
});

test('correct history', () => {
expect([...store.getDetailedAffectedDefinitions(1)[0].updated.values()]).toEqual(expected.updated);
expect([...store.getDetailedAffectedDefinitions(1)[0].appeared.values()]).toEqual(expected.appeared);
expect([...store.getDetailedAffectedDefinitions(1)[0].disappeared.values()]).toEqual(expected.disappeared);
});

test('correct unique definition', () => {
expect([...store.getUniqueDefinitonMap().keys()]).toEqual(expected.unique);
});

test('correct duplicated definition', () => {
expect([...store.getDuplicatedDefinitonMap().keys()]).toEqual(expected.duplicated);
});
});

describe.each`
file1Docs | file2Docs | affected | unique | duplicated
${['A:0', 'B:0']} | ${['A:1']} | ${['B', 'A']} | ${['B']} | ${['A']}
Expand Down
4 changes: 3 additions & 1 deletion src/gql-ast-util/fragment-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,9 @@ export class DefinitionFileStore<T extends DefinitionAST, TExtra = unknown> {
const alreadyStoredValueAsUnique = this._uniqueRecordMap.get(name);
if (alreadyStoredValueAsUnique) {
this._uniqueRecordMap.delete(name);
namesRemoved.add(name);
if (!namesFromDuplicatedToUnique.has(name)) {
namesRemoved.add(name);
}
continue;
}

Expand Down

0 comments on commit 7d83fd3

Please sign in to comment.