Bw/test fixes (#37)
This commit is contained in:
@@ -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 };
|
||||
},
|
||||
{},
|
||||
),
|
||||
}),
|
||||
|
||||
@@ -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 },
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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()),
|
||||
|
||||
@@ -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 = [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user