Bw/test fixes (#37)

This commit is contained in:
Ben Warzeski
2022-10-07 14:48:59 -04:00
committed by GitHub
parent 6a275cc603
commit a04d19ff89
8 changed files with 66 additions and 33 deletions

View File

@@ -4,7 +4,6 @@ import { StrictDict } from 'utils';
const initialState = {
pageNumber: 1,
enrollments: [],
courseData: {},
entitlement: [],
emailConfirmation: {},
@@ -17,6 +16,8 @@ const initialState = {
export const cardId = (val) => `card-${val}`;
export const today = Date.now();
// eslint-disable-next-line no-unused-vars
const app = createSlice({
name: 'app',
@@ -25,10 +26,13 @@ const app = createSlice({
loadCourses: (state, { payload: { courses } }) => ({
...state,
courseData: courses.reduce(
(obj, curr, index) => ({
...obj,
[cardId(index)]: { ...curr, cardId: cardId(index) },
}),
(obj, curr, index) => {
const out = { ...curr, cardId: cardId(index) };
if (out.enrollment.lastEnrolled === null) {
out.enrollment.lastEnrolled = today;
}
return { ...obj, [cardId(index)]: out };
},
{},
),
}),

View File

@@ -1,9 +1,16 @@
import {
cardId, initialState, reducer, actions,
cardId,
initialState,
reducer,
actions,
today,
} from './reducer';
describe('app reducer', () => {
describe('reducers', () => {
beforeEach(() => {
jest.useFakeTimers();
});
it('returns initial state', () => {
expect(reducer(undefined, {})).toEqual(initialState);
});
@@ -30,16 +37,19 @@ describe('app reducer', () => {
courseRun: { cardId: courseIds[0] },
course: 1,
some: 'data',
enrollment: { lastEnrolled: 'test-last-enrolled' },
},
{
courseRun: { cardId: courseIds[1] },
course: 2,
some: 'other data',
enrollment: { lastEnrolled: 'test-last-enrolled' },
},
{
courseRun: { cardId: courseIds[2] },
course: 3,
some: 'still different data',
enrollment: { lastEnrolled: 'test-last-enrolled' },
},
];
const entitlementData = [
@@ -47,11 +57,13 @@ describe('app reducer', () => {
courseRun: { cardId: entitlementIds[0] },
course: 4,
some: 'STILL different data',
enrollment: { lastEnrolled: null },
},
{
courseRun: { cardId: entitlementIds[1] },
course: 5,
some: 'still DIFFERENT data',
enrollment: { lastEnrolled: null },
},
];
let out;
@@ -64,9 +76,20 @@ describe('app reducer', () => {
expect(out.courseData).toEqual({
[cardId(0)]: { ...enrollmentData[0], cardId: cardId(0) },
[cardId(1)]: { ...enrollmentData[1], cardId: cardId(1) },
[cardId(2)]: { ...enrollmentData[2], cardId: cardId(2) },
[cardId(3)]: { ...entitlementData[0], cardId: cardId(3) },
[cardId(4)]: { ...entitlementData[1], cardId: cardId(4) },
[cardId(2)]: {
...enrollmentData[2],
cardId: cardId(2),
},
[cardId(3)]: {
...entitlementData[0],
cardId: cardId(3),
enrollment: { lastEnrolled: today },
},
[cardId(4)]: {
...entitlementData[1],
cardId: cardId(4),
enrollment: { lastEnrolled: today },
},
});
});
});

View File

@@ -4,10 +4,10 @@ import { FilterKeys, SortKeys } from 'data/constants/app';
import simpleSelectors from './simpleSelectors';
import * as module from './currentList';
export const sortFn = (transform) => (v1, v2) => {
export const sortFn = (transform, { reverse }) => (v1, v2) => {
const [a, b] = [v1, v2].map(transform);
if (a === b) { return 0; }
return (a > b) ? 1 : -1;
return ((a > b) ? 1 : -1) * (reverse ? -1 : 1);
};
export const courseFilters = StrictDict({
@@ -32,7 +32,7 @@ export const currentList = (allCourses, {
filters,
}) => allCourses
.filter(module.courseFilterFn(filters))
.sort(module.sortFn(transforms[sortBy]));
.sort(module.sortFn(transforms[sortBy], { reverse: sortBy === SortKeys.enrolled }));
export const visibleList = (state, {
sortBy,

View File

@@ -30,9 +30,12 @@ describe('courseList selector module', () => {
describe('sortFn', () => {
it('performs comparison sort after running both values through transform', () => {
const transform = ({ val }) => val;
expect(sortFn(transform)({ val: 2 }, { val: 1 })).toEqual(1);
expect(sortFn(transform)({ val: 1 }, { val: 1 })).toEqual(0);
expect(sortFn(transform)({ val: 1 }, { val: 2 })).toEqual(-1);
expect(sortFn(transform, { reverse: false })({ val: 2 }, { val: 1 })).toEqual(1);
expect(sortFn(transform, { reverse: false })({ val: 1 }, { val: 1 })).toEqual(0);
expect(sortFn(transform, { reverse: false })({ val: 1 }, { val: 2 })).toEqual(-1);
expect(sortFn(transform, { reverse: true })({ val: 2 }, { val: 1 })).toEqual(-1);
expect(sortFn(transform, { reverse: true })({ val: 1 }, { val: 1 })).toEqual(0);
expect(sortFn(transform, { reverse: true })({ val: 1 }, { val: 2 })).toEqual(1);
});
});
describe('courseFilters', () => {
@@ -115,13 +118,22 @@ describe('courseList selector module', () => {
v2,
v3,
} = testCourses;
const sortBy = SortKeys.enrolled;
let sortBy = SortKeys.enrolled;
const testFilters = [1, 2, 3];
expect(currentList(
[empty, v2, v1, empty, empty, v3, empty],
{ sortBy, filters: testFilters },
)).toEqual([v1, v2, v3]);
expect(sortSpy).toHaveBeenCalledWith(transforms[sortBy]);
expect(sortSpy).toHaveBeenCalledWith(transforms[sortBy], { reverse: true });
expect(filterSpy).toHaveBeenCalledWith(testFilters);
sortSpy.mockClear();
sortBy = SortKeys.title;
expect(currentList(
[empty, v2, v1, empty, empty, v3, empty],
{ sortBy, filters: testFilters },
)).toEqual([v1, v2, v3]);
expect(sortSpy).toHaveBeenCalledWith(transforms[sortBy], { reverse: false });
expect(filterSpy).toHaveBeenCalledWith(testFilters);
sortSpy.mockRestore();
filterSpy.mockRestore();

View File

@@ -69,12 +69,14 @@ export const leaveEntitlementSession = (cardId) => (dispatch, getState) => {
export const unenrollFromCourse = (cardId, reason) => (dispatch, getState) => {
const { courseId } = selectors.app.courseCard.courseRun(getState(), cardId);
handleEvent(eventNames.unenrollReason, {
category: 'user-engagement',
displayName: 'v1',
label: reason,
course_id: courseId,
});
if (reason) {
handleEvent(eventNames.unenrollReason, {
category: 'user-engagement',
displayName: 'v1',
label: reason,
course_id: courseId,
});
}
dispatch(requests.unenrollFromCourse({
courseId,
onSuccess: () => dispatch(module.refreshList()),

View File

@@ -622,7 +622,7 @@ export const compileCourseRunData = (data, index) => {
const courseNumber = genCourseNumber(index);
const providerIndex = index % 3;
const lastEnrolledDate = new Date();
lastEnrolledDate.setDate(lastEnrolledDate.getDate() + index);
lastEnrolledDate.setDate(lastEnrolledDate.getDate() - index);
const lastEnrolled = lastEnrolledDate.toISOString();
const iteratedData = [
{