Skip to content
Snippets Groups Projects
Commit f9b87323 authored by Adrian Orłów's avatar Adrian Orłów :fire:
Browse files

Merge branch 'MIN-238-normalize-data-fetched-for-overlays' into 'development'

feat(overlaybioentity): add util to get validated overlay bio entities

See merge request !104
parents f0aecede a51328e9
No related branches found
No related tags found
2 merge requests!223reset the pin numbers before search results are fetch (so the results will be...,!104feat(overlaybioentity): add util to get validated overlay bio entities
Pipeline #84410 passed
import { createAsyncThunk } from '@reduxjs/toolkit';
import { z } from 'zod';
import { axiosInstanceNewAPI } from '@/services/api/utils/axiosInstance';
import { OverlayBioEntity } from '@/types/models';
import { overlayBioEntitySchema } from '@/models/overlayBioEntitySchema';
import { validateDataUsingZodSchema } from '@/utils/validateDataUsingZodSchema';
import { OverlayBioEntityRender } from '@/types/OLrendering';
import { parseOverlayBioEntityToOlRenderingFormat } from './overlayBioEntity.utils';
import {
getValidOverlayBioEntities,
parseOverlayBioEntityToOlRenderingFormat,
} from './overlayBioEntity.utils';
import { apiPath } from '../apiPath';
import { modelsIdsSelector } from '../models/models.selectors';
import type { RootState } from '../store';
......@@ -27,10 +27,10 @@ export const getOverlayBioEntity = createAsyncThunk(
apiPath.getOverlayBioEntity({ overlayId, modelId }),
);
const isDataValid = validateDataUsingZodSchema(response.data, z.array(overlayBioEntitySchema));
const validOverlayBioEntities = getValidOverlayBioEntities(response.data);
if (isDataValid) {
return parseOverlayBioEntityToOlRenderingFormat(response.data, overlayId);
if (validOverlayBioEntities) {
return parseOverlayBioEntityToOlRenderingFormat(validOverlayBioEntities, overlayId);
}
return undefined;
......
import { calculateOvarlaysOrder } from './overlayBioEntity.utils';
import { overlayBioEntityFixture } from '@/models/fixtures/overlayBioEntityFixture';
import { OverlayBioEntity } from '@/types/models';
import { calculateOvarlaysOrder, getValidOverlayBioEntities } from './overlayBioEntity.utils';
describe('calculateOverlaysOrder', () => {
const cases = [
......@@ -62,3 +64,37 @@ describe('calculateOverlaysOrder', () => {
expect(calculateOvarlaysOrder(data)).toStrictEqual(expected);
});
});
describe('getValidOverlayBioEntities', () => {
it('should return empty array if overlayBioEntities are empty array', () => {
const result = getValidOverlayBioEntities([]);
expect(result).toEqual([]);
});
it('should return the same overlayBioEntities if all overlayBioEntities are valid', () => {
const result = getValidOverlayBioEntities(overlayBioEntityFixture);
expect(result).toEqual(overlayBioEntityFixture);
});
it('should filter properly and return valid overlayBioEntities if overlayBioEntities are mixed array with valid and invalid entities', () => {
const invalidOverlayBioEntities = overlayBioEntityFixture.map(overlayBioEntity => ({
...overlayBioEntity,
left: {},
})) as OverlayBioEntity[];
const result = getValidOverlayBioEntities([
...overlayBioEntityFixture,
...invalidOverlayBioEntities,
]);
expect(result).toEqual(overlayBioEntityFixture);
});
it('should return empty array if all overlayBioEntities are invalid', () => {
const invalidOverlayBioEntities = overlayBioEntityFixture.map(overlayBioEntity => ({
...overlayBioEntity,
right: {},
})) as OverlayBioEntity[];
const result = getValidOverlayBioEntities(invalidOverlayBioEntities);
expect(result).toEqual([]);
});
});
import { ONE } from '@/constants/common';
import { overlayBioEntitySchema } from '@/models/overlayBioEntitySchema';
import { OverlayBioEntityRender } from '@/types/OLrendering';
import { OverlayBioEntity } from '@/types/models';
import { z } from 'zod';
export const parseOverlayBioEntityToOlRenderingFormat = (
data: OverlayBioEntity[],
......@@ -66,3 +68,23 @@ export const calculateOvarlaysOrder = (
return overlaysOrder;
};
const isValidOverlayBioEntity = (overlayBioEntity: OverlayBioEntity): boolean => {
return overlayBioEntitySchema.safeParse(overlayBioEntity).success;
};
type OverlayBioEntities = OverlayBioEntity[];
export const getValidOverlayBioEntities = (
unvalidatedOverlayBioEntities: OverlayBioEntities,
): OverlayBioEntities | undefined => {
const filteredValidOverlayBioEntitiesSchema = z
.array(z.any())
.transform(overlayBioEntities => overlayBioEntities.filter(isValidOverlayBioEntity));
const parsedOverlayBioEntities = filteredValidOverlayBioEntitiesSchema.safeParse(
unvalidatedOverlayBioEntities,
);
return parsedOverlayBioEntities.success ? parsedOverlayBioEntities.data : undefined;
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment