Skip to content

Add Node classes for Lessons, Units, and Courses #638

@rtibbles

Description

@rtibbles

This issue is not open for contribution. Visit Contributing guidelines to learn about the contributing process and how to find suitable issues.

Current behavior

Currently topic node hierarchies are undifferentiated.

Desired behavior

To better facilitate the usage of pre and post tests, we will be adding the ability to create specific modalities of topics. Using these modalities from le_utils, we will create three new Node classes, each of which will be a subclass of TopicNode:

LessonNode
UnitNode
CourseNode

These will all automatically set their modality in a similar way to the PracticeQuizNode, using the relevant modality from le_utils modalities constants.

CourseNodes may only have UnitNodes as children.

UnitNodes may only have LessonNodes as children.

LessonNodes may only have resource nodes as children.

In addtion, a LearningObjective class must be created that will define the learning objectives for a unit.

A constant VARIANT_A and a constant VARIANT_B should be added to the ricecooker classes, questions module.

Uniquely, the UnitNode will be allowed to add "questions" to itself, these will act as the basis for the pre and post test questions. An 'add_question' method should be added to the UnitNode, similarly to the ExerciseNode. Unlike the exercise it will take additional args after the question, the first of which will be a constant VARIANT_A or VARIANT_B to indicate which variant the question should be set into, and the second will be a list of one or more LearningObjective objects that are associated with that question.

All questions for pre and post tests are divided into two sets, A and B. These are then used to randomize learner assignment to ensure more rigorous analysis of the test results. Half of learners will be assigned to A for pre-test and B for post-test and the other half vice versa.

When serializing this information for inclusion in Studio, the UnitNode must use the defined mastery criterion JSON schema from le_utils in order to transmit this information, thus eliminating the need for changes on Studio to carry out additional processing.

Lastly, the UnitNode will need to have an additional learning objectives object in its options field. This must be included in the extra_fields/options field generated by the UnitNode when being sent to Studio, described by a JSONSchema in le_utils, and specifies all the learning objectives for the unit, the mapping of learning objectives to lessons in the unit, and the mapping of learning objectives to the assessment questions in the pre and post test.

To achieve this goal - the add_child method of the UnitNode should have its signature updated to require the associated learning objectives for a LessonNode to be added at the same time as the LessonNode is added as a child.

UnitNodes must have additional validation that ensures that they have pre/post test questions (a minimum of two), the delineation of A and B sets for questions, and the learning objectives metadata.

In addition, the validation should ensure that every learning objective associated with a lesson has questions associated with it in the question sets. Also, the tests should be balanced, with the same number of assessment items assessing each learning objective, and with the test variants having the same total number of questions over all.

All node types must properly validate to ensure that the do not contain the 'wrong' type of children.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions