summaryrefslogtreecommitdiff
path: root/spec/frontend/usage_quotas/storage/utils_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/usage_quotas/storage/utils_spec.js')
-rw-r--r--spec/frontend/usage_quotas/storage/utils_spec.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/spec/frontend/usage_quotas/storage/utils_spec.js b/spec/frontend/usage_quotas/storage/utils_spec.js
new file mode 100644
index 00000000000..8fdd307c008
--- /dev/null
+++ b/spec/frontend/usage_quotas/storage/utils_spec.js
@@ -0,0 +1,88 @@
+import cloneDeep from 'lodash/cloneDeep';
+import { PROJECT_STORAGE_TYPES } from '~/usage_quotas/storage/constants';
+import {
+ parseGetProjectStorageResults,
+ getStorageTypesFromProjectStatistics,
+ descendingStorageUsageSort,
+} from '~/usage_quotas/storage/utils';
+import {
+ mockGetProjectStorageStatisticsGraphQLResponse,
+ defaultProjectProvideValues,
+ projectData,
+} from './mock_data';
+
+describe('getStorageTypesFromProjectStatistics', () => {
+ const projectStatistics = mockGetProjectStorageStatisticsGraphQLResponse.data.project.statistics;
+
+ describe('matches project statistics value with matching storage type', () => {
+ const typesWithStats = getStorageTypesFromProjectStatistics(projectStatistics);
+
+ it.each(PROJECT_STORAGE_TYPES)('storage type: $id', ({ id }) => {
+ expect(typesWithStats).toContainEqual({
+ storageType: expect.objectContaining({
+ id,
+ }),
+ value: projectStatistics[id],
+ });
+ });
+ });
+
+ it('adds helpPath to a relevant type', () => {
+ const trimTypeId = (id) => id.replace('Size', '');
+ const helpLinks = PROJECT_STORAGE_TYPES.reduce((acc, { id }) => {
+ const key = trimTypeId(id);
+ return {
+ ...acc,
+ [key]: `url://${id}`,
+ };
+ }, {});
+
+ const typesWithStats = getStorageTypesFromProjectStatistics(projectStatistics, helpLinks);
+
+ typesWithStats.forEach((type) => {
+ const key = trimTypeId(type.storageType.id);
+ expect(type.storageType.helpPath).toBe(helpLinks[key]);
+ });
+ });
+});
+describe('parseGetProjectStorageResults', () => {
+ it('parses project statistics correctly', () => {
+ expect(
+ parseGetProjectStorageResults(
+ mockGetProjectStorageStatisticsGraphQLResponse.data,
+ defaultProjectProvideValues.helpLinks,
+ ),
+ ).toMatchObject(projectData);
+ });
+
+ it('includes storage type with size of 0 in returned value', () => {
+ const mockedResponse = cloneDeep(mockGetProjectStorageStatisticsGraphQLResponse.data);
+ // ensuring a specific storage type item has size of 0
+ mockedResponse.project.statistics.repositorySize = 0;
+
+ const response = parseGetProjectStorageResults(
+ mockedResponse,
+ defaultProjectProvideValues.helpLinks,
+ );
+
+ expect(response.storage.storageTypes).toEqual(
+ expect.arrayContaining([
+ {
+ storageType: expect.any(Object),
+ value: 0,
+ },
+ ]),
+ );
+ });
+});
+
+describe('descendingStorageUsageSort', () => {
+ it('sorts items by a given key in descending order', () => {
+ const items = [{ k: 1 }, { k: 3 }, { k: 2 }];
+
+ const sorted = [...items].sort(descendingStorageUsageSort('k'));
+
+ const expectedSorted = [{ k: 3 }, { k: 2 }, { k: 1 }];
+ expect(sorted).toEqual(expectedSorted);
+ });
+});