summaryrefslogtreecommitdiff
path: root/spec/frontend/lib/apollo/persistence_mapper_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/lib/apollo/persistence_mapper_spec.js')
-rw-r--r--spec/frontend/lib/apollo/persistence_mapper_spec.js163
1 files changed, 163 insertions, 0 deletions
diff --git a/spec/frontend/lib/apollo/persistence_mapper_spec.js b/spec/frontend/lib/apollo/persistence_mapper_spec.js
new file mode 100644
index 00000000000..2efe28d2ca7
--- /dev/null
+++ b/spec/frontend/lib/apollo/persistence_mapper_spec.js
@@ -0,0 +1,163 @@
+import { persistenceMapper } from '~/lib/apollo/persistence_mapper';
+import NON_PERSISTED_CACHE from './mock_data/non_persisted_cache.json';
+import CACHE_WITH_PERSIST_DIRECTIVE from './mock_data/cache_with_persist_directive.json';
+import CACHE_WITH_PERSIST_DIRECTIVE_AND_FIELDS from './mock_data/cache_with_persist_directive_and_field.json';
+
+describe('lib/apollo/persistence_mapper', () => {
+ it('returns only empty root query if `@persist` directive or `__persist` field is not present', async () => {
+ const persistedData = await persistenceMapper(JSON.stringify(NON_PERSISTED_CACHE));
+
+ expect(JSON.parse(persistedData)).toEqual({ ROOT_QUERY: { __typename: 'Query' } });
+ });
+
+ it('returns root query with one `project` field if only `@persist` directive is present', async () => {
+ const persistedData = await persistenceMapper(JSON.stringify(CACHE_WITH_PERSIST_DIRECTIVE));
+
+ expect(JSON.parse(persistedData)).toEqual({
+ ROOT_QUERY: {
+ __typename: 'Query',
+ 'project({"fullPath":"flightjs/Flight"}) @persist': {
+ __ref: 'Project:gid://gitlab/Project/6',
+ },
+ },
+ 'Project:gid://gitlab/Project/6': { __typename: 'Project', id: 'gid://gitlab/Project/6' },
+ });
+ });
+
+ it('returns root query nested fields that contain `__persist` field if `@persist` directive is present', async () => {
+ const persistedData = await persistenceMapper(
+ JSON.stringify(CACHE_WITH_PERSIST_DIRECTIVE_AND_FIELDS),
+ );
+
+ expect(JSON.parse(persistedData)).toEqual({
+ ROOT_QUERY: {
+ __typename: 'Query',
+ 'project({"fullPath":"flightjs/Flight"}) @persist': {
+ __ref: 'Project:gid://gitlab/Project/6',
+ },
+ },
+ 'Project:gid://gitlab/Project/6': {
+ __typename: 'Project',
+ id: 'gid://gitlab/Project/6',
+ 'issues({"after":null,"before":"eyJ1cGRhdGVkX2F0IjoiMjAyMy0wMS0wOSAwNDowNToyOS4yMzI5NDUwMDAgKzAwMDAiLCJpZCI6IjE1NjYifQ","includeSubepics":true,"last":20,"sort":"UPDATED_DESC","state":"opened","types":["ISSUE","INCIDENT","TEST_CASE","TASK"]})': {
+ __typename: 'IssueConnection',
+ __persist: true,
+ pageInfo: {
+ __typename: 'PageInfo',
+ hasNextPage: true,
+ hasPreviousPage: false,
+ startCursor:
+ 'eyJ1cGRhdGVkX2F0IjoiMjAyMy0wMS0xMCAxMjozNjo1NC41NDYxNzEwMDAgKzAwMDAiLCJpZCI6IjQ4MyJ9',
+ endCursor:
+ 'eyJ1cGRhdGVkX2F0IjoiMjAyMy0wMS0wOSAwNDowNToyOS4zMDE3NDcwMDAgKzAwMDAiLCJpZCI6IjE1NjcifQ',
+ },
+ nodes: [
+ {
+ __ref: 'Issue:gid://gitlab/Issue/483',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1585',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1584',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1583',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1582',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1581',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1580',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1579',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1578',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1577',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1576',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1575',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1574',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1573',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1572',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1571',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1570',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1569',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1568',
+ },
+ {
+ __ref: 'Issue:gid://gitlab/Issue/1567',
+ },
+ ],
+ },
+ },
+ 'Issue:gid://gitlab/Issue/483': {
+ __typename: 'Issue',
+ __persist: true,
+ id: 'gid://gitlab/Issue/483',
+ iid: '31',
+ confidential: false,
+ createdAt: '2022-09-11T15:24:16Z',
+ downvotes: 1,
+ dueDate: null,
+ hidden: false,
+ humanTimeEstimate: null,
+ mergeRequestsCount: 1,
+ moved: false,
+ state: 'opened',
+ title: 'Instigate the Incident!',
+ updatedAt: '2023-01-10T12:36:54Z',
+ closedAt: null,
+ upvotes: 0,
+ userDiscussionsCount: 2,
+ webPath: '/flightjs/Flight/-/issues/31',
+ webUrl: 'https://gdk.test:3443/flightjs/Flight/-/issues/31',
+ type: 'INCIDENT',
+ assignees: {
+ __typename: 'UserCoreConnection',
+ nodes: [],
+ },
+ author: {
+ __ref: 'UserCore:gid://gitlab/User/1',
+ },
+ labels: {
+ __typename: 'LabelConnection',
+ nodes: [],
+ },
+ milestone: null,
+ taskCompletionStatus: {
+ __typename: 'TaskCompletionStatus',
+ completedCount: 0,
+ count: 0,
+ },
+ blockingCount: 0,
+ healthStatus: null,
+ weight: null,
+ },
+ });
+ });
+});