From c23bc6399eeaa05ae91e357ac53c9f3631be526e Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Wed, 29 Jan 2025 18:04:44 -0600 Subject: [PATCH 01/17] Commit v2.js --- migrations/v2.js | 189 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 migrations/v2.js diff --git a/migrations/v2.js b/migrations/v2.js new file mode 100644 index 0000000..072f99f --- /dev/null +++ b/migrations/v2.js @@ -0,0 +1,189 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; + +describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { + let articles, assessments; + + whereFromPlugin('adapt-contrib-assessment - from v2', { name: 'adapt-contrib-assessment', version: '<=2.0.3' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + articles = content.filter(({ _type }) => _type === 'article'); + assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessments.length > 0) return true; + }); + + /** + * * Add JSON field and set attribute. + */ + mutateContent('adapt-contrib-assessment - add assessment._questions._canShowModelAnswer', async () => { + assessments.forEach(assessment => { + assessment._canShowModelAnswer = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._questions._canShowModelAnswer attribute', async () => { + const isValid = assessments.every(assessment => + assessment._questions.every(item => + item._canShowModelAnswer !== false + ) + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer not added to every instance of assessment._questions'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v2.0.3', { name: 'adapt-contrib-assessment', version: '2.0.3', framework: '>=2' }); +}); + +describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { + let articles, assessments; + + whereFromPlugin('adapt-contrib-assessment - from v2.1.0', { name: 'adapt-contrib-assessment', version: '<=2.1.1' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + articles = content.filter(({ _type }) => _type === 'article'); + assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessments) return true; + }); + + /** + * * Modify existing attribute to new value. + */ + mutateContent('adapt-contrib-assessment - add assessment._isPercentageBased', async () => { + assessments.forEach(assessment => { + if (assessment._isPercentageBased !== true) assessment._isPercentageBased = true; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._isPercentageBased attribute', async () => { + const isValid = assessments.every(assessment => + assessment._isPercentageBased === true + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _isPercentageBased has been modified to true'); + return true; + }); + + /** + * * Modify existing attribute to new value. + */ + mutateContent('adapt-contrib-assessment - add assessment._canShowFeedback', async () => { + assessments.forEach(assessment => { + if (assessment._canShowFeedback !== false) assessment._canShowFeedback = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._canShowFeedback attribute', async () => { + const isValid = assessments.every(assessment => + assessment._canShowFeedback === false + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowFeedback has been modified to false'); + return true; + }); + + /** + * * Modify existing attribute to new value. + */ + mutateContent('adapt-contrib-assessment - add assessment._canShowMarking', async () => { + assessments.forEach(assessment => { + if (assessment._canShowMarking !== false) assessment._canShowMarking = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._canShowMarking attribute', async () => { + const isValid = assessments.every(assessment => + assessment._canShowMarking === false + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowMarking has been modified to false'); + return true; + }); + + /** + * * Modify existing attribute to new value. + */ + mutateContent('adapt-contrib-assessment - add assessment._canShowModelAnswer', async () => { + assessments.forEach(assessment => { + if (assessment._canShowModelAnswer !== false) assessment._canShowModelAnswer = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._canShowModelAnswer attribute', async () => { + const isValid = assessments.every(assessment => + assessment._canShowModelAnswer === false + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer has been modified to false'); + return true; + }); + + /** + * * Remove existing attribute. + */ + mutateContent('adapt-contrib-assessment - add assessment._requireAssessmentPassed', async () => { + assessments.forEach(assessment => { + delete assessment._requireAssessmentPassed; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._requireAssessmentPassed attribute', async () => { + const isValid = assessments.every(assessment => + assessment._requireAssessmentPassed === undefined + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _requireAssessmentPassed has been removed'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v2.1.1', { name: 'adapt-contrib-assessment', version: '2.1.1', framework: '>=2' }); +}); + +describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { + let articles, assessments; + + whereFromPlugin('adapt-contrib-assessment - from v2.1.1', { name: 'adapt-contrib-assessment', version: '<=2.2.0' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + articles = content.filter(({ _type }) => _type === 'article'); + assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessments) return true; + }); + + /** + * * Modify Attribute + */ + mutateContent('adapt-contrib-assessment - add assessment._includeInTotalScore attribute', async () => { + assessments.forEach(assessment => { + assessment._includeInTotalScore = true; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._includeInTotalScore attribute', async () => { + const isValid = assessments.every(({ _includeInTotalScore }) => _includeInTotalScore === true); + if (!isValid) throw new Error('adapt-contrib-assessment - _includeInTotalScore not modified to true in every assessment instance.'); + return true; + }); + + /** + * * Add JSON field and set attribute. + */ + mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { + assessments.forEach(assessment => { + assessment._allowResetIfPassed = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._allowResetIfPassed attribute', async () => { + const isValid = assessments.every(assessment => + assessment._questions.every(item => + item._allowResetIfPassed === false + ) + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _allowResetIfPassed not added to every instance of assessment._questions'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v2.2.0', { name: 'adapt-contrib-assessment', version: 'v2.2.0', framework: '>=2' }); +}); From ac02bcd80a438907ff6b50f085fe6a4ec9ea9b82 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 31 Jan 2025 14:46:11 -0600 Subject: [PATCH 02/17] assessment migrations --- migrations/v2.js | 52 +++++++++++++++++--- migrations/v3.js | 29 +++++++++++ migrations/v4.js | 123 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 migrations/v3.js create mode 100644 migrations/v4.js diff --git a/migrations/v2.js b/migrations/v2.js index 072f99f..fe58089 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -3,7 +3,7 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, u describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v2', { name: 'adapt-contrib-assessment', version: '<=2.0.3' }); + whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '<=2.0.3' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); @@ -12,11 +12,13 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { }); /** - * * Add JSON field and set attribute. + * * Add field to each item in a JSON array and set blank. */ - mutateContent('adapt-contrib-assessment - add assessment._questions._canShowModelAnswer', async () => { + mutateContent('adapt-contrib-assessment - add assessment._questions._canShowModelAnswer attribute', async () => { assessments.forEach(assessment => { - assessment._canShowModelAnswer = false; + assessment._questions.forEach(item => { + item._canShowModelAnswer = true; + }); }); return true; }); @@ -31,7 +33,39 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { return true; }); - updatePlugin('adapt-contrib-assessment - update to v2.0.3', { name: 'adapt-contrib-assessment', version: '2.0.3', framework: '>=2' }); + updatePlugin('adapt-contrib-assessment - update to v2.0.3', { name: 'adapt-contrib-assessment', version: '2.0.3', framework: '>=2.0.0' }); +}); + +describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { + let articles, assessments; + + whereFromPlugin('adapt-contrib-assessment - from v2.0.3', { name: 'adapt-contrib-assessment', version: '<=2.1.0' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + articles = content.filter(({ _type }) => _type === 'article'); + assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessments.length > 0) return true; + }); + + /** + * * Add JSON field and set attribute. + */ + mutateContent('adapt-contrib-assessment - add assessment._suppressMarking', async () => { + assessments.forEach(assessment => { + assessment._suppressMarking = true; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._suppressMarking attribute', async () => { + const isValid = assessments.every(assessment => + assessment._suppressMarking === true + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _suppressMarking not added to every instance of assessment as true.'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v2.1.0', { name: 'adapt-contrib-assessment', version: '2.1.0', framework: '>=2.0.18' }); }); describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { @@ -135,7 +169,7 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { return true; }); - updatePlugin('adapt-contrib-assessment - update to v2.1.1', { name: 'adapt-contrib-assessment', version: '2.1.1', framework: '>=2' }); + updatePlugin('adapt-contrib-assessment - update to v2.1.1', { name: 'adapt-contrib-assessment', version: '2.1.1', framework: '>=2.0.18' }); }); describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { @@ -170,7 +204,9 @@ describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { */ mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { assessments.forEach(assessment => { - assessment._allowResetIfPassed = false; + assessment._questions.forEach(item => { + item._allowResetIfPassed = false; + }); }); return true; }); @@ -185,5 +221,5 @@ describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { return true; }); - updatePlugin('adapt-contrib-assessment - update to v2.2.0', { name: 'adapt-contrib-assessment', version: 'v2.2.0', framework: '>=2' }); + updatePlugin('adapt-contrib-assessment - update to v2.2.0', { name: 'adapt-contrib-assessment', version: 'v2.2.0', framework: '>=2.2.0' }); }); diff --git a/migrations/v3.js b/migrations/v3.js new file mode 100644 index 0000000..d6bc920 --- /dev/null +++ b/migrations/v3.js @@ -0,0 +1,29 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; + +describe('adapt-contrib-assessment - v2.2.0 > v3.0.0', async () => { + let course, assessmentConfig; + + whereFromPlugin('adapt-contrib-assessment - from v2.2.0', { name: 'adapt-contrib-assessment', version: '<=3.0.0' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + course = content.filter(({ _type }) => _type === 'course'); + assessmentConfig = course.find(({ _assessment }) => _assessment); + if (assessmentConfig) return true; + }); + + /** + * * Remove JSON attribute from Course file. + */ + mutateContent('adapt-contrib-assessment - remove course._postTotalScoreToLms attribute', async () => { + delete assessmentConfig._postTotalScoreToLms; + return true; + }); + + checkContent('adapt-contrib-assessment - check course._postTotalScoreToLms attribute', async () => { + const isValid = !assessmentConfig._postTotalScoreToLms; + if (!isValid) throw new Error('adapt-contrib-assessment - _postTotalScoreToLms removed from course file.'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v3.0.0', { name: 'adapt-contrib-assessment', version: '3.0.0', framework: '>=3.2.0' }); +}); diff --git a/migrations/v4.js b/migrations/v4.js new file mode 100644 index 0000000..9644b57 --- /dev/null +++ b/migrations/v4.js @@ -0,0 +1,123 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; + +describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { + let articles, assessments; + + whereFromPlugin('adapt-contrib-assessment - from v3.0.0', { name: 'adapt-contrib-assessment', version: '<=4.3.0' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + articles = content.filter(({ _type }) => _type === 'article'); + assessments = articles.filter(({ _assessment }) => _assessment !== undefined); + if (assessments.length > 0) return true; + }); + + /** + * * Add JSON field and set attribute. + */ + mutateContent('adapt-contrib-assessment - add assessment._scrollToOnReset', async () => { + assessments.forEach(assessment => { + assessment._scrollToOnReset = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._scrollToOnReset attribute', async () => { + const isValid = assessments.every(assessment => + assessment._scrollToOnReset === false + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _scrollToOnReset not added to every instance of assessment'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v4.3.0', { name: 'adapt-contrib-assessment', version: '4.3.0', framework: '>=5.4.0' }); +}); + +describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { + let course, assessmentConfig, assessments; + + whereFromPlugin('adapt-contrib-assessment - from v4.3.0', { name: 'adapt-contrib-assessment', version: '<=4.4.0' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + course = content.filter(({ _type }) => _type === 'course'); + assessmentConfig = course.find(({ _assessment }) => _assessment); + if (assessmentConfig) return true; + }); + + /** + * * Add JSON field and set attribute. + */ + mutateContent('adapt-contrib-assessment - add assessment._scoreToPass', async () => { + assessments.forEach(assessment => { + assessment._scoreToPass = 60; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._scoreToPass attribute', async () => { + const isValid = assessments.every(assessment => + assessment._scoreToPass === 60 + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _scoreToPass not added to every instance of assessment and set as 60.'); + return true; + }); + + /** + * * Add JSON field and set attribute. + */ + mutateContent('adapt-contrib-assessment - add assessment._correctToPass', async () => { + assessments.forEach(assessment => { + assessment._correctToPass = 60; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._correctToPass attribute', async () => { + const isValid = assessments.every(assessment => + assessment._correctToPass === 60 + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _correctToPass not added to every instance of assessment and set as 60.'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v4.4.0', { name: 'adapt-contrib-assessment', version: '4.4.0', framework: '>=5.4.0' }); +}); + +describe('adapt-contrib-assessment - v4.4.0 > v4.6.1', async () => { + let articles, assessments; + + whereFromPlugin('adapt-contrib-assessment - from v4.4.0', { name: 'adapt-contrib-assessment', version: '<=4.6.1' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + articles = content.filter(({ _type }) => _type === 'article'); + assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessments.length > 0) return true; + }); + + /** + * * Add JSON field and set attribute. + */ + mutateContent('adapt-contrib-assessment - modify assessment._questions._resetType value', async () => { + /** + * ? Changing _resetType globally to 'hard' might have unintended consequences. + * ? This change assumes that a hard reset is preferred in all cases, which may not be true for all users. + */ + assessments.forEach(assessment => { + assessment._questions.forEach(item => { + item._resetType = 'hard'; + }); + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._questions._resetType value', async () => { + const isValid = assessments.every(assessment => + assessment._questions.every(item => + item._resetType === 'hard' + ) + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _resetType not set to "hard" for every instance of assessment._questions'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v4.6.1', { name: 'adapt-contrib-assessment', version: 'v4.6.1', framework: '>=5.11.0' }); +}); From e81d5085a894348c3c0419ce859fb4a4965b460f Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Mon, 10 Feb 2025 14:58:16 -0600 Subject: [PATCH 03/17] whereFromPlugin & whereContent adjustments --- migrations/v2.js | 12 ++++++------ migrations/v3.js | 2 +- migrations/v4.js | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index fe58089..c92de9c 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -3,12 +3,12 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, u describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '<=2.0.3' }); + whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '<2.0.3' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - if (assessments.length > 0) return true; + return assessments.length; }); /** @@ -39,12 +39,12 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v2.0.3', { name: 'adapt-contrib-assessment', version: '<=2.1.0' }); + whereFromPlugin('adapt-contrib-assessment - from v2.0.3', { name: 'adapt-contrib-assessment', version: '<2.1.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - if (assessments.length > 0) return true; + return assessments.length; }); /** @@ -71,7 +71,7 @@ describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v2.1.0', { name: 'adapt-contrib-assessment', version: '<=2.1.1' }); + whereFromPlugin('adapt-contrib-assessment - from v2.1.0', { name: 'adapt-contrib-assessment', version: '<2.1.1' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); @@ -175,7 +175,7 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v2.1.1', { name: 'adapt-contrib-assessment', version: '<=2.2.0' }); + whereFromPlugin('adapt-contrib-assessment - from v2.1.1', { name: 'adapt-contrib-assessment', version: '<2.2.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); diff --git a/migrations/v3.js b/migrations/v3.js index d6bc920..d3423b7 100644 --- a/migrations/v3.js +++ b/migrations/v3.js @@ -3,7 +3,7 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, u describe('adapt-contrib-assessment - v2.2.0 > v3.0.0', async () => { let course, assessmentConfig; - whereFromPlugin('adapt-contrib-assessment - from v2.2.0', { name: 'adapt-contrib-assessment', version: '<=3.0.0' }); + whereFromPlugin('adapt-contrib-assessment - from v2.2.0', { name: 'adapt-contrib-assessment', version: '<3.0.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { course = content.filter(({ _type }) => _type === 'course'); diff --git a/migrations/v4.js b/migrations/v4.js index 9644b57..e4e84dc 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -3,12 +3,12 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, u describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v3.0.0', { name: 'adapt-contrib-assessment', version: '<=4.3.0' }); + whereFromPlugin('adapt-contrib-assessment - from v3.0.0', { name: 'adapt-contrib-assessment', version: '<4.3.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); assessments = articles.filter(({ _assessment }) => _assessment !== undefined); - if (assessments.length > 0) return true; + return assessments.length; }); /** @@ -35,7 +35,7 @@ describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { let course, assessmentConfig, assessments; - whereFromPlugin('adapt-contrib-assessment - from v4.3.0', { name: 'adapt-contrib-assessment', version: '<=4.4.0' }); + whereFromPlugin('adapt-contrib-assessment - from v4.3.0', { name: 'adapt-contrib-assessment', version: '<4.4.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { course = content.filter(({ _type }) => _type === 'course'); @@ -85,12 +85,12 @@ describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { describe('adapt-contrib-assessment - v4.4.0 > v4.6.1', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v4.4.0', { name: 'adapt-contrib-assessment', version: '<=4.6.1' }); + whereFromPlugin('adapt-contrib-assessment - from v4.4.0', { name: 'adapt-contrib-assessment', version: '<4.6.1' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - if (assessments.length > 0) return true; + return assessments.length; }); /** From 68e7f1f897dbeb4ee85e45b4759ab1c0decf7d0d Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Wed, 19 Feb 2025 11:45:33 -0600 Subject: [PATCH 04/17] Chris Steele Review Changes --- migrations/v2.js | 52 ++++-------------------------------------------- migrations/v3.js | 5 +---- migrations/v4.js | 12 ----------- 3 files changed, 5 insertions(+), 64 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index c92de9c..ad5bf52 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -11,9 +11,6 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { return assessments.length; }); - /** - * * Add field to each item in a JSON array and set blank. - */ mutateContent('adapt-contrib-assessment - add assessment._questions._canShowModelAnswer attribute', async () => { assessments.forEach(assessment => { assessment._questions.forEach(item => { @@ -25,9 +22,7 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { checkContent('adapt-contrib-assessment - check assessment._questions._canShowModelAnswer attribute', async () => { const isValid = assessments.every(assessment => - assessment._questions.every(item => - item._canShowModelAnswer !== false - ) + assessment._questions.every(item => item._canShowModelAnswer) ); if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer not added to every instance of assessment._questions'); return true; @@ -47,9 +42,6 @@ describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { return assessments.length; }); - /** - * * Add JSON field and set attribute. - */ mutateContent('adapt-contrib-assessment - add assessment._suppressMarking', async () => { assessments.forEach(assessment => { assessment._suppressMarking = true; @@ -65,7 +57,7 @@ describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { return true; }); - updatePlugin('adapt-contrib-assessment - update to v2.1.0', { name: 'adapt-contrib-assessment', version: '2.1.0', framework: '>=2.0.18' }); + updatePlugin('adapt-contrib-assessment - update to v2.1.0', { name: 'adapt-contrib-assessment', version: '2.1.0', framework: '>=2.1.3' }); }); describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { @@ -79,9 +71,6 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { if (assessments) return true; }); - /** - * * Modify existing attribute to new value. - */ mutateContent('adapt-contrib-assessment - add assessment._isPercentageBased', async () => { assessments.forEach(assessment => { if (assessment._isPercentageBased !== true) assessment._isPercentageBased = true; @@ -97,9 +86,6 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { return true; }); - /** - * * Modify existing attribute to new value. - */ mutateContent('adapt-contrib-assessment - add assessment._canShowFeedback', async () => { assessments.forEach(assessment => { if (assessment._canShowFeedback !== false) assessment._canShowFeedback = false; @@ -115,9 +101,6 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { return true; }); - /** - * * Modify existing attribute to new value. - */ mutateContent('adapt-contrib-assessment - add assessment._canShowMarking', async () => { assessments.forEach(assessment => { if (assessment._canShowMarking !== false) assessment._canShowMarking = false; @@ -133,9 +116,6 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { return true; }); - /** - * * Modify existing attribute to new value. - */ mutateContent('adapt-contrib-assessment - add assessment._canShowModelAnswer', async () => { assessments.forEach(assessment => { if (assessment._canShowModelAnswer !== false) assessment._canShowModelAnswer = false; @@ -151,9 +131,6 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { return true; }); - /** - * * Remove existing attribute. - */ mutateContent('adapt-contrib-assessment - add assessment._requireAssessmentPassed', async () => { assessments.forEach(assessment => { delete assessment._requireAssessmentPassed; @@ -162,14 +139,12 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { }); checkContent('adapt-contrib-assessment - check assessment._requireAssessmentPassed attribute', async () => { - const isValid = assessments.every(assessment => - assessment._requireAssessmentPassed === undefined - ); + const isValid = assessments.every(assessment => !_.has(assessment, '_requireAssessmentPassed')); if (!isValid) throw new Error('adapt-contrib-assessment - _requireAssessmentPassed has been removed'); return true; }); - updatePlugin('adapt-contrib-assessment - update to v2.1.1', { name: 'adapt-contrib-assessment', version: '2.1.1', framework: '>=2.0.18' }); + updatePlugin('adapt-contrib-assessment - update to v2.1.1', { name: 'adapt-contrib-assessment', version: '2.1.1', framework: '>=2.2.0' }); }); describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { @@ -183,25 +158,6 @@ describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { if (assessments) return true; }); - /** - * * Modify Attribute - */ - mutateContent('adapt-contrib-assessment - add assessment._includeInTotalScore attribute', async () => { - assessments.forEach(assessment => { - assessment._includeInTotalScore = true; - }); - return true; - }); - - checkContent('adapt-contrib-assessment - check assessment._includeInTotalScore attribute', async () => { - const isValid = assessments.every(({ _includeInTotalScore }) => _includeInTotalScore === true); - if (!isValid) throw new Error('adapt-contrib-assessment - _includeInTotalScore not modified to true in every assessment instance.'); - return true; - }); - - /** - * * Add JSON field and set attribute. - */ mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { assessments.forEach(assessment => { assessment._questions.forEach(item => { diff --git a/migrations/v3.js b/migrations/v3.js index d3423b7..a385561 100644 --- a/migrations/v3.js +++ b/migrations/v3.js @@ -11,16 +11,13 @@ describe('adapt-contrib-assessment - v2.2.0 > v3.0.0', async () => { if (assessmentConfig) return true; }); - /** - * * Remove JSON attribute from Course file. - */ mutateContent('adapt-contrib-assessment - remove course._postTotalScoreToLms attribute', async () => { delete assessmentConfig._postTotalScoreToLms; return true; }); checkContent('adapt-contrib-assessment - check course._postTotalScoreToLms attribute', async () => { - const isValid = !assessmentConfig._postTotalScoreToLms; + const isValid = !_.has(assessmentConfig, '_postTotalScoreToLms'); if (!isValid) throw new Error('adapt-contrib-assessment - _postTotalScoreToLms removed from course file.'); return true; }); diff --git a/migrations/v4.js b/migrations/v4.js index e4e84dc..3e7e03d 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -11,9 +11,6 @@ describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { return assessments.length; }); - /** - * * Add JSON field and set attribute. - */ mutateContent('adapt-contrib-assessment - add assessment._scrollToOnReset', async () => { assessments.forEach(assessment => { assessment._scrollToOnReset = false; @@ -43,9 +40,6 @@ describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { if (assessmentConfig) return true; }); - /** - * * Add JSON field and set attribute. - */ mutateContent('adapt-contrib-assessment - add assessment._scoreToPass', async () => { assessments.forEach(assessment => { assessment._scoreToPass = 60; @@ -61,9 +55,6 @@ describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { return true; }); - /** - * * Add JSON field and set attribute. - */ mutateContent('adapt-contrib-assessment - add assessment._correctToPass', async () => { assessments.forEach(assessment => { assessment._correctToPass = 60; @@ -93,9 +84,6 @@ describe('adapt-contrib-assessment - v4.4.0 > v4.6.1', async () => { return assessments.length; }); - /** - * * Add JSON field and set attribute. - */ mutateContent('adapt-contrib-assessment - modify assessment._questions._resetType value', async () => { /** * ? Changing _resetType globally to 'hard' might have unintended consequences. From 7ae9e8d4811e5f2a5328f8e4deb122ce94729ce9 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Wed, 19 Feb 2025 11:48:56 -0600 Subject: [PATCH 05/17] Chris Steel Review Changes --- migrations/v4.js | 55 +++++------------------------------------------- 1 file changed, 5 insertions(+), 50 deletions(-) diff --git a/migrations/v4.js b/migrations/v4.js index 3e7e03d..dfa4404 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -30,7 +30,7 @@ describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { }); describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { - let course, assessmentConfig, assessments; + let course, assessmentConfig; whereFromPlugin('adapt-contrib-assessment - from v4.3.0', { name: 'adapt-contrib-assessment', version: '<4.4.0' }); @@ -41,71 +41,26 @@ describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { }); mutateContent('adapt-contrib-assessment - add assessment._scoreToPass', async () => { - assessments.forEach(assessment => { - assessment._scoreToPass = 60; - }); + assessmentConfig._scoreToPass = 60; return true; }); checkContent('adapt-contrib-assessment - check assessment._scoreToPass attribute', async () => { - const isValid = assessments.every(assessment => - assessment._scoreToPass === 60 - ); + const isValid = assessmentConfig._scoreToPass === 60; if (!isValid) throw new Error('adapt-contrib-assessment - _scoreToPass not added to every instance of assessment and set as 60.'); return true; }); mutateContent('adapt-contrib-assessment - add assessment._correctToPass', async () => { - assessments.forEach(assessment => { - assessment._correctToPass = 60; - }); + assessmentConfig._correctToPass = 60; return true; }); checkContent('adapt-contrib-assessment - check assessment._correctToPass attribute', async () => { - const isValid = assessments.every(assessment => - assessment._correctToPass === 60 - ); + const isValid = assessmentConfig._correctToPass === 60; if (!isValid) throw new Error('adapt-contrib-assessment - _correctToPass not added to every instance of assessment and set as 60.'); return true; }); updatePlugin('adapt-contrib-assessment - update to v4.4.0', { name: 'adapt-contrib-assessment', version: '4.4.0', framework: '>=5.4.0' }); }); - -describe('adapt-contrib-assessment - v4.4.0 > v4.6.1', async () => { - let articles, assessments; - - whereFromPlugin('adapt-contrib-assessment - from v4.4.0', { name: 'adapt-contrib-assessment', version: '<4.6.1' }); - - whereContent('adapt-contrib-assessment - where assessment', async content => { - articles = content.filter(({ _type }) => _type === 'article'); - assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - return assessments.length; - }); - - mutateContent('adapt-contrib-assessment - modify assessment._questions._resetType value', async () => { - /** - * ? Changing _resetType globally to 'hard' might have unintended consequences. - * ? This change assumes that a hard reset is preferred in all cases, which may not be true for all users. - */ - assessments.forEach(assessment => { - assessment._questions.forEach(item => { - item._resetType = 'hard'; - }); - }); - return true; - }); - - checkContent('adapt-contrib-assessment - check assessment._questions._resetType value', async () => { - const isValid = assessments.every(assessment => - assessment._questions.every(item => - item._resetType === 'hard' - ) - ); - if (!isValid) throw new Error('adapt-contrib-assessment - _resetType not set to "hard" for every instance of assessment._questions'); - return true; - }); - - updatePlugin('adapt-contrib-assessment - update to v4.6.1', { name: 'adapt-contrib-assessment', version: 'v4.6.1', framework: '>=5.11.0' }); -}); From 63559d3de3b746ea9c2f8dae40c6bceda18bc5a2 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:34:58 -0600 Subject: [PATCH 06/17] Update migrations/v2.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/v2.js b/migrations/v2.js index ad5bf52..ce42463 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -3,7 +3,7 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, u describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { let articles, assessments; - whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '<2.0.3' }); + whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '>=2.0.0 <2.0.3' }); whereContent('adapt-contrib-assessment - where assessment', async content => { articles = content.filter(({ _type }) => _type === 'article'); From 701c9dc7f24d48aff7ae146d324adfd0ab147143 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:50:10 -0600 Subject: [PATCH 07/17] Update migrations/v2.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/v2.js b/migrations/v2.js index ce42463..20d5679 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -44,7 +44,7 @@ describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { mutateContent('adapt-contrib-assessment - add assessment._suppressMarking', async () => { assessments.forEach(assessment => { - assessment._suppressMarking = true; + assessment._assessment._suppressMarking = true; }); return true; }); From 34955bda1c800c2b2469aadbea8999b7b34be461 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:50:42 -0600 Subject: [PATCH 08/17] Update migrations/v2.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/v2.js b/migrations/v2.js index 20d5679..0212c7a 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -51,7 +51,7 @@ describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { checkContent('adapt-contrib-assessment - check assessment._suppressMarking attribute', async () => { const isValid = assessments.every(assessment => - assessment._suppressMarking === true + assessment._assessment._suppressMarking === true ); if (!isValid) throw new Error('adapt-contrib-assessment - _suppressMarking not added to every instance of assessment as true.'); return true; From b14dfeb0f68f045ac221a20b5c455a2d6ea51b4a Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:51:20 -0600 Subject: [PATCH 09/17] Update migrations/v2.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v2.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index 0212c7a..1780bcc 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -160,9 +160,7 @@ describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { assessments.forEach(assessment => { - assessment._questions.forEach(item => { - item._allowResetIfPassed = false; - }); + assessment._assessment_questions._allowResetIfPassed = false; }); return true; }); From 6a4d518b6c5edfb17fc3922860469dadcfec3419 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:51:33 -0600 Subject: [PATCH 10/17] Update migrations/v2.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v2.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index 1780bcc..17ab4c3 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -21,9 +21,7 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { }); checkContent('adapt-contrib-assessment - check assessment._questions._canShowModelAnswer attribute', async () => { - const isValid = assessments.every(assessment => - assessment._questions.every(item => item._canShowModelAnswer) - ); + const isValid = assessments.every(assessment => _.has(assessment, '_assessment._questions._canShowModelAnswer')); if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer not added to every instance of assessment._questions'); return true; }); From 2bd2bc54233a0d72d93270040e592800b1d2a589 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:51:43 -0600 Subject: [PATCH 11/17] Update migrations/v2.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v2.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index 17ab4c3..3cacee2 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -164,11 +164,7 @@ describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { }); checkContent('adapt-contrib-assessment - check assessment._allowResetIfPassed attribute', async () => { - const isValid = assessments.every(assessment => - assessment._questions.every(item => - item._allowResetIfPassed === false - ) - ); + const isValid = assessments.every(assessment => _.has(assessment, '_assessment._questions._allowResetIfPassed')); if (!isValid) throw new Error('adapt-contrib-assessment - _allowResetIfPassed not added to every instance of assessment._questions'); return true; }); From 2a1d03be8a49cd8e0c6471a268f62063bd850b34 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:52:01 -0600 Subject: [PATCH 12/17] Update migrations/v2.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v2.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index 3cacee2..68c5fad 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -13,9 +13,7 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { mutateContent('adapt-contrib-assessment - add assessment._questions._canShowModelAnswer attribute', async () => { assessments.forEach(assessment => { - assessment._questions.forEach(item => { - item._canShowModelAnswer = true; - }); + assessment._assessment._questions._canShowModelAnswer = true; }); return true; }); From 6a942d3af29ce533618a7342003b702684760379 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:59:19 -0600 Subject: [PATCH 13/17] Update migrations/v4.js Co-authored-by: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> --- migrations/v4.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/migrations/v4.js b/migrations/v4.js index dfa4404..a930063 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -12,8 +12,8 @@ describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { }); mutateContent('adapt-contrib-assessment - add assessment._scrollToOnReset', async () => { - assessments.forEach(assessment => { - assessment._scrollToOnReset = false; + assessments.forEach(({ _assessment }) => { + _assessment._scrollToOnReset = false; }); return true; }); From 7964ad1a450aa3d44cc2d6d96304c0d0e455062a Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 15:06:08 -0600 Subject: [PATCH 14/17] Joe Allen Review --- migrations/v2.js | 62 ++++++++++++++++++++++-------------------------- migrations/v4.js | 11 ++++----- 2 files changed, 34 insertions(+), 39 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index 68c5fad..c382d80 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -1,25 +1,24 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { - let articles, assessments; + let assessmentArticles; - whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '>=2.0.0 <2.0.3' }); + whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '<2.0.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { - articles = content.filter(({ _type }) => _type === 'article'); - assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - return assessments.length; + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + return assessmentArticles.length; }); mutateContent('adapt-contrib-assessment - add assessment._questions._canShowModelAnswer attribute', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { assessment._assessment._questions._canShowModelAnswer = true; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._questions._canShowModelAnswer attribute', async () => { - const isValid = assessments.every(assessment => _.has(assessment, '_assessment._questions._canShowModelAnswer')); + const isValid = assessmentArticles.every(assessment => _.has(assessment, '_assessment._questions._canShowModelAnswer')); if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer not added to every instance of assessment._questions'); return true; }); @@ -28,25 +27,24 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { }); describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { - let articles, assessments; + let assessmentArticles; whereFromPlugin('adapt-contrib-assessment - from v2.0.3', { name: 'adapt-contrib-assessment', version: '<2.1.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { - articles = content.filter(({ _type }) => _type === 'article'); - assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - return assessments.length; + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + return assessmentArticles.length; }); mutateContent('adapt-contrib-assessment - add assessment._suppressMarking', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { assessment._assessment._suppressMarking = true; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._suppressMarking attribute', async () => { - const isValid = assessments.every(assessment => + const isValid = assessmentArticles.every(assessment => assessment._assessment._suppressMarking === true ); if (!isValid) throw new Error('adapt-contrib-assessment - _suppressMarking not added to every instance of assessment as true.'); @@ -57,25 +55,24 @@ describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { }); describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { - let articles, assessments; + let assessmentArticles; whereFromPlugin('adapt-contrib-assessment - from v2.1.0', { name: 'adapt-contrib-assessment', version: '<2.1.1' }); whereContent('adapt-contrib-assessment - where assessment', async content => { - articles = content.filter(({ _type }) => _type === 'article'); - assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - if (assessments) return true; + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessmentArticles) return true; }); mutateContent('adapt-contrib-assessment - add assessment._isPercentageBased', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { if (assessment._isPercentageBased !== true) assessment._isPercentageBased = true; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._isPercentageBased attribute', async () => { - const isValid = assessments.every(assessment => + const isValid = assessmentArticles.every(assessment => assessment._isPercentageBased === true ); if (!isValid) throw new Error('adapt-contrib-assessment - _isPercentageBased has been modified to true'); @@ -83,14 +80,14 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { }); mutateContent('adapt-contrib-assessment - add assessment._canShowFeedback', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { if (assessment._canShowFeedback !== false) assessment._canShowFeedback = false; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._canShowFeedback attribute', async () => { - const isValid = assessments.every(assessment => + const isValid = assessmentArticles.every(assessment => assessment._canShowFeedback === false ); if (!isValid) throw new Error('adapt-contrib-assessment - _canShowFeedback has been modified to false'); @@ -98,14 +95,14 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { }); mutateContent('adapt-contrib-assessment - add assessment._canShowMarking', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { if (assessment._canShowMarking !== false) assessment._canShowMarking = false; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._canShowMarking attribute', async () => { - const isValid = assessments.every(assessment => + const isValid = assessmentArticles.every(assessment => assessment._canShowMarking === false ); if (!isValid) throw new Error('adapt-contrib-assessment - _canShowMarking has been modified to false'); @@ -113,14 +110,14 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { }); mutateContent('adapt-contrib-assessment - add assessment._canShowModelAnswer', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { if (assessment._canShowModelAnswer !== false) assessment._canShowModelAnswer = false; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._canShowModelAnswer attribute', async () => { - const isValid = assessments.every(assessment => + const isValid = assessmentArticles.every(assessment => assessment._canShowModelAnswer === false ); if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer has been modified to false'); @@ -128,14 +125,14 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { }); mutateContent('adapt-contrib-assessment - add assessment._requireAssessmentPassed', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { delete assessment._requireAssessmentPassed; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._requireAssessmentPassed attribute', async () => { - const isValid = assessments.every(assessment => !_.has(assessment, '_requireAssessmentPassed')); + const isValid = assessmentArticles.every(assessment => !_.has(assessment, '_requireAssessmentPassed')); if (!isValid) throw new Error('adapt-contrib-assessment - _requireAssessmentPassed has been removed'); return true; }); @@ -144,25 +141,24 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { }); describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { - let articles, assessments; + let assessmentArticles; whereFromPlugin('adapt-contrib-assessment - from v2.1.1', { name: 'adapt-contrib-assessment', version: '<2.2.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { - articles = content.filter(({ _type }) => _type === 'article'); - assessments = articles.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - if (assessments) return true; + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessmentArticles) return true; }); mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { - assessments.forEach(assessment => { + assessmentArticles.forEach(assessment => { assessment._assessment_questions._allowResetIfPassed = false; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._allowResetIfPassed attribute', async () => { - const isValid = assessments.every(assessment => _.has(assessment, '_assessment._questions._allowResetIfPassed')); + const isValid = assessmentArticles.every(assessment => _.has(assessment, '_assessment._questions._allowResetIfPassed')); if (!isValid) throw new Error('adapt-contrib-assessment - _allowResetIfPassed not added to every instance of assessment._questions'); return true; }); diff --git a/migrations/v4.js b/migrations/v4.js index a930063..38449d9 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -1,25 +1,24 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { - let articles, assessments; + let assessmentArticles; whereFromPlugin('adapt-contrib-assessment - from v3.0.0', { name: 'adapt-contrib-assessment', version: '<4.3.0' }); whereContent('adapt-contrib-assessment - where assessment', async content => { - articles = content.filter(({ _type }) => _type === 'article'); - assessments = articles.filter(({ _assessment }) => _assessment !== undefined); - return assessments.length; + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + return assessmentArticles.length; }); mutateContent('adapt-contrib-assessment - add assessment._scrollToOnReset', async () => { - assessments.forEach(({ _assessment }) => { + assessmentArticles.forEach(({ _assessment }) => { _assessment._scrollToOnReset = false; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._scrollToOnReset attribute', async () => { - const isValid = assessments.every(assessment => + const isValid = assessmentArticles.every(assessment => assessment._scrollToOnReset === false ); if (!isValid) throw new Error('adapt-contrib-assessment - _scrollToOnReset not added to every instance of assessment'); From 50d78196a6543f07b3ee9e13052f9c1a5b301347 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 16:24:07 -0600 Subject: [PATCH 15/17] Update v3.js --- migrations/v3.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/migrations/v3.js b/migrations/v3.js index a385561..927a152 100644 --- a/migrations/v3.js +++ b/migrations/v3.js @@ -1,4 +1,5 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import _ from 'lodash'; describe('adapt-contrib-assessment - v2.2.0 > v3.0.0', async () => { let course, assessmentConfig; @@ -8,17 +9,20 @@ describe('adapt-contrib-assessment - v2.2.0 > v3.0.0', async () => { whereContent('adapt-contrib-assessment - where assessment', async content => { course = content.filter(({ _type }) => _type === 'course'); assessmentConfig = course.find(({ _assessment }) => _assessment); - if (assessmentConfig) return true; + if (!assessmentConfig) throw new Error('No assessment configuration found.'); + return true; }); - mutateContent('adapt-contrib-assessment - remove course._postTotalScoreToLms attribute', async () => { - delete assessmentConfig._postTotalScoreToLms; + mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { + if (assessmentConfig) { + delete assessmentConfig._postTotalScoreToLms; + } return true; }); checkContent('adapt-contrib-assessment - check course._postTotalScoreToLms attribute', async () => { const isValid = !_.has(assessmentConfig, '_postTotalScoreToLms'); - if (!isValid) throw new Error('adapt-contrib-assessment - _postTotalScoreToLms removed from course file.'); + if (!isValid) throw new Error('adapt-contrib-assessment - _postTotalScoreToLms attribute was not removed from course file.'); return true; }); From 146a3df9f1cca70b80ae2ec11e9aede823267b41 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Mon, 24 Feb 2025 17:18:07 -0600 Subject: [PATCH 16/17] Updates --- migrations/v2.js | 21 +++++++++++---------- migrations/v4.js | 34 ++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index c382d80..bc454c3 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -1,4 +1,5 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import _ from 'lodash'; describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { let assessmentArticles; @@ -17,8 +18,8 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { return true; }); - checkContent('adapt-contrib-assessment - check assessment._questions._canShowModelAnswer attribute', async () => { - const isValid = assessmentArticles.every(assessment => _.has(assessment, '_assessment._questions._canShowModelAnswer')); + checkContent('adapt-contrib-assessment - check assessment._assessment._questions._canShowModelAnswer attribute', async () => { + const isValid = assessmentArticles.every(assessment => _.has(assessment, 'assessment._assessment._questions._canShowModelAnswer')); if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer not added to every instance of assessment._questions'); return true; }); @@ -38,14 +39,14 @@ describe('adapt-contrib-assessment - v2.0.3 > v2.1.0', async () => { mutateContent('adapt-contrib-assessment - add assessment._suppressMarking', async () => { assessmentArticles.forEach(assessment => { - assessment._assessment._suppressMarking = true; + assessment._suppressMarking = true; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._suppressMarking attribute', async () => { const isValid = assessmentArticles.every(assessment => - assessment._assessment._suppressMarking === true + assessment._suppressMarking === true ); if (!isValid) throw new Error('adapt-contrib-assessment - _suppressMarking not added to every instance of assessment as true.'); return true; @@ -61,7 +62,7 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { whereContent('adapt-contrib-assessment - where assessment', async content => { assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); - if (assessmentArticles) return true; + if (assessmentArticles.length > 0) return true; }); mutateContent('adapt-contrib-assessment - add assessment._isPercentageBased', async () => { @@ -133,7 +134,7 @@ describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { checkContent('adapt-contrib-assessment - check assessment._requireAssessmentPassed attribute', async () => { const isValid = assessmentArticles.every(assessment => !_.has(assessment, '_requireAssessmentPassed')); - if (!isValid) throw new Error('adapt-contrib-assessment - _requireAssessmentPassed has been removed'); + if (!isValid) throw new Error('adapt-contrib-assessment - _requireAssessmentPassed has not been removed'); return true; }); @@ -152,16 +153,16 @@ describe('adapt-contrib-assessment - v2.1.1 > v2.2.0', async () => { mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { assessmentArticles.forEach(assessment => { - assessment._assessment_questions._allowResetIfPassed = false; + assessment._allowResetIfPassed = false; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._allowResetIfPassed attribute', async () => { - const isValid = assessmentArticles.every(assessment => _.has(assessment, '_assessment._questions._allowResetIfPassed')); - if (!isValid) throw new Error('adapt-contrib-assessment - _allowResetIfPassed not added to every instance of assessment._questions'); + const isValid = assessmentArticles.every(assessment => assessment._allowResetIfPassed !== undefined); + if (!isValid) throw new Error('adapt-contrib-assessment - _allowResetIfPassed not added to every instance of assessment'); return true; }); - updatePlugin('adapt-contrib-assessment - update to v2.2.0', { name: 'adapt-contrib-assessment', version: 'v2.2.0', framework: '>=2.2.0' }); + updatePlugin('adapt-contrib-assessment - update to v2.2.0', { name: 'adapt-contrib-assessment', version: '2.2.0', framework: '>=2.2.0' }); }); diff --git a/migrations/v4.js b/migrations/v4.js index 38449d9..cf6ab7b 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -11,16 +11,14 @@ describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { }); mutateContent('adapt-contrib-assessment - add assessment._scrollToOnReset', async () => { - assessmentArticles.forEach(({ _assessment }) => { - _assessment._scrollToOnReset = false; + assessmentArticles.forEach(assessment => { + assessment._scrollToOnReset = false; }); return true; }); checkContent('adapt-contrib-assessment - check assessment._scrollToOnReset attribute', async () => { - const isValid = assessmentArticles.every(assessment => - assessment._scrollToOnReset === false - ); + const isValid = assessmentArticles.every(assessment => assessment._scrollToOnReset !== undefined); if (!isValid) throw new Error('adapt-contrib-assessment - _scrollToOnReset not added to every instance of assessment'); return true; }); @@ -29,7 +27,7 @@ describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { }); describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { - let course, assessmentConfig; + let course, assessmentConfig, assessmentArticles; whereFromPlugin('adapt-contrib-assessment - from v4.3.0', { name: 'adapt-contrib-assessment', version: '<4.4.0' }); @@ -39,27 +37,43 @@ describe('adapt-contrib-assessment - v4.3.0 > v4.4.0', async () => { if (assessmentConfig) return true; }); - mutateContent('adapt-contrib-assessment - add assessment._scoreToPass', async () => { + mutateContent('adapt-contrib-assessment - add course._scoreToPass attribute', async () => { assessmentConfig._scoreToPass = 60; return true; }); - checkContent('adapt-contrib-assessment - check assessment._scoreToPass attribute', async () => { + checkContent('adapt-contrib-assessment - check course._scoreToPass attribute', async () => { const isValid = assessmentConfig._scoreToPass === 60; if (!isValid) throw new Error('adapt-contrib-assessment - _scoreToPass not added to every instance of assessment and set as 60.'); return true; }); - mutateContent('adapt-contrib-assessment - add assessment._correctToPass', async () => { + mutateContent('adapt-contrib-assessment - add course._correctToPass attribute', async () => { assessmentConfig._correctToPass = 60; return true; }); - checkContent('adapt-contrib-assessment - check assessment._correctToPass attribute', async () => { + checkContent('adapt-contrib-assessment - check course._correctToPass attribute', async () => { const isValid = assessmentConfig._correctToPass === 60; if (!isValid) throw new Error('adapt-contrib-assessment - _correctToPass not added to every instance of assessment and set as 60.'); return true; }); + whereContent('adapt-contrib-assessment - where assessment', async content => { + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + return assessmentArticles.length; + }); + + mutateContent('adapt-contrib-assessment - add assessment._correctToPass attribute', async () => { + assessmentArticles._correctToPass = 60; + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._correctToPass attribute', async () => { + const isValid = assessmentArticles._correctToPass === 60; + if (!isValid) throw new Error('adapt-contrib-assessment - _correctToPass not added to every instance of assessment and set as 60.'); + return true; + }); + updatePlugin('adapt-contrib-assessment - update to v4.4.0', { name: 'adapt-contrib-assessment', version: '4.4.0', framework: '>=5.4.0' }); }); From b25170f43b372266544f7dfef3b221f098e5c2a5 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Mon, 24 Feb 2025 18:46:49 -0600 Subject: [PATCH 17/17] v5 script --- migrations/v2.js | 6 +++--- migrations/v5.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 migrations/v5.js diff --git a/migrations/v2.js b/migrations/v2.js index bc454c3..3aeeb17 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -4,7 +4,7 @@ import _ from 'lodash'; describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { let assessmentArticles; - whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '<2.0.0' }); + whereFromPlugin('adapt-contrib-assessment - from v2.0.0', { name: 'adapt-contrib-assessment', version: '<2.0.3' }); whereContent('adapt-contrib-assessment - where assessment', async content => { assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); @@ -19,8 +19,8 @@ describe('adapt-contrib-assessment - v2.0.0 > v2.0.3', async () => { }); checkContent('adapt-contrib-assessment - check assessment._assessment._questions._canShowModelAnswer attribute', async () => { - const isValid = assessmentArticles.every(assessment => _.has(assessment, 'assessment._assessment._questions._canShowModelAnswer')); - if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer not added to every instance of assessment._questions'); + const isValid = assessmentArticles.every(assessment => assessment._assessment._questions._canShowModelAnswer !== undefined); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer not added to every instance of _assessment._questions'); return true; }); diff --git a/migrations/v5.js b/migrations/v5.js new file mode 100644 index 0000000..d052b53 --- /dev/null +++ b/migrations/v5.js @@ -0,0 +1,28 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import _ from 'lodash'; + +describe('adapt-contrib-assessment - v4.4.0 > v5.2.0', async () => { + let assessmentArticles; + + whereFromPlugin('adapt-contrib-assessment - from v4.4.0', { name: 'adapt-contrib-assessment', version: '<5.2.0' }); + + whereContent('adapt-contrib-assessment - where assessment', async content => { + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + return assessmentArticles.length; + }); + + mutateContent('adapt-contrib-assessment - add assessment._questions._resetIncorrectOnly attribute', async () => { + assessmentArticles.forEach(assessment => { + assessment._assessment._questions._resetIncorrectOnly = true; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._assessment._questions._resetIncorrectOnly attribute', async () => { + const isValid = assessmentArticles.every(assessment => assessment._assessment._questions._resetIncorrectOnly !== undefined); + if (!isValid) throw new Error('adapt-contrib-assessment - _resetIncorrectOnly not added to every instance of _assessment._questions'); + return true; + }); + + updatePlugin('adapt-contrib-assessment - update to v5.2.0', { name: 'adapt-contrib-assessment', version: '5.2.0', framework: '>=5.19.1' }); +});