Files
frontend-app-learning/src/courseware/data/__factories__/sequenceMetadata.factory.js
Michael Terry 90d6ea8137 feat: notify the user if a sequence is hidden because of due date (#636)
Normally, these sequences are skipped. But if the user manually
goes to the section, they should be notified why they can't access
it. That can easily happen if they bookmarked the page or something.

AA-1000
2021-09-10 11:13:48 -04:00

92 lines
3.0 KiB
JavaScript

import { Factory } from 'rosie'; // eslint-disable-line import/no-extraneous-dependencies
import '../../../shared/data/__factories__/block.factory';
import { buildSimpleCourseBlocks } from '../../../shared/data/__factories__/courseBlocks.factory';
Factory.define('sequenceMetadata')
.option('courseId', (courseId) => {
if (courseId) {
return courseId;
}
throw new Error('courseId must be specified for sequenceMetadata factory.');
})
// An array of units
.option('unitBlocks', ['courseId'], courseId => ([
Factory.build(
'block',
{ type: 'vertical' },
{ courseId },
),
]))
.option(
'sequenceBlock', ['courseId', 'unitBlocks'], (courseId, unitBlocks) => (
Factory.build(
'block',
{ type: 'sequential', children: unitBlocks.map(unitBlock => unitBlock.id) },
{ courseId },
)
),
)
.attr('element_id', ['sequenceBlock'], sequenceBlock => sequenceBlock.block_id)
.attr('item_id', ['sequenceBlock'], sequenceBlock => sequenceBlock.id)
.attr('display_name', ['sequenceBlock'], sequenceBlock => sequenceBlock.display_name)
.attr('gated_content', ['sequenceBlock'], sequenceBlock => ({
gated: false,
prereq_url: null,
prereq_id: `${sequenceBlock.id}-prereq`,
prereq_section_name: `${sequenceBlock.display_name}-prereq`,
gated_section_name: sequenceBlock.display_name,
}))
.attr('items', ['unitBlocks', 'sequenceBlock'], (unitBlocks, sequenceBlock) => unitBlocks.map(
unitBlock => ({
href: '',
graded: unitBlock.graded,
id: unitBlock.id,
bookmarked: unitBlock.bookmarked || false,
path: `Chapter Display Name > ${sequenceBlock.display_name} > ${unitBlock.display_name}`,
type: unitBlock.type,
complete: unitBlock.complete || null,
content: '',
page_title: unitBlock.display_name,
contains_content_type_gated_content: unitBlock.contains_content_type_gated_content,
}),
))
.attrs({
exclude_units: true,
position: null,
next_url: null,
tag: 'sequential',
save_position: true,
prev_url: null,
is_time_limited: false,
is_hidden_after_due: false,
show_completion: true,
banner_text: null,
format: 'Homework',
});
/**
* Build a simple course and simple metadata for its sequence.
*/
export default function buildSimpleCourseAndSequenceMetadata(options = {}) {
const courseMetadata = options.courseMetadata || Factory.build('courseMetadata', {
course_access: {
has_access: false,
},
});
const courseId = courseMetadata.id;
const simpleCourseBlocks = buildSimpleCourseBlocks(courseId, courseMetadata.name, options);
const { unitBlocks, sequenceBlocks } = simpleCourseBlocks;
const sequenceMetadata = options.sequenceMetadata || sequenceBlocks.map(block => Factory.build(
'sequenceMetadata',
{},
{
courseId, unitBlocks, sequenceBlock: block,
},
));
return {
...simpleCourseBlocks,
courseMetadata,
sequenceMetadata,
};
}