diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue
index 400acba2f2fb558f9624efc49274661948d68c1d..8d6f78b18981311bb1277c403b79c88579369eda 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/details_page/tags_list.vue
@@ -11,6 +11,11 @@ import PersistedSearch from '~/packages_and_registries/shared/components/persist
 import TagsLoader from '~/packages_and_registries/shared/components/tags_loader.vue';
 import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants';
 import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
+import {
+  getPageParams,
+  getNextPageParams,
+  getPreviousPageParams,
+} from '~/packages_and_registries/shared/utils';
 import {
   ALERT_SUCCESS_TAG,
   ALERT_DANGER_TAG,
@@ -31,7 +36,6 @@ import {
 import getContainerRepositoryTagsQuery from '../../graphql/queries/get_container_repository_tags.query.graphql';
 import deleteContainerRepositoryTagsMutation from '../../graphql/mutations/delete_container_repository_tags.mutation.graphql';
 import DeleteModal from '../delete_modal.vue';
-import { getPageParams, getNextPageParams, getPreviousPageParams } from '../../utils';
 import TagsListRow from './tags_list_row.vue';
 
 export default {
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue
index fb639bddc79d0f6f6407655e735bca48a4a9d015..066c6bf35f272dfaeb9b319531e083f2db158ba2 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/pages/list.vue
@@ -18,6 +18,11 @@ import PersistedPagination from '~/packages_and_registries/shared/components/per
 import PersistedSearch from '~/packages_and_registries/shared/components/persisted_search.vue';
 import MetadataDatabaseAlert from '~/packages_and_registries/shared/components/container_registry_metadata_database_alert.vue';
 import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants';
+import {
+  getPageParams,
+  getNextPageParams,
+  getPreviousPageParams,
+} from '~/packages_and_registries/shared/utils';
 import { helpPagePath } from '~/helpers/help_page_helper';
 import DeleteImage from '../components/delete_image.vue';
 import RegistryHeader from '../components/list_page/registry_header.vue';
@@ -36,7 +41,6 @@ import {
   SETTINGS_TEXT,
 } from '../constants/index';
 import getContainerRepositoriesDetails from '../graphql/queries/get_container_repositories_details.query.graphql';
-import { getPageParams, getNextPageParams, getPreviousPageParams } from '../utils';
 
 export default {
   name: 'RegistryListPage',
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js b/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js
index 87c28e6e9b259c5e9dac6d478b830cd4f340da7f..751ab5180a118985955c96fc51bd05242330848c 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/utils.js
@@ -1,5 +1,4 @@
 import { approximateDuration, calculateRemainingMilliseconds } from '~/lib/utils/datetime_utility';
-import { GRAPHQL_PAGE_SIZE } from './constants/index';
 
 export const getImageName = (image = {}) => {
   return image.name || image.project?.path;
@@ -11,26 +10,3 @@ export const timeTilRun = (time) => {
   const difference = calculateRemainingMilliseconds(time);
   return approximateDuration(difference / 1000);
 };
-
-export const getNextPageParams = (cursor, pageSize = GRAPHQL_PAGE_SIZE) => ({
-  after: cursor,
-  first: pageSize,
-});
-
-export const getPreviousPageParams = (cursor, pageSize = GRAPHQL_PAGE_SIZE) => ({
-  first: null,
-  before: cursor,
-  last: pageSize,
-});
-
-export const getPageParams = (pageInfo = {}, pageSize = GRAPHQL_PAGE_SIZE) => {
-  if (pageInfo.before) {
-    return getPreviousPageParams(pageInfo.before, pageSize);
-  }
-
-  if (pageInfo.after) {
-    return getNextPageParams(pageInfo.after, pageSize);
-  }
-
-  return {};
-};
diff --git a/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue b/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue
index 481c2d7ab598d0ae582376807b9032715073baeb..617db4b24d7e69183f15913b4165fccfe09150f4 100644
--- a/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue
+++ b/app/assets/javascripts/packages_and_registries/dependency_proxy/app.vue
@@ -18,7 +18,7 @@ import ClipboardButton from '~/vue_shared/components/clipboard_button.vue';
 import TitleArea from '~/vue_shared/components/registry/title_area.vue';
 import ManifestsList from '~/packages_and_registries/dependency_proxy/components/manifests_list.vue';
 import { GRAPHQL_PAGE_SIZE } from '~/packages_and_registries/dependency_proxy/constants';
-import { getPageParams } from '~/packages_and_registries/dependency_proxy/utils';
+import { getPageParams } from '~/packages_and_registries/shared/utils';
 
 import getDependencyProxyDetailsQuery from '~/packages_and_registries/dependency_proxy/graphql/queries/get_dependency_proxy_details.query.graphql';
 
@@ -87,7 +87,7 @@ export default {
     },
     pageParams() {
       const { before, after } = this.$route.query;
-      return getPageParams({ before, after });
+      return getPageParams({ before, after }, GRAPHQL_PAGE_SIZE);
     },
     manifests() {
       return this.group.dependencyProxyManifests?.nodes ?? [];
diff --git a/app/assets/javascripts/packages_and_registries/dependency_proxy/utils.js b/app/assets/javascripts/packages_and_registries/dependency_proxy/utils.js
deleted file mode 100644
index e6b97fac89697273c0af048466a6f2bb7b14a792..0000000000000000000000000000000000000000
--- a/app/assets/javascripts/packages_and_registries/dependency_proxy/utils.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import { GRAPHQL_PAGE_SIZE } from './constants';
-
-const getNextPageParams = (cursor) => ({
-  after: cursor,
-  first: GRAPHQL_PAGE_SIZE,
-});
-
-const getPreviousPageParams = (cursor) => ({
-  first: null,
-  before: cursor,
-  last: GRAPHQL_PAGE_SIZE,
-});
-
-export const getPageParams = (pageInfo = {}) => {
-  if (pageInfo.before) {
-    return getPreviousPageParams(pageInfo.before);
-  }
-
-  if (pageInfo.after) {
-    return getNextPageParams(pageInfo.after);
-  }
-
-  return {};
-};
diff --git a/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue b/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue
index 4025a28342689236562db83b5e21372233482d20..dec7d6f78498098ccb24aa48c01a1d1452b1503a 100644
--- a/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue
+++ b/app/assets/javascripts/packages_and_registries/package_registry/pages/list.vue
@@ -27,7 +27,7 @@ import {
   getPageParams,
   getNextPageParams,
   getPreviousPageParams,
-} from '~/packages_and_registries/package_registry/utils';
+} from '~/packages_and_registries/shared/utils';
 
 export default {
   components: {
@@ -174,15 +174,15 @@ export default {
       }
     },
     handleSearchUpdate({ sort, filters, pageInfo }) {
-      this.pageParams = getPageParams(pageInfo);
+      this.pageParams = getPageParams(pageInfo, GRAPHQL_PAGE_SIZE);
       this.sort = sort;
       this.filters = { ...filters };
     },
     fetchNextPage() {
-      this.pageParams = getNextPageParams(this.pageInfo.endCursor);
+      this.pageParams = getNextPageParams(this.pageInfo.endCursor, GRAPHQL_PAGE_SIZE);
     },
     fetchPreviousPage() {
-      this.pageParams = getPreviousPageParams(this.pageInfo.startCursor);
+      this.pageParams = getPreviousPageParams(this.pageInfo.startCursor, GRAPHQL_PAGE_SIZE);
     },
   },
   i18n: {
diff --git a/app/assets/javascripts/packages_and_registries/package_registry/utils.js b/app/assets/javascripts/packages_and_registries/package_registry/utils.js
index 39c3900d4b84f5353a014be55d8ae769cf7be337..8af5a29afa921a8aab47dd3fa5eff4ad51c96764 100644
--- a/app/assets/javascripts/packages_and_registries/package_registry/utils.js
+++ b/app/assets/javascripts/packages_and_registries/package_registry/utils.js
@@ -1,7 +1,6 @@
 import { capitalize } from 'lodash';
 import { s__ } from '~/locale';
 import {
-  GRAPHQL_PAGE_SIZE,
   PACKAGE_TYPE_CONAN,
   PACKAGE_TYPE_MAVEN,
   PACKAGE_TYPE_NPM,
@@ -50,26 +49,3 @@ export const packageTypeToTrackCategory = (type) => `UI::${capitalize(type)}Pack
 
 export const sortableFields = (isGroupPage) =>
   SORT_FIELDS.filter((f) => f.orderBy !== LIST_KEY_PROJECT || isGroupPage);
-
-export const getNextPageParams = (cursor) => ({
-  after: cursor,
-  first: GRAPHQL_PAGE_SIZE,
-});
-
-export const getPreviousPageParams = (cursor) => ({
-  first: null,
-  before: cursor,
-  last: GRAPHQL_PAGE_SIZE,
-});
-
-export const getPageParams = (pageInfo = {}) => {
-  if (pageInfo.before) {
-    return getPreviousPageParams(pageInfo.before);
-  }
-
-  if (pageInfo.after) {
-    return getNextPageParams(pageInfo.after);
-  }
-
-  return {};
-};
diff --git a/app/assets/javascripts/packages_and_registries/shared/utils.js b/app/assets/javascripts/packages_and_registries/shared/utils.js
index 22aaa716720569a5fc80cd677b8d5d009a9ef6ec..8d80af177d8b5f3f5f99b0f8b494865fb64da99e 100644
--- a/app/assets/javascripts/packages_and_registries/shared/utils.js
+++ b/app/assets/javascripts/packages_and_registries/shared/utils.js
@@ -43,6 +43,32 @@ export const extractPageInfo = (queryObject) => {
   };
 };
 
+export const getNextPageParams = (cursor, first) => ({
+  after: cursor,
+  before: undefined,
+  first,
+  last: undefined,
+});
+
+export const getPreviousPageParams = (cursor, last) => ({
+  after: undefined,
+  before: cursor,
+  first: undefined,
+  last,
+});
+
+export const getPageParams = (pageInfo = {}, pageSize) => {
+  if (pageInfo.before) {
+    return getPreviousPageParams(pageInfo.before, pageSize);
+  }
+
+  if (pageInfo.after) {
+    return getNextPageParams(pageInfo.after, pageSize);
+  }
+
+  return {};
+};
+
 export const beautifyPath = (path) => (path ? path.split('/').join(' / ') : '');
 
 export const getCommitLink = ({ project_path: projectPath, pipeline = {} }, isGroup = false) => {
diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js
index 60554e442151e9374d1e8def21520c574ca9a050..b851f3a5e4692dbed45553df8cae0b9455c26a9e 100644
--- a/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js
+++ b/spec/frontend/packages_and_registries/container_registry/explorer/components/details_page/tags_list_spec.js
@@ -139,7 +139,7 @@ describe('Tags List', () => {
         expect(resolver).toHaveBeenCalledTimes(2);
         expect(resolver).toHaveBeenCalledWith({
           ...queryData,
-          first: null,
+          first: undefined,
           before: tagsPageInfo.startCursor,
           last: GRAPHQL_PAGE_SIZE,
         });
@@ -251,7 +251,7 @@ describe('Tags List', () => {
 
         expect(resolver).toHaveBeenCalledWith({
           ...queryData,
-          first: null,
+          first: undefined,
           last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED,
           before: tagsPageInfo.startCursor,
         });
@@ -268,7 +268,7 @@ describe('Tags List', () => {
 
         expect(resolver).toHaveBeenLastCalledWith({
           ...queryData,
-          first: null,
+          first: undefined,
           before: tagsPageInfo.startCursor,
           last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED,
         });
@@ -338,7 +338,7 @@ describe('Tags List', () => {
       expect(resolver).toHaveBeenCalledTimes(2);
       expect(resolver).toHaveBeenLastCalledWith({
         ...queryData,
-        first: null,
+        first: undefined,
         before: tagsPageInfo.startCursor,
         last: GRAPHQL_PAGE_SIZE,
       });
diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js
index d4b8f408e284f502fe034e334f0d3f51215c876d..1c58bb4776f94d48804eb15b88f20637b9cadd99 100644
--- a/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js
+++ b/spec/frontend/packages_and_registries/container_registry/explorer/pages/list_spec.js
@@ -569,14 +569,12 @@ describe('List Page', () => {
         expect(resolver).toHaveBeenCalledWith(
           expect.objectContaining({
             before: pageInfo.startCursor,
-            first: null,
             last: GRAPHQL_PAGE_SIZE,
           }),
         );
         expect(detailsResolver).toHaveBeenCalledWith(
           expect.objectContaining({
             before: pageInfo.startCursor,
-            first: null,
             last: GRAPHQL_PAGE_SIZE,
           }),
         );
@@ -600,7 +598,6 @@ describe('List Page', () => {
           expect.objectContaining({
             sort: 'UPDATED_DESC',
             before: pageInfo.startCursor,
-            first: null,
             last: GRAPHQL_PAGE_SIZE,
           }),
         );
@@ -608,7 +605,6 @@ describe('List Page', () => {
           expect.objectContaining({
             sort: 'UPDATED_DESC',
             before: pageInfo.startCursor,
-            first: null,
             last: GRAPHQL_PAGE_SIZE,
           }),
         );
@@ -672,7 +668,7 @@ describe('List Page', () => {
       describe('with metadata database enabled', () => {
         it.each`
           event     | expected
-          ${'prev'} | ${{ before: pageInfo.startCursor, first: null, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }}
+          ${'prev'} | ${{ before: pageInfo.startCursor, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }}
           ${'next'} | ${{ after: pageInfo.endCursor, first: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }}
         `('$event event triggers correct page request', async ({ event, expected }) => {
           const resolver = jest.fn().mockResolvedValue(graphQLImageListMock);
@@ -696,7 +692,7 @@ describe('List Page', () => {
 
         it.each`
           cursor                              | expected
-          ${{ before: pageInfo.startCursor }} | ${{ sort: 'UPDATED_DESC', before: pageInfo.startCursor, first: null, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }}
+          ${{ before: pageInfo.startCursor }} | ${{ sort: 'UPDATED_DESC', before: pageInfo.startCursor, last: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }}
           ${{ after: pageInfo.endCursor }}    | ${{ sort: 'UPDATED_DESC', after: pageInfo.endCursor, first: GRAPHQL_PAGE_SIZE_METADATA_ENABLED }}
         `(
           'calls resolver correctly when persisted search returns $cursor',
diff --git a/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js b/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js
index 92cb6a3c9bc9ffca0cd0cb441a24942a0f724cd3..d7a9c200c7b4a9199df8a96632c87bb544752ec9 100644
--- a/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js
+++ b/spec/frontend/packages_and_registries/container_registry/explorer/utils_spec.js
@@ -1,9 +1,6 @@
 import {
   getImageName,
   timeTilRun,
-  getNextPageParams,
-  getPreviousPageParams,
-  getPageParams,
 } from '~/packages_and_registries/container_registry/explorer/utils';
 
 describe('Container registry utilities', () => {
@@ -38,49 +35,4 @@ describe('Container registry utilities', () => {
       expect(result).toBe('');
     });
   });
-
-  describe('getNextPageParams', () => {
-    it('should return the next page params with the provided cursor', () => {
-      const cursor = 'abc123';
-      expect(getNextPageParams(cursor)).toEqual({
-        after: cursor,
-        first: 10,
-      });
-    });
-  });
-
-  describe('getPreviousPageParams', () => {
-    it('should return the previous page params with the provided cursor', () => {
-      const cursor = 'abc123';
-      expect(getPreviousPageParams(cursor)).toEqual({
-        first: null,
-        before: cursor,
-        last: 10,
-      });
-    });
-  });
-
-  describe('getPageParams', () => {
-    it('should return the previous page params if before cursor is available', () => {
-      const pageInfo = { before: 'abc123' };
-      expect(getPageParams(pageInfo)).toEqual({
-        first: null,
-        before: pageInfo.before,
-        last: 10,
-      });
-    });
-
-    it('should return the next page params if after cursor is available', () => {
-      const pageInfo = { after: 'abc123' };
-      expect(getPageParams(pageInfo)).toEqual({
-        after: pageInfo.after,
-        first: 10,
-      });
-    });
-
-    it('should return an empty object if both before and after cursors are not available', () => {
-      const pageInfo = {};
-      expect(getPageParams(pageInfo)).toEqual({});
-    });
-  });
 });
diff --git a/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js b/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js
index f4f6d8d10aa1b82ea08c5bb6c26d56c264f1b0ec..05ffd026f890e2f44468309999897574223956f4 100644
--- a/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js
+++ b/spec/frontend/packages_and_registries/dependency_proxy/app_spec.js
@@ -230,7 +230,6 @@ describe('DependencyProxyApp', () => {
 
                 expect(resolver).toHaveBeenCalledWith({
                   before: pagination().startCursor,
-                  first: null,
                   fullPath: provideDefaults.groupPath,
                   last: GRAPHQL_PAGE_SIZE,
                 });
@@ -345,7 +344,6 @@ describe('DependencyProxyApp', () => {
           await waitForPromises();
 
           expect(resolver).toHaveBeenCalledWith({
-            first: null,
             last: GRAPHQL_PAGE_SIZE,
             before: '1234',
             fullPath: provideDefaults.groupPath,
diff --git a/spec/frontend/packages_and_registries/dependency_proxy/utils_spec.js b/spec/frontend/packages_and_registries/dependency_proxy/utils_spec.js
deleted file mode 100644
index 72072c08537215252bafb3d9299c9818b7b69a54..0000000000000000000000000000000000000000
--- a/spec/frontend/packages_and_registries/dependency_proxy/utils_spec.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { getPageParams } from '~/packages_and_registries/dependency_proxy/utils';
-
-describe('getPageParams', () => {
-  it('should return the previous page params if before cursor is available', () => {
-    const pageInfo = { before: 'abc123' };
-    expect(getPageParams(pageInfo)).toEqual({
-      first: null,
-      before: pageInfo.before,
-      last: 20,
-    });
-  });
-
-  it('should return the next page params if after cursor is available', () => {
-    const pageInfo = { after: 'abc123' };
-    expect(getPageParams(pageInfo)).toEqual({
-      after: pageInfo.after,
-      first: 20,
-    });
-  });
-
-  it('should return an empty object if both before and after cursors are not available', () => {
-    const pageInfo = {};
-    expect(getPageParams(pageInfo)).toEqual({});
-  });
-});
diff --git a/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js b/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js
index a73f796245cbc3f2084d4c5066692f78e358169e..9952b9880eb29be1443390d832f155a76cac2be0 100644
--- a/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js
+++ b/spec/frontend/packages_and_registries/package_registry/pages/list_spec.js
@@ -266,7 +266,6 @@ describe('PackagesListApp', () => {
 
       expect(resolver).toHaveBeenCalledWith(
         expect.objectContaining({
-          first: null,
           before: pagination().startCursor,
           last: GRAPHQL_PAGE_SIZE,
         }),
diff --git a/spec/frontend/packages_and_registries/package_registry/utils_spec.js b/spec/frontend/packages_and_registries/package_registry/utils_spec.js
index a7aa5a3c533e5d82e4ff2903303040d547349201..bcf83eff3e0d9951a815660331027f3a88aad9c3 100644
--- a/spec/frontend/packages_and_registries/package_registry/utils_spec.js
+++ b/spec/frontend/packages_and_registries/package_registry/utils_spec.js
@@ -1,9 +1,4 @@
-import {
-  getPackageTypeLabel,
-  getNextPageParams,
-  getPreviousPageParams,
-  getPageParams,
-} from '~/packages_and_registries/package_registry/utils';
+import { getPackageTypeLabel } from '~/packages_and_registries/package_registry/utils';
 
 describe('Packages shared utils', () => {
   describe('getPackageTypeLabel', () => {
@@ -27,48 +22,3 @@ describe('Packages shared utils', () => {
     });
   });
 });
-
-describe('getNextPageParams', () => {
-  it('should return the next page params with the provided cursor', () => {
-    const cursor = 'abc123';
-    expect(getNextPageParams(cursor)).toEqual({
-      after: cursor,
-      first: 20,
-    });
-  });
-});
-
-describe('getPreviousPageParams', () => {
-  it('should return the previous page params with the provided cursor', () => {
-    const cursor = 'abc123';
-    expect(getPreviousPageParams(cursor)).toEqual({
-      first: null,
-      before: cursor,
-      last: 20,
-    });
-  });
-});
-
-describe('getPageParams', () => {
-  it('should return the previous page params if before cursor is available', () => {
-    const pageInfo = { before: 'abc123' };
-    expect(getPageParams(pageInfo)).toEqual({
-      first: null,
-      before: pageInfo.before,
-      last: 20,
-    });
-  });
-
-  it('should return the next page params if after cursor is available', () => {
-    const pageInfo = { after: 'abc123' };
-    expect(getPageParams(pageInfo)).toEqual({
-      after: pageInfo.after,
-      first: 20,
-    });
-  });
-
-  it('should return an empty object if both before and after cursors are not available', () => {
-    const pageInfo = {};
-    expect(getPageParams(pageInfo)).toEqual({});
-  });
-});
diff --git a/spec/frontend/packages_and_registries/shared/utils_spec.js b/spec/frontend/packages_and_registries/shared/utils_spec.js
index e08ab4004e6761421058e6110b56aa394d8ae446..1838ebe79e64e7946ee4cb8fd4e812af005fb27a 100644
--- a/spec/frontend/packages_and_registries/shared/utils_spec.js
+++ b/spec/frontend/packages_and_registries/shared/utils_spec.js
@@ -6,6 +6,9 @@ import {
   extractPageInfo,
   beautifyPath,
   getCommitLink,
+  getNextPageParams,
+  getPreviousPageParams,
+  getPageParams,
 } from '~/packages_and_registries/shared/utils';
 import { FILTERED_SEARCH_TERM } from '~/vue_shared/components/filtered_search_bar/constants';
 
@@ -79,6 +82,49 @@ describe('Packages And Registries shared utils', () => {
     });
   });
 
+  describe('getNextPageParams', () => {
+    it('should return the next page params with the provided cursor', () => {
+      const cursor = 'abc123';
+      expect(getNextPageParams(cursor, 20)).toEqual({
+        after: cursor,
+        first: 20,
+      });
+    });
+  });
+
+  describe('getPreviousPageParams', () => {
+    it('should return the previous page params with the provided cursor', () => {
+      const cursor = 'abc123';
+      expect(getPreviousPageParams(cursor, 20)).toEqual({
+        before: cursor,
+        last: 20,
+      });
+    });
+  });
+
+  describe('getPageParams', () => {
+    it('should return the previous page params if before cursor is available', () => {
+      const pageInfo = { before: 'abc123' };
+      expect(getPageParams(pageInfo, 20)).toEqual({
+        before: pageInfo.before,
+        last: 20,
+      });
+    });
+
+    it('should return the next page params if after cursor is available', () => {
+      const pageInfo = { after: 'abc123' };
+      expect(getPageParams(pageInfo, 20)).toEqual({
+        after: pageInfo.after,
+        first: 20,
+      });
+    });
+
+    it('should return an empty object if both before and after cursors are not available', () => {
+      const pageInfo = {};
+      expect(getPageParams(pageInfo, 20)).toEqual({});
+    });
+  });
+
   describe('beautifyPath', () => {
     it('returns a string with spaces around /', () => {
       expect(beautifyPath('foo/bar')).toBe('foo / bar');