The Best Practices Checklist behavior was wrong for some cases: * Video: if duration is null it shouldn't be marked as completed * Video: if there are no videos it shouldn't be marked as completed * Unit depth: if course doesn't have units it shouldn't be marked as completed * Diverse learning sequence: description mentions that 80% should contain multiple content types, so if it is exactly 80% it should be marked as completed
284 lines
9.4 KiB
JavaScript
284 lines
9.4 KiB
JavaScript
import * as validators from './courseChecklistValidators';
|
|
|
|
describe('courseCheckValidators utility functions', () => {
|
|
describe('hasWelcomeMessage', () => {
|
|
it('returns true when course run has an update', () => {
|
|
expect(validators.hasWelcomeMessage({ hasUpdate: true })).toEqual(true);
|
|
});
|
|
|
|
it('returns false when course run does not have an update', () => {
|
|
expect(validators.hasWelcomeMessage({ hasUpdate: false })).toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasGradingPolicy', () => {
|
|
it('returns true when sum of weights is 1', () => {
|
|
expect(validators.hasGradingPolicy(
|
|
{ hasGradingPolicy: true, sumOfWeights: 1 },
|
|
)).toEqual(true);
|
|
});
|
|
|
|
it('returns true when sum of weights is not 1 due to floating point approximation (1.00004)', () => {
|
|
expect(validators.hasGradingPolicy(
|
|
{ hasGradingPolicy: true, sumOfWeights: 1.00004 },
|
|
)).toEqual(true);
|
|
});
|
|
|
|
it('returns false when sum of weights is not 1', () => {
|
|
expect(validators.hasGradingPolicy(
|
|
{ hasGradingPolicy: true, sumOfWeights: 2 },
|
|
)).toEqual(false);
|
|
});
|
|
|
|
it('returns true when hasGradingPolicy is true', () => {
|
|
expect(validators.hasGradingPolicy(
|
|
{ hasGradingPolicy: true, sumOfWeights: 1 },
|
|
)).toEqual(true);
|
|
});
|
|
|
|
it('returns false when hasGradingPolicy is false', () => {
|
|
expect(validators.hasGradingPolicy(
|
|
{ hasGradingPolicy: false, sumOfWeights: 1 },
|
|
)).toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasCertificate', () => {
|
|
it('returns true when certificates are activated and course run has a certificate', () => {
|
|
expect(validators.hasCertificate({ isActivated: true, hasCertificate: true }))
|
|
.toEqual(true);
|
|
});
|
|
|
|
it('returns false when certificates are not activated and course run has a certificate', () => {
|
|
expect(validators.hasCertificate({ isActivated: false, hasCertificate: true }))
|
|
.toEqual(false);
|
|
});
|
|
|
|
it('returns false when certificates are activated and course run does not have a certificate', () => {
|
|
expect(validators.hasCertificate({ isActivated: true, hasCertificate: false }))
|
|
.toEqual(false);
|
|
});
|
|
|
|
it('returns false when certificates are not activated and course run does not have a certificate', () => {
|
|
expect(validators.hasCertificate({ isActivated: false, hasCertificate: false }))
|
|
.toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasDates', () => {
|
|
it('returns true when course run has start date and end date', () => {
|
|
expect(validators.hasDates({ hasStartDate: true, hasEndDate: true })).toEqual(true);
|
|
});
|
|
|
|
it('returns false when course run has no start date and end date', () => {
|
|
expect(validators.hasDates({ hasStartDate: false, hasEndDate: true })).toEqual(false);
|
|
});
|
|
|
|
it('returns true when course run has start date and no end date', () => {
|
|
expect(validators.hasDates({ hasStartDate: true, hasEndDate: false })).toEqual(false);
|
|
});
|
|
|
|
it('returns true when course run has no start date and no end date', () => {
|
|
expect(validators.hasDates({ hasStartDate: false, hasEndDate: false })).toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasAssignmentDeadlines', () => {
|
|
it('returns true when a course run has start and end date and all assignments are within range', () => {
|
|
expect(validators.hasAssignmentDeadlines(
|
|
{
|
|
assignmentsWithDatesBeforeStart: 0,
|
|
assignmentsWithDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesBeforeStart: 0,
|
|
},
|
|
{
|
|
hasStartDate: true,
|
|
hasEndDate: true,
|
|
},
|
|
)).toEqual(true);
|
|
});
|
|
|
|
it('returns false when a course run has no start and no end date', () => {
|
|
expect(validators.hasAssignmentDeadlines(
|
|
{},
|
|
{
|
|
hasStartDate: false,
|
|
hasEndDate: false,
|
|
},
|
|
)).toEqual(false);
|
|
});
|
|
|
|
it('returns false when a course has start and end date and no assignments', () => {
|
|
expect(validators.hasAssignmentDeadlines(
|
|
{
|
|
totalNumber: 0,
|
|
},
|
|
{
|
|
hasStartDate: true,
|
|
hasEndDate: true,
|
|
},
|
|
)).toEqual(false);
|
|
});
|
|
|
|
it('returns false when a course run has start and end date and assignments before start', () => {
|
|
expect(validators.hasAssignmentDeadlines(
|
|
{
|
|
assignmentsWithDatesBeforeStart: ['test'],
|
|
assignmentsWithDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesBeforeStart: 0,
|
|
},
|
|
{
|
|
hasStartDate: true,
|
|
hasEndDate: true,
|
|
},
|
|
)).toEqual(false);
|
|
});
|
|
|
|
it('returns false when a course run has start and end date and assignments after end', () => {
|
|
expect(validators.hasAssignmentDeadlines(
|
|
{
|
|
assignmentsWithDatesBeforeStart: 0,
|
|
assignmentsWithDatesAfterEnd: ['test'],
|
|
assignmentsWithOraDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesBeforeStart: 0,
|
|
},
|
|
{
|
|
hasStartDate: true,
|
|
hasEndDate: true,
|
|
},
|
|
)).toEqual(false);
|
|
});
|
|
});
|
|
|
|
it(
|
|
'returns false when a course run has start and end date and an ora with a date before start',
|
|
() => {
|
|
expect(validators.hasAssignmentDeadlines(
|
|
{
|
|
assignmentsWithDatesBeforeStart: 0,
|
|
assignmentsWithDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesBeforeStart: ['test'],
|
|
},
|
|
{
|
|
hasStartDate: true,
|
|
hasEndDate: true,
|
|
},
|
|
)).toEqual(false);
|
|
},
|
|
);
|
|
|
|
it(
|
|
'returns false when a course run has start and end date and an ora with a date after end',
|
|
() => {
|
|
expect(validators.hasAssignmentDeadlines(
|
|
{
|
|
assignmentsWithDatesBeforeStart: 0,
|
|
assignmentsWithDatesAfterEnd: 0,
|
|
assignmentsWithOraDatesAfterEnd: ['test'],
|
|
assignmentsWithOraDatesBeforeStart: 0,
|
|
},
|
|
{
|
|
hasStartDate: true,
|
|
hasEndDate: true,
|
|
},
|
|
)).toEqual(false);
|
|
},
|
|
);
|
|
|
|
describe('hasShortVideoDuration', () => {
|
|
it('returns false if course run has no videos', () => {
|
|
expect(validators.hasShortVideoDuration({ totalNumber: 0 })).toEqual(false);
|
|
});
|
|
|
|
it('returns true if course run videos have a median duration <= to 600', () => {
|
|
expect(validators.hasShortVideoDuration({ totalNumber: 1, durations: { median: 100 } }))
|
|
.toEqual(true);
|
|
});
|
|
|
|
it('returns true if course run videos have a median duration > to 600', () => {
|
|
expect(validators.hasShortVideoDuration({ totalNumber: 10, durations: { median: 700 } }))
|
|
.toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasDiverseSequences', () => {
|
|
it('returns true if < 20% of visible subsections have more than one block type', () => {
|
|
expect(validators.hasDiverseSequences({ totalVisible: 10, numWithOneBlockType: 1 }))
|
|
.toEqual(true);
|
|
});
|
|
|
|
it('returns false if no visible subsections', () => {
|
|
expect(validators.hasDiverseSequences({ totalVisible: 0 })).toEqual(false);
|
|
});
|
|
|
|
it('returns false if >= 20% of visible subsections have more than one block type', () => {
|
|
expect(validators.hasDiverseSequences({ totalVisible: 10, numWithOneBlockType: 3 }))
|
|
.toEqual(false);
|
|
});
|
|
|
|
it('return false if < 0 visible subsections', () => {
|
|
expect(validators.hasDiverseSequences({ totalVisible: -1, numWithOneBlockType: 1 }))
|
|
.toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasWeeklyHighlights', () => {
|
|
it('returns true when course run has highlights enabled', () => {
|
|
const data = { highlightsActiveForCourse: true, highlightsEnabled: true };
|
|
expect(validators.hasWeeklyHighlights(data)).toEqual(true);
|
|
});
|
|
|
|
it('returns false when course run has highlights enabled', () => {
|
|
const data = { highlightsActiveForCourse: false, highlightsEnabled: false };
|
|
expect(validators.hasWeeklyHighlights(data)).toEqual(false);
|
|
|
|
data.highlightsEnabled = true;
|
|
data.highlightsActiveForCourse = false;
|
|
expect(validators.hasWeeklyHighlights(data)).toEqual(false);
|
|
|
|
data.highlightsEnabled = false;
|
|
data.highlightsActiveForCourse = true;
|
|
expect(validators.hasWeeklyHighlights(data)).toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasShortUnitDepth', () => {
|
|
it('returns true when course run has median number of blocks <= 3', () => {
|
|
const units = {
|
|
totalVisible: 2,
|
|
numBlocks: {
|
|
median: 3,
|
|
},
|
|
};
|
|
|
|
expect(validators.hasShortUnitDepth(units)).toEqual(true);
|
|
});
|
|
|
|
it('returns false when course run has median number of blocks > 3', () => {
|
|
const units = {
|
|
totalVisible: 2,
|
|
numBlocks: {
|
|
median: 4,
|
|
},
|
|
};
|
|
|
|
expect(validators.hasShortUnitDepth(units)).toEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('hasProctoringEscalationEmail', () => {
|
|
it('returns true when the course has a proctoring escalation email', () => {
|
|
const proctoring = { hasProctoringEscalationEmail: true };
|
|
expect(validators.hasProctoringEscalationEmail(proctoring)).toEqual(true);
|
|
});
|
|
|
|
it('returns false when the course does not have a proctoring escalation email', () => {
|
|
const proctoring = { hasProctoringEscalationEmail: false };
|
|
expect(validators.hasProctoringEscalationEmail(proctoring)).toEqual(false);
|
|
});
|
|
});
|
|
});
|