From bd98eab3fac88fdde059fafc59bc59b150b56d43 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Sat, 1 Apr 2023 00:17:41 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../apollo/indexed_db_persistent_storage_spec.js | 90 ++++++++++++ .../cache_with_persist_directive_and_field.json | 151 --------------------- 2 files changed, 90 insertions(+), 151 deletions(-) create mode 100644 spec/frontend/lib/apollo/indexed_db_persistent_storage_spec.js (limited to 'spec/frontend/lib') diff --git a/spec/frontend/lib/apollo/indexed_db_persistent_storage_spec.js b/spec/frontend/lib/apollo/indexed_db_persistent_storage_spec.js new file mode 100644 index 00000000000..f96364a918e --- /dev/null +++ b/spec/frontend/lib/apollo/indexed_db_persistent_storage_spec.js @@ -0,0 +1,90 @@ +import { IndexedDBPersistentStorage } from '~/lib/apollo/indexed_db_persistent_storage'; +import { db } from '~/lib/apollo/local_db'; +import CACHE_WITH_PERSIST_DIRECTIVE_AND_FIELDS from './mock_data/cache_with_persist_directive_and_field.json'; + +describe('IndexedDBPersistentStorage', () => { + let subject; + + const seedData = async (cacheKey, data = CACHE_WITH_PERSIST_DIRECTIVE_AND_FIELDS) => { + const { ROOT_QUERY, ...rest } = data; + + await db.table('queries').put(ROOT_QUERY, cacheKey); + + const asyncPuts = Object.entries(rest).map(async ([key, value]) => { + const { + groups: { type, gid }, + } = /^(?.+?):(?.+)$/.exec(key); + const tableName = type.toLowerCase(); + + if (tableName !== 'projectmember' && tableName !== 'groupmember') { + await db.table(tableName).put(value, gid); + } + }); + + await Promise.all(asyncPuts); + }; + + beforeEach(async () => { + subject = await IndexedDBPersistentStorage.create(); + }); + + afterEach(() => { + db.close(); + }); + + it('returns empty response if there is nothing stored in the DB', async () => { + const result = await subject.getItem('some-query'); + + expect(result).toEqual({}); + }); + + it('returns stored cache if cache was persisted in IndexedDB', async () => { + await seedData('issues_list', CACHE_WITH_PERSIST_DIRECTIVE_AND_FIELDS); + + const result = await subject.getItem('issues_list'); + expect(result).toEqual(CACHE_WITH_PERSIST_DIRECTIVE_AND_FIELDS); + }); + + it('puts the results in database on `setItem` call', async () => { + await subject.setItem( + 'issues_list', + JSON.stringify({ + ROOT_QUERY: 'ROOT_QUERY_KEY', + 'Project:gid://gitlab/Project/6': { + __typename: 'Project', + id: 'gid://gitlab/Project/6', + }, + }), + ); + + await expect(db.table('queries').get('issues_list')).resolves.toEqual('ROOT_QUERY_KEY'); + await expect(db.table('project').get('gid://gitlab/Project/6')).resolves.toEqual({ + __typename: 'Project', + id: 'gid://gitlab/Project/6', + }); + }); + + it('does not put results into non-existent table', async () => { + const queryId = 'issues_list'; + + await subject.setItem( + queryId, + JSON.stringify({ + ROOT_QUERY: 'ROOT_QUERY_KEY', + 'DNE:gid://gitlab/DNE/1': {}, + }), + ); + + expect(db.tables.map((x) => x.name)).not.toContain('dne'); + }); + + it('when removeItem is called, clears all data', async () => { + await seedData('issues_list', CACHE_WITH_PERSIST_DIRECTIVE_AND_FIELDS); + + await subject.removeItem(); + + const actual = await Promise.all(db.tables.map((x) => x.toArray())); + + expect(actual).toEqual(db.tables.map(() => [])); + }); +}); diff --git a/spec/frontend/lib/apollo/mock_data/cache_with_persist_directive_and_field.json b/spec/frontend/lib/apollo/mock_data/cache_with_persist_directive_and_field.json index c0651517986..0dfc2240cc3 100644 --- a/spec/frontend/lib/apollo/mock_data/cache_with_persist_directive_and_field.json +++ b/spec/frontend/lib/apollo/mock_data/cache_with_persist_directive_and_field.json @@ -171,38 +171,6 @@ } ] }, - "projectMembers({\"relations\":[\"DIRECT\",\"INHERITED\",\"INVITED_GROUPS\"],\"search\":\"\"})": { - "__typename": "MemberInterfaceConnection", - "nodes": [ - { - "__ref": "ProjectMember:gid://gitlab/ProjectMember/54" - }, - { - "__ref": "ProjectMember:gid://gitlab/ProjectMember/53" - }, - { - "__ref": "ProjectMember:gid://gitlab/ProjectMember/52" - }, - { - "__ref": "GroupMember:gid://gitlab/GroupMember/26" - }, - { - "__ref": "GroupMember:gid://gitlab/GroupMember/25" - }, - { - "__ref": "GroupMember:gid://gitlab/GroupMember/11" - }, - { - "__ref": "GroupMember:gid://gitlab/GroupMember/10" - }, - { - "__ref": "GroupMember:gid://gitlab/GroupMember/9" - }, - { - "__ref": "GroupMember:gid://gitlab/GroupMember/1" - } - ] - }, "milestones({\"includeAncestors\":true,\"searchTitle\":\"\",\"sort\":\"EXPIRED_LAST_DUE_DATE_ASC\",\"state\":\"active\"})": { "__typename": "MilestoneConnection", "nodes": [ @@ -1999,125 +1967,6 @@ "healthStatus": null, "weight": null }, - "UserCore:gid://gitlab/User/9": { - "__typename": "UserCore", - "id": "gid://gitlab/User/9", - "avatarUrl": "https://secure.gravatar.com/avatar/175e76e391370beeb21914ab74c2efd4?s=80&d=identicon", - "name": "Kiyoko Bahringer", - "username": "jamie" - }, - "ProjectMember:gid://gitlab/ProjectMember/54": { - "__typename": "ProjectMember", - "id": "gid://gitlab/ProjectMember/54", - "user": { - "__ref": "UserCore:gid://gitlab/User/9" - } - }, - "UserCore:gid://gitlab/User/19": { - "__typename": "UserCore", - "id": "gid://gitlab/User/19", - "avatarUrl": "https://secure.gravatar.com/avatar/3126153e3301ebf7cc8f7c99e57007f2?s=80&d=identicon", - "name": "Cecile Hermann", - "username": "jeannetta_breitenberg" - }, - "ProjectMember:gid://gitlab/ProjectMember/53": { - "__typename": "ProjectMember", - "id": "gid://gitlab/ProjectMember/53", - "user": { - "__ref": "UserCore:gid://gitlab/User/19" - } - }, - "UserCore:gid://gitlab/User/2": { - "__typename": "UserCore", - "id": "gid://gitlab/User/2", - "avatarUrl": "https://secure.gravatar.com/avatar/a138e401136c90561f949297387a3bb9?s=80&d=identicon", - "name": "Tish Treutel", - "username": "liana.larkin" - }, - "ProjectMember:gid://gitlab/ProjectMember/52": { - "__typename": "ProjectMember", - "id": "gid://gitlab/ProjectMember/52", - "user": { - "__ref": "UserCore:gid://gitlab/User/2" - } - }, - "UserCore:gid://gitlab/User/13": { - "__typename": "UserCore", - "id": "gid://gitlab/User/13", - "avatarUrl": "https://secure.gravatar.com/avatar/0ce8057f452296a13b5620bb2d9ede57?s=80&d=identicon", - "name": "Tammy Gusikowski", - "username": "xuan_oreilly" - }, - "GroupMember:gid://gitlab/GroupMember/26": { - "__typename": "GroupMember", - "id": "gid://gitlab/GroupMember/26", - "user": { - "__ref": "UserCore:gid://gitlab/User/13" - } - }, - "UserCore:gid://gitlab/User/21": { - "__typename": "UserCore", - "id": "gid://gitlab/User/21", - "avatarUrl": "https://secure.gravatar.com/avatar/415b09d256f26403384363d7948c4d77?s=80&d=identicon", - "name": "Twanna Hegmann", - "username": "jamaal" - }, - "GroupMember:gid://gitlab/GroupMember/25": { - "__typename": "GroupMember", - "id": "gid://gitlab/GroupMember/25", - "user": { - "__ref": "UserCore:gid://gitlab/User/21" - } - }, - "UserCore:gid://gitlab/User/14": { - "__typename": "UserCore", - "id": "gid://gitlab/User/14", - "avatarUrl": "https://secure.gravatar.com/avatar/e99697c6664381b0351b7617717dd49b?s=80&d=identicon", - "name": "Francie Cole", - "username": "greg.wisoky" - }, - "GroupMember:gid://gitlab/GroupMember/11": { - "__typename": "GroupMember", - "id": "gid://gitlab/GroupMember/11", - "user": { - "__ref": "UserCore:gid://gitlab/User/14" - } - }, - "UserCore:gid://gitlab/User/7": { - "__typename": "UserCore", - "id": "gid://gitlab/User/7", - "avatarUrl": "https://secure.gravatar.com/avatar/3a382857e362d6cce60d3806dd173444?s=80&d=identicon", - "name": "Ivan Carter", - "username": "ethyl" - }, - "GroupMember:gid://gitlab/GroupMember/10": { - "__typename": "GroupMember", - "id": "gid://gitlab/GroupMember/10", - "user": { - "__ref": "UserCore:gid://gitlab/User/7" - } - }, - "UserCore:gid://gitlab/User/15": { - "__typename": "UserCore", - "id": "gid://gitlab/User/15", - "avatarUrl": "https://secure.gravatar.com/avatar/79653006ff557e081db02deaa4ca281c?s=80&d=identicon", - "name": "Danuta Dare", - "username": "maddie_hintz" - }, - "GroupMember:gid://gitlab/GroupMember/9": { - "__typename": "GroupMember", - "id": "gid://gitlab/GroupMember/9", - "user": { - "__ref": "UserCore:gid://gitlab/User/15" - } - }, - "GroupMember:gid://gitlab/GroupMember/1": { - "__typename": "GroupMember", - "id": "gid://gitlab/GroupMember/1", - "user": { - "__ref": "UserCore:gid://gitlab/User/1" - } - }, "Milestone:gid://gitlab/Milestone/30": { "__typename": "Milestone", "id": "gid://gitlab/Milestone/30", -- cgit v1.2.3