diff --git a/migrations/v2.js b/migrations/v2.js new file mode 100644 index 0000000..3aeeb17 --- /dev/null +++ b/migrations/v2.js @@ -0,0 +1,168 @@ +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; + + 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); + return assessmentArticles.length; + }); + + mutateContent('adapt-contrib-assessment - add assessment._questions._canShowModelAnswer attribute', async () => { + assessmentArticles.forEach(assessment => { + assessment._assessment._questions._canShowModelAnswer = true; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._assessment._questions._canShowModelAnswer attribute', async () => { + 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; + }); + + 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 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 => { + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + return assessmentArticles.length; + }); + + mutateContent('adapt-contrib-assessment - add assessment._suppressMarking', async () => { + assessmentArticles.forEach(assessment => { + assessment._suppressMarking = true; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._suppressMarking attribute', async () => { + const isValid = assessmentArticles.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.1.3' }); +}); + +describe('adapt-contrib-assessment - v2.1.0 > v2.1.1', async () => { + 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 => { + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessmentArticles.length > 0) return true; + }); + + mutateContent('adapt-contrib-assessment - add assessment._isPercentageBased', async () => { + assessmentArticles.forEach(assessment => { + if (assessment._isPercentageBased !== true) assessment._isPercentageBased = true; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._isPercentageBased attribute', async () => { + const isValid = assessmentArticles.every(assessment => + assessment._isPercentageBased === true + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _isPercentageBased has been modified to true'); + return true; + }); + + mutateContent('adapt-contrib-assessment - add assessment._canShowFeedback', async () => { + assessmentArticles.forEach(assessment => { + if (assessment._canShowFeedback !== false) assessment._canShowFeedback = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._canShowFeedback attribute', async () => { + const isValid = assessmentArticles.every(assessment => + assessment._canShowFeedback === false + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowFeedback has been modified to false'); + return true; + }); + + mutateContent('adapt-contrib-assessment - add assessment._canShowMarking', async () => { + assessmentArticles.forEach(assessment => { + if (assessment._canShowMarking !== false) assessment._canShowMarking = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._canShowMarking attribute', async () => { + const isValid = assessmentArticles.every(assessment => + assessment._canShowMarking === false + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowMarking has been modified to false'); + return true; + }); + + mutateContent('adapt-contrib-assessment - add assessment._canShowModelAnswer', async () => { + assessmentArticles.forEach(assessment => { + if (assessment._canShowModelAnswer !== false) assessment._canShowModelAnswer = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._canShowModelAnswer attribute', async () => { + const isValid = assessmentArticles.every(assessment => + assessment._canShowModelAnswer === false + ); + if (!isValid) throw new Error('adapt-contrib-assessment - _canShowModelAnswer has been modified to false'); + return true; + }); + + mutateContent('adapt-contrib-assessment - add assessment._requireAssessmentPassed', async () => { + assessmentArticles.forEach(assessment => { + delete assessment._requireAssessmentPassed; + }); + return true; + }); + + 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 not been removed'); + return true; + }); + + 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 () => { + 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 => { + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + if (assessmentArticles) return true; + }); + + mutateContent('adapt-contrib-assessment - add assessment._allowResetIfPassed', async () => { + assessmentArticles.forEach(assessment => { + assessment._allowResetIfPassed = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._allowResetIfPassed attribute', async () => { + 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: '2.2.0', framework: '>=2.2.0' }); +}); diff --git a/migrations/v3.js b/migrations/v3.js new file mode 100644 index 0000000..927a152 --- /dev/null +++ b/migrations/v3.js @@ -0,0 +1,30 @@ +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; + + 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) throw new Error('No assessment configuration found.'); + return true; + }); + + 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 attribute was not 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..cf6ab7b --- /dev/null +++ b/migrations/v4.js @@ -0,0 +1,79 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; + +describe('adapt-contrib-assessment - v3.0.0 > v4.3.0', async () => { + 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 => { + assessmentArticles = content.filter(({ _type, _assessment }) => _type === 'article' && _assessment !== undefined); + return assessmentArticles.length; + }); + + mutateContent('adapt-contrib-assessment - add assessment._scrollToOnReset', async () => { + assessmentArticles.forEach(assessment => { + assessment._scrollToOnReset = false; + }); + return true; + }); + + checkContent('adapt-contrib-assessment - check assessment._scrollToOnReset attribute', async () => { + 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; + }); + + 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, assessmentArticles; + + 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; + }); + + mutateContent('adapt-contrib-assessment - add course._scoreToPass attribute', async () => { + assessmentConfig._scoreToPass = 60; + return true; + }); + + 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 course._correctToPass attribute', async () => { + assessmentConfig._correctToPass = 60; + return true; + }); + + 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' }); +}); 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' }); +});