Commit f4e99fa9 authored by Andrew Fontaine's avatar Andrew Fontaine

Merge branch 'jivanvl-change-cache-config' into 'master'

Changes the new jobs table cache config

See merge request gitlab-org/gitlab!82938
parents 5a3b6307 c3a0ffa4
......@@ -13,16 +13,38 @@ export default {
merge(existing = {}, incoming, { args = {} }) {
let nodes;
const areNodesEqual = isEqual(existing.nodes, incoming.nodes);
const statuses = Array.isArray(args.statuses) ? [...args.statuses] : args.statuses;
const { pageInfo } = incoming;
if (Object.keys(existing).length !== 0 && isEqual(existing?.statuses, args?.statuses)) {
nodes = [...existing.nodes, ...incoming.nodes];
if (areNodesEqual) {
if (incoming.pageInfo.hasNextPage) {
nodes = [...existing.nodes, ...incoming.nodes];
} else {
nodes = [...incoming.nodes];
}
} else {
if (!existing.pageInfo?.hasNextPage) {
nodes = [...incoming.nodes];
return {
nodes,
statuses,
pageInfo,
};
}
nodes = [...existing.nodes, ...incoming.nodes];
}
} else {
nodes = [...incoming.nodes];
}
return {
nodes,
statuses: Array.isArray(args.statuses) ? [...args.statuses] : args.statuses,
pageInfo: incoming.pageInfo,
statuses,
pageInfo,
};
},
},
......
......@@ -33,6 +33,26 @@ describe('jobs/components/table/graphql/cache_config', () => {
);
});
it('should not add to existing cache if the incoming elements are the same', () => {
// simulate that this is the last page
const finalExistingCache = {
...CIJobConnectionExistingCache,
pageInfo: {
hasNextPage: false,
},
};
const res = cacheConfig.typePolicies.CiJobConnection.merge(
CIJobConnectionExistingCache,
finalExistingCache,
{
args: firstLoadArgs,
},
);
expect(res.nodes).toHaveLength(CIJobConnectionExistingCache.nodes.length);
});
it('should contain the pageInfo key as part of the result', () => {
const res = cacheConfig.typePolicies.CiJobConnection.merge({}, CIJobConnectionIncomingCache, {
args: firstLoadArgs,
......
......@@ -1911,10 +1911,17 @@ export const CIJobConnectionIncomingCacheRunningStatus = {
};
export const CIJobConnectionExistingCache = {
pageInfo: {
__typename: 'PageInfo',
endCursor: 'eyJpZCI6IjIwNTEifQ',
hasNextPage: true,
hasPreviousPage: false,
startCursor: 'eyJpZCI6IjIxNzMifQ',
},
nodes: [
{ __ref: 'CiJob:gid://gitlab/Ci::Build/2057' },
{ __ref: 'CiJob:gid://gitlab/Ci::Build/2056' },
{ __ref: 'CiJob:gid://gitlab/Ci::Build/2051' },
{ __ref: 'CiJob:gid://gitlab/Ci::Build/2100' },
{ __ref: 'CiJob:gid://gitlab/Ci::Build/2101' },
{ __ref: 'CiJob:gid://gitlab/Ci::Build/2102' },
],
statuses: 'PENDING',
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment