From 6fa10ca0d32c976bd097a4fefe19a873a5dccc5a Mon Sep 17 00:00:00 2001 From: Ben Warzeski Date: Mon, 22 May 2023 19:50:46 +0000 Subject: [PATCH] chore: redux transform hooks --- src/data/redux/transforms.js | 13 +++++++++++ src/data/redux/transforms.test.js | 38 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/data/redux/transforms.js create mode 100644 src/data/redux/transforms.test.js diff --git a/src/data/redux/transforms.js b/src/data/redux/transforms.js new file mode 100644 index 0000000..3980b3a --- /dev/null +++ b/src/data/redux/transforms.js @@ -0,0 +1,13 @@ +import { StrictDict } from 'utils'; +import selectors from 'data/selectors'; + +export const grades = StrictDict({ + subsectionGrade: ({ gradeFormat, subsection }) => () => ( + selectors.grades.subsectionGrade[gradeFormat](subsection) + ), + roundGrade: selectors.grades.roundGrade, +}); + +export default StrictDict({ + grades, +}); diff --git a/src/data/redux/transforms.test.js b/src/data/redux/transforms.test.js new file mode 100644 index 0000000..c639aba --- /dev/null +++ b/src/data/redux/transforms.test.js @@ -0,0 +1,38 @@ +import selectors from 'data/selectors'; + +import { GradeFormats } from 'data/constants/grades'; +import transforms from './transforms'; + +jest.mock('data/selectors', () => { + const { + GradeFormats: { absolute, percent }, + } = jest.requireActual('data/constants/grades'); + return { + grades: { + subsectionGrade: { + [absolute]: jest.fn(v => ({ absolute: v })), + [percent]: jest.fn(v => ({ percent: v })), + }, + roundGrade: jest.fn(), + }, + }; +}); + +describe('redux transforms', () => { + describe('grades transforms', () => { + test('subsectionGrade', () => { + const subsection = 'test-subsection'; + expect(transforms.grades.subsectionGrade({ + gradeFormat: GradeFormats.absolute, + subsection, + })()).toEqual(selectors.grades.subsectionGrade.absolute(subsection)); + expect(transforms.grades.subsectionGrade({ + gradeFormat: GradeFormats.percent, + subsection, + })()).toEqual(selectors.grades.subsectionGrade.percent(subsection)); + }); + test('roundGrade', () => { + expect(transforms.grades.roundGrade).toEqual(selectors.grades.roundGrade); + }); + }); +});