From 195efec2f8aed9053160b340d64cdec2227f2203 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Thu, 13 Feb 2025 15:48:52 -0600 Subject: [PATCH 1/4] Initial migration scripts --- migrations/v2.js | 673 +++++++++++++++++++++++++++++++++++++++++++++++ migrations/v4.js | 53 ++++ migrations/v5.js | 235 +++++++++++++++++ 3 files changed, 961 insertions(+) create mode 100644 migrations/v2.js create mode 100644 migrations/v4.js create mode 100644 migrations/v5.js diff --git a/migrations/v2.js b/migrations/v2.js new file mode 100644 index 0000000..6478821 --- /dev/null +++ b/migrations/v2.js @@ -0,0 +1,673 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import _ from 'lodash'; + +describe('adapt-contrib-confidenceSlider - v2.0.0 > v2.1.0', async () => { + let confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v2', { name: 'adapt-contrib-confidenceSlider', version: '<2.1.0' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider.axisLabel attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider.axisLabel; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.axisLabel attribute', async () => { + const isValid = confidenceSliders.every(({ axisLabel }) => axisLabel === undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - axisLabel not removed from confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.disabledBody', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider.disabledBody = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.disabledBody atrribute', async () => { + const isValid = confidenceSliders.every(({ disabledBody }) => disabledBody !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - disabledBody not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._scale attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._scale; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scale attribute', async () => { + const isValid = confidenceSliders.every(({ _scale }) => _scale === undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scale not removed from confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._attempts', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._attempts = 1; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._attempts atrribute', async () => { + const isValid = confidenceSliders.every(({ _attempts }) => _attempts === 1); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _recordInteraction not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._shouldDisplayAttempts', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._shouldDisplayAttempts = false; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._shouldDisplayAttempts atrribute', async () => { + const isValid = confidenceSliders.every(({ _shouldDisplayAttempts }) => _shouldDisplayAttempts === false); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _shouldDisplayAttempts not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._questionWeight', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._questionWeight = 1; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._questionWeight atrribute', async () => { + const isValid = confidenceSliders.every(({ _questionWeight }) => _questionWeight === 1); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _questionWeight not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._recordInteraction', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._recordInteraction = true; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._recordInteraction atrribute', async () => { + const isValid = confidenceSliders.every(({ _recordInteraction }) => _recordInteraction === true); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _attempts not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._linkedToId', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._linkedToId = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._linkedToId atrribute', async () => { + const isValid = confidenceSliders.every(({ _linkedToId }) => _linkedToId !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _linkedToId not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.labelStart', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider.labelStart = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.labelStart atrribute', async () => { + const isValid = confidenceSliders.every(({ labelStart }) => labelStart !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - labelStart not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.labelEnd', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider.labelEnd = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.labelEnd atrribute', async () => { + const isValid = confidenceSliders.every(({ labelEnd }) => labelEnd !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - labelEnd not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleStart', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._scaleStart = 1; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleStart atrribute', async () => { + const isValid = confidenceSliders.every(({ _scaleStart }) => _scaleStart === 1); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleStart not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleEnd', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._scaleEnd = 1; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleEnd atrribute', async () => { + const isValid = confidenceSliders.every(({ _scaleEnd }) => _scaleEnd === 1); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleEnd not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleStep', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._scaleStep = 1; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleStep atrribute', async () => { + const isValid = confidenceSliders.every(({ _scaleStep }) => _scaleStep === 1); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleStep not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._correctAnswer', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._correctAnswer = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctAnswer atrribute', async () => { + const isValid = confidenceSliders.every(({ _correctAnswer }) => _correctAnswer !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctAnswer not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._high attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._correctRange._high; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._high attribute', async () => { + const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._high); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._high not removed from confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._correctRange._bottom', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._correctRange._bottom = 0; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._bottom atrribute', async () => { + const isValid = confidenceSliders.every(({ _correctRange }) => _correctRange._bottom === 0); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._bottom not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._low attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._correctRange._low; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._low attribute', async () => { + const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._low); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._low not removed from confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._correctRange._top', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._correctRange._top = 0; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._top atrribute', async () => { + const isValid = confidenceSliders.every(({ _correctRange }) => _correctRange._top === 0); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._top not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._showNumberValues attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._correctRange._showNumberValues; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._showNumberValues attribute', async () => { + const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._showNumberValues); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._showNumberValues not removed from confidenceSlider'); + return true; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._snapToNumbers attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._correctRange._snapToNumbers; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._snapToNumbers attribute', async () => { + const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._snapToNumbers); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._snapToNumbers not removed from confidenceSlider'); + return true; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange.labels.high attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._correctRange.labels.high; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange.labels.high attribute', async () => { + const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange.labels.high); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange.labels.high not removed from confidenceSlider'); + return true; + }); + + /** + * * Remove a JSON field + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange.labels.low attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._correctRange.labels.low; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange.labels.low attribute', async () => { + const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange.labels.low); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange.labels.low not removed from confidenceSlider'); + return true; + }); + + /** + * ? Does this erase all of the items within the object as well? + */ + mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._feedback attribute', async () => { + confidenceSliders.forEach(confidenceSlider => { + delete confidenceSlider._feedback; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback attribute', async () => { + const isValid = confidenceSliders.some(({ _feedback }) => _feedback); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback not removed from confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showNumber', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._showNumber = true; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showNumber atrribute', async () => { + const isValid = confidenceSliders.every(({ _showNumber }) => _showNumber === true); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showNumber not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showScaleIndicator', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._showScaleIndicator = true; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showScaleIndicator atrribute', async () => { + const isValid = confidenceSliders.every(({ _showScaleIndicator }) => _showScaleIndicator === true); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showScaleIndicator not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showScale', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._showScale = true; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showScale atrribute', async () => { + const isValid = confidenceSliders.every(({ _showScale }) => _showScale === true); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showScale not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showScale', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._showScale = true; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showScale atrribute', async () => { + const isValid = confidenceSliders.every(({ _showScale }) => _showScale === true); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showScale not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + * ? Will this add back in the _feedback object that was removed on line 373? + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.feedbackSeparator', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._feedback.feedbackSeparator = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.feedbackSeparator atrribute', async () => { + const isValid = confidenceSliders.some(({ _feedback }) => _feedback.feedbackSeparator !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.feedbackSeparator not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.generic', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._feedback.generic = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.generic atrribute', async () => { + const isValid = confidenceSliders.every(({ _feedback }) => _feedback.generic !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.generic not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._comparison.lower', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._comparison.lower = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._comparison.lower atrribute', async () => { + const isValid = confidenceSliders.every(({ _comparison }) => _comparison.lower !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _comparison.lower not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._comparison.same', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._comparison.same = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._comparison.same atrribute', async () => { + const isValid = confidenceSliders.some(({ _comparison }) => _comparison.same !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _comparison.same not added to any instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._comparison.higher', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._comparison.higher = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._comparison.higher atrribute', async () => { + const isValid = confidenceSliders.some(({ _comparison }) => _comparison.higher !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _comparison.higher not added to any instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._threshold.items._values._low', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._threshold.items._values._low = 0; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._threshold.items._values._low atrribute', async () => { + const isValid = confidenceSliders.some(({ _threshold }) => _threshold.items._values._low === 0); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _threshold.items._values._low not added to any instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._threshold.items._values._high', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._threshold.items._values._high = 0; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._threshold.items._values._high atrribute', async () => { + const isValid = confidenceSliders.some(({ _threshold }) => _threshold.items._values._high === 0); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _threshold.items._values._high not added to any instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._threshold.items.text', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._threshold.items.text = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._threshold.items.text atrribute', async () => { + const isValid = confidenceSliders.some(({ _threshold }) => _threshold.items.text !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _threshold.items.text not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._shouldStoreResponses', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._shouldStoreResponses = false; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._shouldStoreResponses atrribute', async () => { + const isValid = confidenceSliders.some(({ _shouldStoreResponses }) => _shouldStoreResponses === false); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _shouldStoreResponses not added to every instance of confidenceSlider'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v2.1.0', { name: 'adapt-contrib-confidenceSlider', version: '2.1.0', framework: '2.0.0' }); +}); + +describe('adapt-contrib-confidenceSlider - v2.1.0 > v2.1.3', async () => { + let course, courseConfidenceSliderGlobals, confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v2.1.0', { name: 'adapt-contrib-confidenceSlider', version: '<2.1.3' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Adjust an attribute value within course globals. + */ + mutateContent('adapt-contrib-confidenceSlider - modify globals ariaRegion attribute', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); + courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + + if (courseConfidenceSliderGlobals) { + if (courseConfidenceSliderGlobals.ariaRegion === + 'This component requires you to answer the question by selecting the relevant value. After selecting a value select the submit button below.') { + courseConfidenceSliderGlobals.ariaRegion = 'Answer the question by selecting a value from the range. Once you have done so, select the submit button below.'; + } + } + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - modify globals ariaRegion attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.ariaRegion === 'Answer the question by selecting a value from the range. Once you have done so, select the submit button below.'; + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals ariaRegion attribute not modified.'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v2.1.3', { name: 'adapt-contrib-confidenceSlider', version: '2.1.3', framework: '>=2.0.0' }); +}); + +describe('adapt-contrib-confidenceSlider - v2.1.3 > v2.2.0', async () => { + let confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v2.1.3', { name: 'adapt-contrib-confidenceSlider', version: '<2.2.0' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._canShowFeedback', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._canShowFeedback = true; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._canShowFeedback atrribute', async () => { + const isValid = confidenceSliders.some(({ _canShowFeedback }) => _canShowFeedback === true); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _canShowFeedback not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._canShowMarking', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._canShowMarking = true; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._canShowMarking atrribute', async () => { + const isValid = confidenceSliders.some(({ _canShowMarking }) => _canShowMarking === true); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _canShowMarking not added to every instance of confidenceSlider'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v2.2.0', { name: 'adapt-contrib-confidenceSlider', version: '2.2.0', framework: '>=2.0.17' }); +}); diff --git a/migrations/v4.js b/migrations/v4.js new file mode 100644 index 0000000..24fe30b --- /dev/null +++ b/migrations/v4.js @@ -0,0 +1,53 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import _ from 'lodash'; + +describe('adapt-contrib-confidenceSlider - v2.2.0 > v4.0.0', async () => { + let course, courseConfidenceSliderGlobals, confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v2.2.0', { name: 'adapt-contrib-confidenceSlider', version: '<4.0.0' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * Add an attribute value within course globals. + */ + mutateContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); + courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + + courseConfidenceSliderGlobals.labelStart = 1; + + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.labelStart === 1; + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelStart attribute not added.'); + return true; + }); + + /** + * * Add an attribute value within course globals. + */ + mutateContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); + courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + + courseConfidenceSliderGlobals.labelEnd = 1; + + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.labelEnd === 1; + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelEnd attribute not added.'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v4.0.0', { name: 'adapt-contrib-confidenceSlider', version: '4.0.0', framework: '>=5.18.3' }); +}); diff --git a/migrations/v5.js b/migrations/v5.js new file mode 100644 index 0000000..a466cf7 --- /dev/null +++ b/migrations/v5.js @@ -0,0 +1,235 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import _ from 'lodash'; + +describe('adapt-contrib-confidenceSlider - v4.0.0 > v5.2.0', async () => { + let course, courseConfidenceSliderGlobals, confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v4.0.0', { name: 'adapt-contrib-confidenceSlider', version: '<5.2.0' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Add an attribute value within course globals. + */ + mutateContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); + courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + + courseConfidenceSliderGlobals.ariaUserAnswer = 'Earlier in the course, you provided {{{linkedValue}}} as an answer to this question.'; + + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - modify globals ariaUserAnswer attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.ariaUserAnswer === 'Earlier in the course, you provided {{{linkedValue}}} as an answer to this question.'; + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals ariaUserAnswer attribute not added.'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v5.2.0', { name: 'adapt-contrib-confidenceSlider', version: '5.2.0', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-confidenceSlider - v5.2.0 > v5.2.3', async () => { + let confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v5.2.0', { name: 'adapt-contrib-confidenceSlider', version: '<5.2.3' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.title', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._feedback.title = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.title attribute', async () => { + const isValid = confidenceSliders.every(({ _feedback }) => _feedback.title === ''); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.title not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.altTitle', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._feedback.altTitle = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.altTitle attribute', async () => { + const isValid = confidenceSliders.every(({ _feedback }) => _feedback.altTitle === ''); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.altTitle not added to every instance of confidenceSlider'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v5.2.3', { name: 'adapt-contrib-confidenceSlider', version: '5.2.3', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-confidenceSlider - v5.2.3 > v5.2.4', async () => { + let confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v5.2.3', { name: 'adapt-contrib-confidenceSlider', version: '<5.2.4' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.ariaQuestion', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider.ariaQuestion = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.ariaQuestion attribute', async () => { + const isValid = confidenceSliders.every(({ ariaQuestion }) => ariaQuestion === ''); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - ariaQuestion not added to every instance of confidenceSlider'); + return true; + }); + + /** + * * Add JSON field to component and set blank. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.altTitle', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider._feedback.altTitle = ''; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.altTitle atrribute', async () => { + const isValid = confidenceSliders.every(({ _feedback }) => _feedback.altTitle === ''); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.altTitle not added to every instance of confidenceSlider'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v5.2.4', { name: 'adapt-contrib-confidenceSlider', version: '5.2.4', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-confidenceSlider - v5.2.4 > v5.4.4', async () => { + let course, courseConfidenceSliderGlobals, confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v5.2.4', { name: 'adapt-contrib-confidenceSlider', version: '<5.4.4' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Add an attribute value within course globals. + */ + mutateContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); + courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + + courseConfidenceSliderGlobals.labelStart = 'Start of the scale'; + + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.labelStart === 'Start of the scale'; + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelStart attribute not modified.'); + return true; + }); + + /** + * * Add an attribute value within course globals. + */ + mutateContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); + courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + + courseConfidenceSliderGlobals.labelStart = 'End of the scale'; + + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.labelStart === 'End of the scale'; + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelEnd attribute not modified.'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v5.4.4', { name: 'adapt-contrib-confidenceSlider', version: '5.4.4', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-confidenceSlider - v5.4.4 > v5.4.6', async () => { + let confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v5.4.4', { name: 'adapt-contrib-confidenceSlider', version: '<5.4.6' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.ariaScaleName', async () => { + confidenceSliders.forEach(confidenceSlider => { + confidenceSlider.ariaScaleName = 'confidence'; + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.ariaScaleName attribute', async () => { + const isValid = confidenceSliders.every(({ ariaScaleName }) => ariaScaleName !== undefined); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - ariaScaleName not added to every instance of confidenceSlider'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v5.4.6', { name: 'adapt-contrib-confidenceSlider', version: '5.4.6', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-confidenceSlider - v5.4.6 > v5.5.2', async () => { + let confidenceSliders; + + whereFromPlugin('adapt-contrib-confidenceSlider - from v5.4.6', { name: 'adapt-contrib-confidenceSlider', version: '<5.5.2' }); + + whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { + confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); + return confidenceSliders.length; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleEnd', async () => { + confidenceSliders.forEach(confidenceSlider => { + if (confidenceSlider._scaleEnd === 1) { + confidenceSlider._scaleEnd = 10; + } + }); + return true; + }); + + checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleEnd attribute', async () => { + const isValid = confidenceSliders.every(({ _scaleEnd }) => _scaleEnd !== null); + if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleEnd not added to every instance of confidenceSlider'); + return true; + }); + + updatePlugin('adapt-contrib-confidenceSlider - update to v5.5.2', { name: 'adapt-contrib-confidenceSlider', version: '5.5.2', framework: '>=5.19.1' }); +}); From 29e472f48cba185a8c56b1807400955294acd0a8 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Thu, 13 Feb 2025 15:52:56 -0600 Subject: [PATCH 2/4] Comitting the correct scripts --- migrations/v2.js | 639 ++++++++++++++++------------------------------- migrations/v3.js | 101 ++++++++ migrations/v4.js | 134 ++++++++-- migrations/v5.js | 235 ----------------- 4 files changed, 418 insertions(+), 691 deletions(-) create mode 100644 migrations/v3.js delete mode 100644 migrations/v5.js diff --git a/migrations/v2.js b/migrations/v2.js index 6478821..63c04ea 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -1,673 +1,454 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; import _ from 'lodash'; -describe('adapt-contrib-confidenceSlider - v2.0.0 > v2.1.0', async () => { - let confidenceSliders; +describe('adapt-contrib-slider - v2.0.0 > v2.0.1', async () => { + let sliders; - whereFromPlugin('adapt-contrib-confidenceSlider - from v2', { name: 'adapt-contrib-confidenceSlider', version: '<2.1.0' }); + whereFromPlugin('adapt-contrib-slider - from v2.0.0', { name: 'adapt-contrib-slider', version: '<2.0.1' }); - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; - }); - - /** - * * Remove a JSON field - */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider.axisLabel attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider.axisLabel; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.axisLabel attribute', async () => { - const isValid = confidenceSliders.every(({ axisLabel }) => axisLabel === undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - axisLabel not removed from confidenceSlider'); - return true; - }); - - /** - * * Add JSON field to component and set blank. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.disabledBody', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider.disabledBody = ''; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.disabledBody atrribute', async () => { - const isValid = confidenceSliders.every(({ disabledBody }) => disabledBody !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - disabledBody not added to every instance of confidenceSlider'); - return true; - }); - - /** - * * Remove a JSON field - */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._scale attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._scale; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scale attribute', async () => { - const isValid = confidenceSliders.every(({ _scale }) => _scale === undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scale not removed from confidenceSlider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._attempts', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._attempts = 1; + mutateContent('adapt-contrib-slider - add slider._showScale', async () => { + sliders.forEach(slider => { + slider._showScale = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._attempts atrribute', async () => { - const isValid = confidenceSliders.every(({ _attempts }) => _attempts === 1); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _recordInteraction not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._showScale attribute', async () => { + const isValid = sliders.some(({ _showScale }) => _showScale === true); + if (!isValid) throw new Error('adapt-contrib-slider - _showScale not added to every instance of slider'); return true; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._shouldDisplayAttempts', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._shouldDisplayAttempts = false; + mutateContent('adapt-contrib-slider - add slider._recordInteraction', async () => { + sliders.forEach(slider => { + slider._recordInteraction = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._shouldDisplayAttempts atrribute', async () => { - const isValid = confidenceSliders.every(({ _shouldDisplayAttempts }) => _shouldDisplayAttempts === false); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _shouldDisplayAttempts not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._recordInteraction attribute', async () => { + const isValid = sliders.every(({ _recordInteraction }) => _recordInteraction === true); + if (!isValid) throw new Error('adapt-contrib-slider - _recordInteraction not added to every instance of slider'); return true; }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._questionWeight', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._questionWeight = 1; - }); - return true; - }); + updatePlugin('adapt-contrib-slider - update to v2.0.1', { name: 'adapt-contrib-slider', version: '2.0.1', framework: '>=2.0.0' }); +}); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._questionWeight atrribute', async () => { - const isValid = confidenceSliders.every(({ _questionWeight }) => _questionWeight === 1); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _questionWeight not added to every instance of confidenceSlider'); - return true; - }); +describe('adapt-contrib-slider - v2.0.1 > v2.0.3', async () => { + let sliders; - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._recordInteraction', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._recordInteraction = true; - }); - return true; - }); + whereFromPlugin('adapt-contrib-slider - from v2.0.1', { name: 'adapt-contrib-slider', version: '<2.0.3' }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._recordInteraction atrribute', async () => { - const isValid = confidenceSliders.every(({ _recordInteraction }) => _recordInteraction === true); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _attempts not added to every instance of confidenceSlider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** - * * Add JSON field to component and set blank. + * * Modify attribute of existing JSON field. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._linkedToId', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._linkedToId = ''; + mutateContent('adapt-contrib-slider - add slider._correctAnswer', async () => { + sliders.forEach(slider => { + if (slider._correctAnswer === 1) { + slider._correctAnswer = ''; + } }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._linkedToId atrribute', async () => { - const isValid = confidenceSliders.every(({ _linkedToId }) => _linkedToId !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _linkedToId not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._correctAnswer attribute', async () => { + const isValid = sliders.some(({ _correctAnswer }) => _correctAnswer !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _correctAnswer not added to every instance of slider'); return true; }); /** - * * Add JSON field to component and set blank. + * * Modify attribute of existing JSON field. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.labelStart', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider.labelStart = ''; + mutateContent('adapt-contrib-slider - modify slider._correctRange._bottom', async () => { + sliders.forEach(slider => { + if (slider._correctRange._bottom === 1) { + slider._correctRange._bottom = 0; + } }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.labelStart atrribute', async () => { - const isValid = confidenceSliders.every(({ labelStart }) => labelStart !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - labelStart not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._correctRange._bottom attribute', async () => { + const isValid = sliders.every(({ _correctRange }) => _correctRange._bottom !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _correctRange._bottom not modified in every instance of slider'); return true; }); /** - * * Add JSON field to component and set attribute. + * * Modify attribute of existing JSON field. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.labelEnd', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider.labelEnd = ''; + mutateContent('adapt-contrib-slider - modify slider._correctRange._top', async () => { + sliders.forEach(slider => { + if (slider._correctRange._top === 1) { + slider._correctRange._top = 0; + } }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.labelEnd atrribute', async () => { - const isValid = confidenceSliders.every(({ labelEnd }) => labelEnd !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - labelEnd not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._correctRange._top attribute', async () => { + const isValid = sliders.every(({ _correctRange }) => _correctRange._top !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _correctRange._top not modified in every instance of slider'); return true; }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleStart', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._scaleStart = 1; - }); - return true; - }); + updatePlugin('adapt-contrib-slider - update to v2.0.3', { name: 'adapt-contrib-slider', version: '2.0.3', framework: '>=2.0.0' }); +}); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleStart atrribute', async () => { - const isValid = confidenceSliders.every(({ _scaleStart }) => _scaleStart === 1); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleStart not added to every instance of confidenceSlider'); - return true; - }); +describe('adapt-contrib-slider - v2.0.3 > v2.0.4', async () => { + let sliders; - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleEnd', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._scaleEnd = 1; - }); - return true; - }); + whereFromPlugin('adapt-contrib-slider - from v2.0.3', { name: 'adapt-contrib-slider', version: '<2.0.4' }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleEnd atrribute', async () => { - const isValid = confidenceSliders.every(({ _scaleEnd }) => _scaleEnd === 1); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleEnd not added to every instance of confidenceSlider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleStep', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._scaleStep = 1; + mutateContent('adapt-contrib-slider - add slider._canShowModelAnswer', async () => { + sliders.forEach(slider => { + slider._canShowModelAnswer = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleStep atrribute', async () => { - const isValid = confidenceSliders.every(({ _scaleStep }) => _scaleStep === 1); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleStep not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._canShowModelAnswer attribute', async () => { + const isValid = sliders.every(({ _canShowModelAnswer }) => _canShowModelAnswer === true); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowModelAnswer not added to every instance of slider'); return true; }); - /** - * * Add JSON field to component and set blank. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._correctAnswer', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._correctAnswer = ''; - }); - return true; - }); + updatePlugin('adapt-contrib-slider - update to v2.0.4', { name: 'adapt-contrib-slider', version: '2.0.4', framework: '>=2.0.0' }); +}); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctAnswer atrribute', async () => { - const isValid = confidenceSliders.every(({ _correctAnswer }) => _correctAnswer !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctAnswer not added to every instance of confidenceSlider'); - return true; - }); +describe('adapt-contrib-slider - v2.0.4 > v2.1.0', async () => { + let sliders; - /** - * * Remove a JSON field - */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._high attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._correctRange._high; - }); - return true; - }); + whereFromPlugin('adapt-contrib-slider - from v2.0.3', { name: 'adapt-contrib-slider', version: '<2.0.4' }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._high attribute', async () => { - const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._high); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._high not removed from confidenceSlider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._correctRange._bottom', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._correctRange._bottom = 0; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._bottom atrribute', async () => { - const isValid = confidenceSliders.every(({ _correctRange }) => _correctRange._bottom === 0); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._bottom not added to every instance of confidenceSlider'); - return true; - }); - - /** - * * Remove a JSON field - */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._low attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._correctRange._low; + mutateContent('adapt-contrib-slider - add slider._scaleStep', async () => { + sliders.forEach(slider => { + slider._scaleStep = 1; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._low attribute', async () => { - const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._low); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._low not removed from confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._scaleStep attribute', async () => { + const isValid = sliders.every(({ _scaleStep }) => _scaleStep === 1); + if (!isValid) throw new Error('adapt-contrib-slider - _scaleStep not added to every instance of slider'); return true; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._correctRange._top', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._correctRange._top = 0; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._top atrribute', async () => { - const isValid = confidenceSliders.every(({ _correctRange }) => _correctRange._top === 0); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._top not added to every instance of confidenceSlider'); - return true; - }); - - /** - * * Remove a JSON field - */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._showNumberValues attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._correctRange._showNumberValues; + mutateContent('adapt-contrib-slider - add slider._canShowModelAnswer', async () => { + sliders.forEach(slider => { + slider._canShowModelAnswer = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._showNumberValues attribute', async () => { - const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._showNumberValues); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._showNumberValues not removed from confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._canShowModelAnswer attribute', async () => { + const isValid = sliders.every(({ _canShowModelAnswer }) => _canShowModelAnswer === true); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowModelAnswer not added to every instance of slider'); return true; }); - /** - * * Remove a JSON field - */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange._snapToNumbers attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._correctRange._snapToNumbers; - }); - return true; - }); + updatePlugin('adapt-contrib-slider - update to v2.1.0', { name: 'adapt-contrib-slider', version: '2.1.0', framework: '>=2.0.0' }); +}); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange._snapToNumbers attribute', async () => { - const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange._snapToNumbers); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange._snapToNumbers not removed from confidenceSlider'); - return true; - }); +describe('adapt-contrib-slider - v2.1.0 > v2.1.1', async () => { + let sliders; - /** - * * Remove a JSON field - */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange.labels.high attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._correctRange.labels.high; - }); - return true; - }); + whereFromPlugin('adapt-contrib-slider - from v2.1.1', { name: 'adapt-contrib-slider', version: '<2.1.1' }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange.labels.high attribute', async () => { - const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange.labels.high); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange.labels.high not removed from confidenceSlider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** - * * Remove a JSON field + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._correctRange.labels.low attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._correctRange.labels.low; + mutateContent('adapt-contrib-slider - add slider._scaleStep', async () => { + sliders.forEach(slider => { + slider._scaleStep = 1; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._correctRange.labels.low attribute', async () => { - const isValid = confidenceSliders.some(({ _correctRange }) => _correctRange.labels.low); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _correctRange.labels.low not removed from confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._scaleStep attribute', async () => { + const isValid = sliders.every(({ _scaleStep }) => _scaleStep === 1); + if (!isValid) throw new Error('adapt-contrib-slider - _scaleStep not added to every instance of slider'); return true; }); /** - * ? Does this erase all of the items within the object as well? + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - remove confidenceSlider._feedback attribute', async () => { - confidenceSliders.forEach(confidenceSlider => { - delete confidenceSlider._feedback; + mutateContent('adapt-contrib-slider - add slider._canShowModelAnswer', async () => { + sliders.forEach(slider => { + slider._canShowModelAnswer = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback attribute', async () => { - const isValid = confidenceSliders.some(({ _feedback }) => _feedback); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback not removed from confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._canShowModelAnswer attribute', async () => { + const isValid = sliders.every(({ _canShowModelAnswer }) => _canShowModelAnswer === true); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowModelAnswer not added to every instance of slider'); return true; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showNumber', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._showNumber = true; + mutateContent('adapt-contrib-slider - add slider._canShowMarking', async () => { + sliders.forEach(slider => { + slider._canShowMarking = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showNumber atrribute', async () => { - const isValid = confidenceSliders.every(({ _showNumber }) => _showNumber === true); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showNumber not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._canShowMarking attribute', async () => { + const isValid = sliders.every(({ _canShowMarking }) => _canShowMarking === true); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowMarking not added to every instance of slider'); return true; }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showScaleIndicator', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._showScaleIndicator = true; - }); - return true; - }); + updatePlugin('adapt-contrib-slider - update to v2.1.1', { name: 'adapt-contrib-slider', version: '2.1.1', framework: '>=2.0.11' }); +}); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showScaleIndicator atrribute', async () => { - const isValid = confidenceSliders.every(({ _showScaleIndicator }) => _showScaleIndicator === true); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showScaleIndicator not added to every instance of confidenceSlider'); - return true; - }); +describe('adapt-contrib-slider - v2.1.1 > v2.1.5', async () => { + let sliders; - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showScale', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._showScale = true; - }); - return true; - }); + whereFromPlugin('adapt-contrib-slider - from v2.1.1', { name: 'adapt-contrib-slider', version: '<2.1.5' }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showScale atrribute', async () => { - const isValid = confidenceSliders.every(({ _showScale }) => _showScale === true); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showScale not added to every instance of confidenceSlider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._showScale', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._showScale = true; + mutateContent('adapt-contrib-slider - remove slider._feedback', async () => { + sliders.forEach(slider => { + delete slider._feedback; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._showScale atrribute', async () => { - const isValid = confidenceSliders.every(({ _showScale }) => _showScale === true); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _showScale not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._feedback attribute', async () => { + const isValid = sliders.every(({ _feedback }) => _feedback === undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _feedback not removed from every instance of slider'); return true; }); /** - * * Add JSON field to component and set blank. - * ? Will this add back in the _feedback object that was removed on line 373? + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.feedbackSeparator', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._feedback.feedbackSeparator = ''; + mutateContent('adapt-contrib-slider - add slider._feedback._correct', async () => { + sliders.forEach(slider => { + slider._feedback._correct = ''; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.feedbackSeparator atrribute', async () => { - const isValid = confidenceSliders.some(({ _feedback }) => _feedback.feedbackSeparator !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.feedbackSeparator not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._feedback._correct attribute', async () => { + const isValid = sliders.every(({ _feedback }) => _feedback._correct !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _feedback._correct not added to every instance of slider'); return true; }); /** - * * Add JSON field to component and set blank. + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.generic', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._feedback.generic = ''; + mutateContent('adapt-contrib-slider - add slider._feedback._incorrect.final', async () => { + sliders.forEach(slider => { + slider._feedback._incorrect.final = ''; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.generic atrribute', async () => { - const isValid = confidenceSliders.every(({ _feedback }) => _feedback.generic !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.generic not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._feedback._incorrect.final attribute', async () => { + const isValid = sliders.every(({ _feedback }) => _feedback && _feedback._incorrect && _feedback._incorrect.final !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _feedback._incorrect.final not added to every instance of slider'); return true; }); /** - * * Add JSON field to component and set blank. + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._comparison.lower', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._comparison.lower = ''; + mutateContent('adapt-contrib-slider - add slider._feedback._incorrect.notFinal', async () => { + sliders.forEach(slider => { + slider._feedback._incorrect.notFinal = ''; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._comparison.lower atrribute', async () => { - const isValid = confidenceSliders.every(({ _comparison }) => _comparison.lower !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _comparison.lower not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._feedback._incorrect.notFinal attribute', async () => { + const isValid = sliders.every(({ _feedback }) => _feedback._incorrect.notFinal !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _feedback._incorrect.notFinal not added to every instance of slider'); return true; }); /** - * * Add JSON field to component and set blank. + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._comparison.same', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._comparison.same = ''; + mutateContent('adapt-contrib-slider - add slider._feedback._partlyCorrect.final', async () => { + sliders.forEach(slider => { + slider._feedback._partlyCorrect.final = ''; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._comparison.same atrribute', async () => { - const isValid = confidenceSliders.some(({ _comparison }) => _comparison.same !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _comparison.same not added to any instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._feedback._partlyCorrect.final attribute', async () => { + const isValid = sliders.every(({ _feedback }) => _feedback._partlyCorrect.final !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _feedback._partlyCorrect.final not added to every instance of slider'); return true; }); /** - * * Add JSON field to component and set blank. + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._comparison.higher', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._comparison.higher = ''; + mutateContent('adapt-contrib-slider - add slider._feedback._partlyCorrect.notFinal', async () => { + sliders.forEach(slider => { + slider._feedback._partlyCorrect.notFinal = ''; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._comparison.higher atrribute', async () => { - const isValid = confidenceSliders.some(({ _comparison }) => _comparison.higher !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _comparison.higher not added to any instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._feedback._partlyCorrect.notFinal attribute', async () => { + const isValid = sliders.every(({ _feedback }) => _feedback._partlyCorrect.notFinal !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _feedback._partlyCorrect.notFinal not added to every instance of slider'); return true; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._threshold.items._values._low', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._threshold.items._values._low = 0; + mutateContent('adapt-contrib-slider - add slider._canShowFeedback', async () => { + sliders.forEach(slider => { + slider._canShowFeedback = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._threshold.items._values._low atrribute', async () => { - const isValid = confidenceSliders.some(({ _threshold }) => _threshold.items._values._low === 0); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _threshold.items._values._low not added to any instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._feedback._canShowFeedback attribute', async () => { + const isValid = sliders.every(({ _canShowFeedback }) => _canShowFeedback === true); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowFeedback not added to every instance of slider'); return true; }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._threshold.items._values._high', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._threshold.items._values._high = 0; - }); - return true; - }); + updatePlugin('adapt-contrib-slider - update to v2.1.5', { name: 'adapt-contrib-slider', version: '2.1.5', framework: '>=2.0.13' }); +}); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._threshold.items._values._high atrribute', async () => { - const isValid = confidenceSliders.some(({ _threshold }) => _threshold.items._values._high === 0); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _threshold.items._values._high not added to any instance of confidenceSlider'); - return true; - }); +describe('adapt-contrib-slider - v2.1.5 > v2.3.0', async () => { + let sliders; - /** - * * Add JSON field to component and set blank. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._threshold.items.text', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._threshold.items.text = ''; - }); - return true; - }); + whereFromPlugin('adapt-contrib-slider - from v2.1.5', { name: 'adapt-contrib-slider', version: '<2.3.0' }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._threshold.items.text atrribute', async () => { - const isValid = confidenceSliders.some(({ _threshold }) => _threshold.items.text !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _threshold.items.text not added to every instance of confidenceSlider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._shouldStoreResponses', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._shouldStoreResponses = false; + mutateContent('adapt-contrib-slider - add slider._showScaleNumbers', async () => { + sliders.forEach(slider => { + slider._showScaleNumbers = true; }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._shouldStoreResponses atrribute', async () => { - const isValid = confidenceSliders.some(({ _shouldStoreResponses }) => _shouldStoreResponses === false); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _shouldStoreResponses not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check slider._showScaleNumbers attribute', async () => { + const isValid = sliders.every(({ _showScaleNumbers }) => _showScaleNumbers === true); + if (!isValid) throw new Error('adapt-contrib-slider - _showScaleNumbers not added to every instance of slider'); return true; }); - updatePlugin('adapt-contrib-confidenceSlider - update to v2.1.0', { name: 'adapt-contrib-confidenceSlider', version: '2.1.0', framework: '2.0.0' }); + updatePlugin('adapt-contrib-slider - update to v2.3.0', { name: 'adapt-contrib-slider', version: '2.3.0', framework: '>=2.0.13' }); }); -describe('adapt-contrib-confidenceSlider - v2.1.0 > v2.1.3', async () => { - let course, courseConfidenceSliderGlobals, confidenceSliders; +describe('adapt-contrib-slider - v2.3.0 > v2.4.0', async () => { + let course, courseConfidenceSliderGlobals, sliders; - whereFromPlugin('adapt-contrib-confidenceSlider - from v2.1.0', { name: 'adapt-contrib-confidenceSlider', version: '<2.1.3' }); + whereFromPlugin('adapt-contrib-slider - from v2.3.0', { name: 'adapt-contrib-slider', version: '<2.4.0' }); - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** - * * Adjust an attribute value within course globals. - */ - mutateContent('adapt-contrib-confidenceSlider - modify globals ariaRegion attribute', async (content) => { + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-slider - add slider.labelStart', async (content) => { course = content.find(({ _type }) => _type === 'course'); - if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); - courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); + courseConfidenceSliderGlobals = course._globals._components._slider; - if (courseConfidenceSliderGlobals) { - if (courseConfidenceSliderGlobals.ariaRegion === - 'This component requires you to answer the question by selecting the relevant value. After selecting a value select the submit button below.') { - courseConfidenceSliderGlobals.ariaRegion = 'Answer the question by selecting a value from the range. Once you have done so, select the submit button below.'; - } - } - return true; - }); + courseConfidenceSliderGlobals.labelStart = 'Start of the scale'; - checkContent('adapt-contrib-confidenceSlider - modify globals ariaRegion attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.ariaRegion === 'Answer the question by selecting a value from the range. Once you have done so, select the submit button below.'; - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals ariaRegion attribute not modified.'); return true; }); - updatePlugin('adapt-contrib-confidenceSlider - update to v2.1.3', { name: 'adapt-contrib-confidenceSlider', version: '2.1.3', framework: '>=2.0.0' }); -}); - -describe('adapt-contrib-confidenceSlider - v2.1.3 > v2.2.0', async () => { - let confidenceSliders; - - whereFromPlugin('adapt-contrib-confidenceSlider - from v2.1.3', { name: 'adapt-contrib-confidenceSlider', version: '<2.2.0' }); - - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; + checkContent('adapt-contrib-slider - check globals labelStart attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.labelStart === 'Start of the scale'; + if (!isValid) throw new Error('adapt-contrib-slider - globals labelStart attribute not added.'); + return true; }); /** * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._canShowFeedback', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._canShowFeedback = true; - }); - return true; - }); + mutateContent('adapt-contrib-slider - add slider.labelEnd', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); + courseConfidenceSliderGlobals = course._globals._components._slider; - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._canShowFeedback atrribute', async () => { - const isValid = confidenceSliders.some(({ _canShowFeedback }) => _canShowFeedback === true); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _canShowFeedback not added to every instance of confidenceSlider'); - return true; - }); + courseConfidenceSliderGlobals.labelEnd = 'End of the scale'; - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._canShowMarking', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._canShowMarking = true; - }); return true; }); - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._canShowMarking atrribute', async () => { - const isValid = confidenceSliders.some(({ _canShowMarking }) => _canShowMarking === true); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _canShowMarking not added to every instance of confidenceSlider'); + checkContent('adapt-contrib-slider - check globals labelEnd attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.labelEnd === 'End of the scale'; + if (!isValid) throw new Error('adapt-contrib-slider - globals labelEnd attribute not added.'); return true; }); - updatePlugin('adapt-contrib-confidenceSlider - update to v2.2.0', { name: 'adapt-contrib-confidenceSlider', version: '2.2.0', framework: '>=2.0.17' }); + updatePlugin('adapt-contrib-slider - update to v2.4.0', { name: 'adapt-contrib-slider', version: '2.4.0', framework: '>=2.0.16' }); }); diff --git a/migrations/v3.js b/migrations/v3.js new file mode 100644 index 0000000..4c750cb --- /dev/null +++ b/migrations/v3.js @@ -0,0 +1,101 @@ +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import _ from 'lodash'; + +describe('adapt-contrib-slider - v2.4.0 > v3.1.0-alpha.1', async () => { + let sliders; + + whereFromPlugin('adapt-contrib-slider - from v2.4.0', { name: 'adapt-contrib-slider', version: '<3.1.0-alpha.1' }); + + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; + }); + + /** + * * Remove JSON field + */ + mutateContent('adapt-contrib-slider - remove slider._feedback._partlyCorrect', async () => { + sliders.forEach(slider => { + delete slider._feedback._partlyCorrect; + }); + return true; + }); + + checkContent('adapt-contrib-slider - check slider._feedback._partlyCorrect', async () => { + const isValid = sliders.every(({ _feedback }) => _feedback._partlyCorrect); + if (!isValid) throw new Error('adapt-contrib-slider - _feedback not removed from every instance of slider'); + return true; + }); + + updatePlugin('adapt-contrib-slider - update to v3.1.0-alpha.1', { name: 'adapt-contrib-slider', version: 'v3.1.0-alpha.1', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-slider - v3.1.0-alpha.1 > v3.2.0', async () => { + let course, courseConfidenceSliderGlobals, sliders; + + whereFromPlugin('adapt-contrib-slider - from v3.2.0', { name: 'adapt-contrib-slider', version: '<3.2.0' }); + + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; + }); + + /** + * * Add JSON field to globals and set attribute + */ + mutateContent('adapt-contrib-slider - add ariaCorrectAnswer to globals', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); + courseConfidenceSliderGlobals = course._globals._components._slider; + + courseConfidenceSliderGlobals.ariaCorrectAnswer = 'The correct answer is {{{correctAnswer}}}'; + + return true; + }); + + checkContent('adapt-contrib-slider - check globals ariaCorrectAnswer attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.ariaCorrectAnswer === 'The correct answer is {{{correctAnswer}}}'; + if (!isValid) throw new Error('adapt-contrib-slider - globals ariaCorrectAnswer attribute not added.'); + return true; + }); + + /** + * * Add JSON field to globals and set attribute + */ + mutateContent('adapt-contrib-slider - add ariaCorrectAnswerRange to globals', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); + courseConfidenceSliderGlobals = course._globals._components._slider; + + courseConfidenceSliderGlobals.ariaCorrectAnswerRange = 'The correct answer is any value from {{{bottom}}} to {{{top}}}'; + + return true; + }); + + checkContent('adapt-contrib-slider - check globals ariaCorrectAnswerRange attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.ariaCorrectAnswerRange === 'The correct answer is any value from {{{bottom}}} to {{{top}}}'; + if (!isValid) throw new Error('adapt-contrib-slider - globals ariaCorrectAnswerRange attribute not added.'); + return true; + }); + + /** + * * Add JSON field to globals and set attribute + */ + mutateContent('adapt-contrib-slider - add ariaUserAnswer to globals', async (content) => { + course = content.find(({ _type }) => _type === 'course'); + if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); + courseConfidenceSliderGlobals = course._globals._components._slider; + + courseConfidenceSliderGlobals.ariaUserAnswer = 'The answer you chose was {{{userAnswer}}}'; + + return true; + }); + + checkContent('adapt-contrib-slider - check globals ariaUserAnswer attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.ariaUserAnswer === 'The answer you chose was {{{userAnswer}}}'; + if (!isValid) throw new Error('adapt-contrib-slider - globals ariaUserAnswer attribute not added.'); + return true; + }); + + updatePlugin('adapt-contrib-slider - update to v3.2.0', { name: 'adapt-contrib-slider', version: '3.2.0', framework: '>=5.5.0' }); +}); diff --git a/migrations/v4.js b/migrations/v4.js index 24fe30b..ae5c976 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -1,53 +1,133 @@ import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; -import _ from 'lodash'; -describe('adapt-contrib-confidenceSlider - v2.2.0 > v4.0.0', async () => { - let course, courseConfidenceSliderGlobals, confidenceSliders; +describe('adapt-contrib-slider - v3.2.0 > v4.2.1', async () => { + let sliders; - whereFromPlugin('adapt-contrib-confidenceSlider - from v2.2.0', { name: 'adapt-contrib-confidenceSlider', version: '<4.0.0' }); + whereFromPlugin('adapt-contrib-slider - from v3.2.0', { name: 'adapt-contrib-slider', version: '<4.2.1' }); - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; }); /** - * Add an attribute value within course globals. - */ - mutateContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { - course = content.find(({ _type }) => _type === 'course'); - if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); - courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-slider - add slider.ariaQuestion', async () => { + sliders.forEach(slider => { + slider.ariaQuestion = ''; + }); + return true; + }); + + checkContent('adapt-contrib-slider - check slider.ariaQuestion attribute', async () => { + const isValid = sliders.every(({ ariaQuestion }) => ariaQuestion === ''); + if (!isValid) throw new Error('adapt-contrib-slider - ariaQuestion not added to every instance of slider'); + return true; + }); + + updatePlugin('adapt-contrib-slider - update to v4.2.1', { name: 'adapt-contrib-slider', version: 'v4.2.1', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-slider - v4.2.1 > v4.3.6', async () => { + let sliders; + + whereFromPlugin('adapt-contrib-slider - from v4.2.1', { name: 'adapt-contrib-slider', version: '<4.3.6' }); - courseConfidenceSliderGlobals.labelStart = 1; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; + }); + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-slider - add slider.scaleStepPrefix', async () => { + sliders.forEach(slider => { + slider.scaleStepPrefix = ''; + }); return true; }); - checkContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.labelStart === 1; - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelStart attribute not added.'); + checkContent('adapt-contrib-slider - check slider.scaleStepPrefix attribute', async () => { + const isValid = sliders.every(({ scaleStepPrefix }) => scaleStepPrefix === ''); + if (!isValid) throw new Error('adapt-contrib-slider - scaleStepPrefix not added to every instance of slider'); return true; }); /** - * * Add an attribute value within course globals. + * * Add JSON field to component and set attribute. */ - mutateContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { - course = content.find(({ _type }) => _type === 'course'); - if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); - courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; + mutateContent('adapt-contrib-slider - add slider.scaleStepSuffix', async () => { + sliders.forEach(slider => { + slider.scaleStepSuffix = ''; + }); + return true; + }); + + checkContent('adapt-contrib-slider - check slider.scaleStepSuffix attribute', async () => { + const isValid = sliders.every(({ scaleStepSuffix }) => scaleStepSuffix === ''); + if (!isValid) throw new Error('adapt-contrib-slider - scaleStepSuffix not added to every instance of slider'); + return true; + }); + + updatePlugin('adapt-contrib-slider - update to v4.3.6', { name: 'adapt-contrib-slider', version: 'v4.3.6', framework: '>=5.19.1' }); +}); - courseConfidenceSliderGlobals.labelEnd = 1; +describe('adapt-contrib-slider - v4.3.6 > v4.3.9', async () => { + let sliders; + whereFromPlugin('adapt-contrib-slider - from v4.3.6', { name: 'adapt-contrib-slider', version: '<4.3.9' }); + + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-slider - add slider.ariaScaleName', async () => { + sliders.forEach(slider => { + slider.ariaScaleName = ''; + }); + return true; + }); + + checkContent('adapt-contrib-slider - check slider.ariaScaleName attribute', async () => { + const isValid = sliders.every(({ ariaScaleName }) => ariaScaleName === ''); + if (!isValid) throw new Error('adapt-contrib-slider - ariaScaleName not added to every instance of slider'); + return true; + }); + + updatePlugin('adapt-contrib-slider - update to v4.3.9', { name: 'adapt-contrib-slider', version: 'v4.3.9', framework: '>=5.19.1' }); +}); + +describe('adapt-contrib-slider - v4.3.9 > v4.6.0', async () => { + let sliders; + + whereFromPlugin('adapt-contrib-slider - from v4.3.9', { name: 'adapt-contrib-slider', version: '<4.6.0' }); + + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = content.filter(({ _component }) => _component === 'slider'); + return sliders.length; + }); + + /** + * * Add JSON field to component and set attribute. + */ + mutateContent('adapt-contrib-slider - add slider._canShowCorrectness', async () => { + sliders.forEach(slider => { + slider._canShowCorrectness = false; + }); return true; }); - checkContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.labelEnd === 1; - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelEnd attribute not added.'); + checkContent('adapt-contrib-slider - check slider._canShowCorrectness attribute', async () => { + const isValid = sliders.every(({ _canShowCorrectness }) => _canShowCorrectness === false); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowCorrectness not added to every instance of slider'); return true; }); - updatePlugin('adapt-contrib-confidenceSlider - update to v4.0.0', { name: 'adapt-contrib-confidenceSlider', version: '4.0.0', framework: '>=5.18.3' }); + updatePlugin('adapt-contrib-slider - update to v4.6.0', { name: 'adapt-contrib-slider', version: 'v4.6.0', framework: '>=5.19.1' }); }); diff --git a/migrations/v5.js b/migrations/v5.js deleted file mode 100644 index a466cf7..0000000 --- a/migrations/v5.js +++ /dev/null @@ -1,235 +0,0 @@ -import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; -import _ from 'lodash'; - -describe('adapt-contrib-confidenceSlider - v4.0.0 > v5.2.0', async () => { - let course, courseConfidenceSliderGlobals, confidenceSliders; - - whereFromPlugin('adapt-contrib-confidenceSlider - from v4.0.0', { name: 'adapt-contrib-confidenceSlider', version: '<5.2.0' }); - - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; - }); - - /** - * * Add an attribute value within course globals. - */ - mutateContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { - course = content.find(({ _type }) => _type === 'course'); - if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); - courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; - - courseConfidenceSliderGlobals.ariaUserAnswer = 'Earlier in the course, you provided {{{linkedValue}}} as an answer to this question.'; - - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - modify globals ariaUserAnswer attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.ariaUserAnswer === 'Earlier in the course, you provided {{{linkedValue}}} as an answer to this question.'; - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals ariaUserAnswer attribute not added.'); - return true; - }); - - updatePlugin('adapt-contrib-confidenceSlider - update to v5.2.0', { name: 'adapt-contrib-confidenceSlider', version: '5.2.0', framework: '>=5.19.1' }); -}); - -describe('adapt-contrib-confidenceSlider - v5.2.0 > v5.2.3', async () => { - let confidenceSliders; - - whereFromPlugin('adapt-contrib-confidenceSlider - from v5.2.0', { name: 'adapt-contrib-confidenceSlider', version: '<5.2.3' }); - - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; - }); - - /** - * * Add JSON field to component and set blank. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.title', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._feedback.title = ''; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.title attribute', async () => { - const isValid = confidenceSliders.every(({ _feedback }) => _feedback.title === ''); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.title not added to every instance of confidenceSlider'); - return true; - }); - - /** - * * Add JSON field to component and set blank. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.altTitle', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._feedback.altTitle = ''; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.altTitle attribute', async () => { - const isValid = confidenceSliders.every(({ _feedback }) => _feedback.altTitle === ''); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.altTitle not added to every instance of confidenceSlider'); - return true; - }); - - updatePlugin('adapt-contrib-confidenceSlider - update to v5.2.3', { name: 'adapt-contrib-confidenceSlider', version: '5.2.3', framework: '>=5.19.1' }); -}); - -describe('adapt-contrib-confidenceSlider - v5.2.3 > v5.2.4', async () => { - let confidenceSliders; - - whereFromPlugin('adapt-contrib-confidenceSlider - from v5.2.3', { name: 'adapt-contrib-confidenceSlider', version: '<5.2.4' }); - - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; - }); - - /** - * * Add JSON field to component and set blank. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.ariaQuestion', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider.ariaQuestion = ''; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.ariaQuestion attribute', async () => { - const isValid = confidenceSliders.every(({ ariaQuestion }) => ariaQuestion === ''); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - ariaQuestion not added to every instance of confidenceSlider'); - return true; - }); - - /** - * * Add JSON field to component and set blank. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._feedback.altTitle', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider._feedback.altTitle = ''; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._feedback.altTitle atrribute', async () => { - const isValid = confidenceSliders.every(({ _feedback }) => _feedback.altTitle === ''); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _feedback.altTitle not added to every instance of confidenceSlider'); - return true; - }); - - updatePlugin('adapt-contrib-confidenceSlider - update to v5.2.4', { name: 'adapt-contrib-confidenceSlider', version: '5.2.4', framework: '>=5.19.1' }); -}); - -describe('adapt-contrib-confidenceSlider - v5.2.4 > v5.4.4', async () => { - let course, courseConfidenceSliderGlobals, confidenceSliders; - - whereFromPlugin('adapt-contrib-confidenceSlider - from v5.2.4', { name: 'adapt-contrib-confidenceSlider', version: '<5.4.4' }); - - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; - }); - - /** - * * Add an attribute value within course globals. - */ - mutateContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { - course = content.find(({ _type }) => _type === 'course'); - if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); - courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; - - courseConfidenceSliderGlobals.labelStart = 'Start of the scale'; - - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - modify globals labelStart attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.labelStart === 'Start of the scale'; - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelStart attribute not modified.'); - return true; - }); - - /** - * * Add an attribute value within course globals. - */ - mutateContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { - course = content.find(({ _type }) => _type === 'course'); - if (!_.has(course, '_globals._components._confidenceSlider')) _.set(course, '_globals._components._confidenceSlider', {}); - courseConfidenceSliderGlobals = course._globals._components._confidenceSlider; - - courseConfidenceSliderGlobals.labelStart = 'End of the scale'; - - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - modify globals labelEnd attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.labelStart === 'End of the scale'; - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - globals labelEnd attribute not modified.'); - return true; - }); - - updatePlugin('adapt-contrib-confidenceSlider - update to v5.4.4', { name: 'adapt-contrib-confidenceSlider', version: '5.4.4', framework: '>=5.19.1' }); -}); - -describe('adapt-contrib-confidenceSlider - v5.4.4 > v5.4.6', async () => { - let confidenceSliders; - - whereFromPlugin('adapt-contrib-confidenceSlider - from v5.4.4', { name: 'adapt-contrib-confidenceSlider', version: '<5.4.6' }); - - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; - }); - - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider.ariaScaleName', async () => { - confidenceSliders.forEach(confidenceSlider => { - confidenceSlider.ariaScaleName = 'confidence'; - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider.ariaScaleName attribute', async () => { - const isValid = confidenceSliders.every(({ ariaScaleName }) => ariaScaleName !== undefined); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - ariaScaleName not added to every instance of confidenceSlider'); - return true; - }); - - updatePlugin('adapt-contrib-confidenceSlider - update to v5.4.6', { name: 'adapt-contrib-confidenceSlider', version: '5.4.6', framework: '>=5.19.1' }); -}); - -describe('adapt-contrib-confidenceSlider - v5.4.6 > v5.5.2', async () => { - let confidenceSliders; - - whereFromPlugin('adapt-contrib-confidenceSlider - from v5.4.6', { name: 'adapt-contrib-confidenceSlider', version: '<5.5.2' }); - - whereContent('adapt-contrib-confidenceSlider - where confidenceSlider', async content => { - confidenceSliders = content.filter(({ _component }) => _component === 'confidenceSlider'); - return confidenceSliders.length; - }); - - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-confidenceSlider - add confidenceSlider._scaleEnd', async () => { - confidenceSliders.forEach(confidenceSlider => { - if (confidenceSlider._scaleEnd === 1) { - confidenceSlider._scaleEnd = 10; - } - }); - return true; - }); - - checkContent('adapt-contrib-confidenceSlider - check confidenceSlider._scaleEnd attribute', async () => { - const isValid = confidenceSliders.every(({ _scaleEnd }) => _scaleEnd !== null); - if (!isValid) throw new Error('adapt-contrib-confidenceSlider - _scaleEnd not added to every instance of confidenceSlider'); - return true; - }); - - updatePlugin('adapt-contrib-confidenceSlider - update to v5.5.2', { name: 'adapt-contrib-confidenceSlider', version: '5.5.2', framework: '>=5.19.1' }); -}); From 03256d1b9f34e13daf025d6b640ae3a4490fcad9 Mon Sep 17 00:00:00 2001 From: Joseph Replin Date: Fri, 21 Feb 2025 14:20:43 -0600 Subject: [PATCH 3/4] Adding helpers --- migrations/v2.js | 24 ++++++++++++------------ migrations/v3.js | 12 ++++++------ migrations/v4.js | 10 +++++----- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index 63c04ea..17d9743 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -1,4 +1,4 @@ -import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getCourse, getComponents } from 'adapt-migrations'; import _ from 'lodash'; describe('adapt-contrib-slider - v2.0.0 > v2.0.1', async () => { @@ -7,7 +7,7 @@ describe('adapt-contrib-slider - v2.0.0 > v2.0.1', async () => { whereFromPlugin('adapt-contrib-slider - from v2.0.0', { name: 'adapt-contrib-slider', version: '<2.0.1' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -52,7 +52,7 @@ describe('adapt-contrib-slider - v2.0.1 > v2.0.3', async () => { whereFromPlugin('adapt-contrib-slider - from v2.0.1', { name: 'adapt-contrib-slider', version: '<2.0.3' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -119,7 +119,7 @@ describe('adapt-contrib-slider - v2.0.3 > v2.0.4', async () => { whereFromPlugin('adapt-contrib-slider - from v2.0.3', { name: 'adapt-contrib-slider', version: '<2.0.4' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -148,7 +148,7 @@ describe('adapt-contrib-slider - v2.0.4 > v2.1.0', async () => { whereFromPlugin('adapt-contrib-slider - from v2.0.3', { name: 'adapt-contrib-slider', version: '<2.0.4' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -193,7 +193,7 @@ describe('adapt-contrib-slider - v2.1.0 > v2.1.1', async () => { whereFromPlugin('adapt-contrib-slider - from v2.1.1', { name: 'adapt-contrib-slider', version: '<2.1.1' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -254,7 +254,7 @@ describe('adapt-contrib-slider - v2.1.1 > v2.1.5', async () => { whereFromPlugin('adapt-contrib-slider - from v2.1.1', { name: 'adapt-contrib-slider', version: '<2.1.5' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -269,7 +269,7 @@ describe('adapt-contrib-slider - v2.1.1 > v2.1.5', async () => { }); checkContent('adapt-contrib-slider - check slider._feedback attribute', async () => { - const isValid = sliders.every(({ _feedback }) => _feedback === undefined); + const isValid = sliders.some(({ _feedback }) => _feedback); if (!isValid) throw new Error('adapt-contrib-slider - _feedback not removed from every instance of slider'); return true; }); @@ -379,7 +379,7 @@ describe('adapt-contrib-slider - v2.1.5 > v2.3.0', async () => { whereFromPlugin('adapt-contrib-slider - from v2.1.5', { name: 'adapt-contrib-slider', version: '<2.3.0' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -408,7 +408,7 @@ describe('adapt-contrib-slider - v2.3.0 > v2.4.0', async () => { whereFromPlugin('adapt-contrib-slider - from v2.3.0', { name: 'adapt-contrib-slider', version: '<2.4.0' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -416,7 +416,7 @@ describe('adapt-contrib-slider - v2.3.0 > v2.4.0', async () => { * * Add JSON field to component and set attribute. */ mutateContent('adapt-contrib-slider - add slider.labelStart', async (content) => { - course = content.find(({ _type }) => _type === 'course'); + course = getCourse(); if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); courseConfidenceSliderGlobals = course._globals._components._slider; @@ -435,7 +435,7 @@ describe('adapt-contrib-slider - v2.3.0 > v2.4.0', async () => { * * Add JSON field to component and set attribute. */ mutateContent('adapt-contrib-slider - add slider.labelEnd', async (content) => { - course = content.find(({ _type }) => _type === 'course'); + course = getCourse(); if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); courseConfidenceSliderGlobals = course._globals._components._slider; diff --git a/migrations/v3.js b/migrations/v3.js index 4c750cb..8e9f4b3 100644 --- a/migrations/v3.js +++ b/migrations/v3.js @@ -1,4 +1,4 @@ -import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getCourse, getComponents } from 'adapt-migrations'; import _ from 'lodash'; describe('adapt-contrib-slider - v2.4.0 > v3.1.0-alpha.1', async () => { @@ -7,7 +7,7 @@ describe('adapt-contrib-slider - v2.4.0 > v3.1.0-alpha.1', async () => { whereFromPlugin('adapt-contrib-slider - from v2.4.0', { name: 'adapt-contrib-slider', version: '<3.1.0-alpha.1' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -36,7 +36,7 @@ describe('adapt-contrib-slider - v3.1.0-alpha.1 > v3.2.0', async () => { whereFromPlugin('adapt-contrib-slider - from v3.2.0', { name: 'adapt-contrib-slider', version: '<3.2.0' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -44,7 +44,7 @@ describe('adapt-contrib-slider - v3.1.0-alpha.1 > v3.2.0', async () => { * * Add JSON field to globals and set attribute */ mutateContent('adapt-contrib-slider - add ariaCorrectAnswer to globals', async (content) => { - course = content.find(({ _type }) => _type === 'course'); + course = getCourse(); if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); courseConfidenceSliderGlobals = course._globals._components._slider; @@ -63,7 +63,7 @@ describe('adapt-contrib-slider - v3.1.0-alpha.1 > v3.2.0', async () => { * * Add JSON field to globals and set attribute */ mutateContent('adapt-contrib-slider - add ariaCorrectAnswerRange to globals', async (content) => { - course = content.find(({ _type }) => _type === 'course'); + course = getCourse(); if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); courseConfidenceSliderGlobals = course._globals._components._slider; @@ -82,7 +82,7 @@ describe('adapt-contrib-slider - v3.1.0-alpha.1 > v3.2.0', async () => { * * Add JSON field to globals and set attribute */ mutateContent('adapt-contrib-slider - add ariaUserAnswer to globals', async (content) => { - course = content.find(({ _type }) => _type === 'course'); + course = getCourse(); if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); courseConfidenceSliderGlobals = course._globals._components._slider; diff --git a/migrations/v4.js b/migrations/v4.js index ae5c976..6cee710 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -1,4 +1,4 @@ -import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin } from 'adapt-migrations'; +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getComponents } from 'adapt-migrations'; describe('adapt-contrib-slider - v3.2.0 > v4.2.1', async () => { let sliders; @@ -6,7 +6,7 @@ describe('adapt-contrib-slider - v3.2.0 > v4.2.1', async () => { whereFromPlugin('adapt-contrib-slider - from v3.2.0', { name: 'adapt-contrib-slider', version: '<4.2.1' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -35,7 +35,7 @@ describe('adapt-contrib-slider - v4.2.1 > v4.3.6', async () => { whereFromPlugin('adapt-contrib-slider - from v4.2.1', { name: 'adapt-contrib-slider', version: '<4.3.6' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -80,7 +80,7 @@ describe('adapt-contrib-slider - v4.3.6 > v4.3.9', async () => { whereFromPlugin('adapt-contrib-slider - from v4.3.6', { name: 'adapt-contrib-slider', version: '<4.3.9' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); @@ -109,7 +109,7 @@ describe('adapt-contrib-slider - v4.3.9 > v4.6.0', async () => { whereFromPlugin('adapt-contrib-slider - from v4.3.9', { name: 'adapt-contrib-slider', version: '<4.6.0' }); whereContent('adapt-contrib-slider - where slider', async content => { - sliders = content.filter(({ _component }) => _component === 'slider'); + sliders = getComponents('slider'); return sliders.length; }); From 3d0b6081a8710500d9b35409b9a95f576119567c Mon Sep 17 00:00:00 2001 From: joe-allen-89 <85872286+joe-allen-89@users.noreply.github.com> Date: Thu, 6 Mar 2025 09:35:25 +0000 Subject: [PATCH 4/4] automated testing added, amends completed, reorganised and spaced --- migrations/v2.js | 402 ++++++++++++++++++++++++----------------------- migrations/v3.js | 117 +++++++++----- migrations/v4.js | 89 ++++++++--- 3 files changed, 348 insertions(+), 260 deletions(-) diff --git a/migrations/v2.js b/migrations/v2.js index 17d9743..79bd0a0 100644 --- a/migrations/v2.js +++ b/migrations/v2.js @@ -1,19 +1,16 @@ -import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getCourse, getComponents } from 'adapt-migrations'; +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getCourse, getComponents, testStopWhere, testSuccessWhere } from 'adapt-migrations'; import _ from 'lodash'; describe('adapt-contrib-slider - v2.0.0 > v2.0.1', async () => { let sliders; - whereFromPlugin('adapt-contrib-slider - from v2.0.0', { name: 'adapt-contrib-slider', version: '<2.0.1' }); + whereFromPlugin('adapt-contrib-slider - from v2.0.0', { name: 'adapt-contrib-slider', version: '>=2.0.0 <2.0.1' }); whereContent('adapt-contrib-slider - where slider', async content => { sliders = getComponents('slider'); return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._showScale', async () => { sliders.forEach(slider => { slider._showScale = true; @@ -21,15 +18,6 @@ describe('adapt-contrib-slider - v2.0.0 > v2.0.1', async () => { return true; }); - checkContent('adapt-contrib-slider - check slider._showScale attribute', async () => { - const isValid = sliders.some(({ _showScale }) => _showScale === true); - if (!isValid) throw new Error('adapt-contrib-slider - _showScale not added to every instance of slider'); - return true; - }); - - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._recordInteraction', async () => { sliders.forEach(slider => { slider._recordInteraction = true; @@ -37,6 +25,12 @@ describe('adapt-contrib-slider - v2.0.0 > v2.0.1', async () => { return true; }); + checkContent('adapt-contrib-slider - check slider._showScale attribute', async () => { + const isValid = sliders.some(({ _showScale }) => _showScale === true); + if (!isValid) throw new Error('adapt-contrib-slider - _showScale not added to every instance of slider'); + return true; + }); + checkContent('adapt-contrib-slider - check slider._recordInteraction attribute', async () => { const isValid = sliders.every(({ _recordInteraction }) => _recordInteraction === true); if (!isValid) throw new Error('adapt-contrib-slider - _recordInteraction not added to every instance of slider'); @@ -44,6 +38,23 @@ describe('adapt-contrib-slider - v2.0.0 > v2.0.1', async () => { }); updatePlugin('adapt-contrib-slider - update to v2.0.1', { name: 'adapt-contrib-slider', version: '2.0.1', framework: '>=2.0.0' }); + + testSuccessWhere('slider component with empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _type: 'course' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.0' }], + content: [{ _component: 'other' }] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.1' }] + }); }); describe('adapt-contrib-slider - v2.0.1 > v2.0.3', async () => { @@ -56,51 +67,41 @@ describe('adapt-contrib-slider - v2.0.1 > v2.0.3', async () => { return sliders.length; }); - /** - * * Modify attribute of existing JSON field. - */ mutateContent('adapt-contrib-slider - add slider._correctAnswer', async () => { sliders.forEach(slider => { - if (slider._correctAnswer === 1) { - slider._correctAnswer = ''; - } + const newValue = slider._correctAnswer?.toString() || ''; + slider._correctAnswer = newValue; }); return true; }); - checkContent('adapt-contrib-slider - check slider._correctAnswer attribute', async () => { - const isValid = sliders.some(({ _correctAnswer }) => _correctAnswer !== undefined); - if (!isValid) throw new Error('adapt-contrib-slider - _correctAnswer not added to every instance of slider'); + mutateContent('adapt-contrib-slider - modify slider._correctRange._bottom', async () => { + sliders.forEach(slider => { + if (!_.has(slider, '_correctRange._bottom')) { + _.set(slider, '_correctRange._bottom', 0); + } + }); return true; }); - /** - * * Modify attribute of existing JSON field. - */ - mutateContent('adapt-contrib-slider - modify slider._correctRange._bottom', async () => { + mutateContent('adapt-contrib-slider - modify slider._correctRange._top', async () => { sliders.forEach(slider => { - if (slider._correctRange._bottom === 1) { - slider._correctRange._bottom = 0; + if (!_.has(slider, '_correctRange._top')) { + _.set(slider, '_correctRange._top', 0); } }); return true; }); - checkContent('adapt-contrib-slider - check slider._correctRange._bottom attribute', async () => { - const isValid = sliders.every(({ _correctRange }) => _correctRange._bottom !== undefined); - if (!isValid) throw new Error('adapt-contrib-slider - _correctRange._bottom not modified in every instance of slider'); + checkContent('adapt-contrib-slider - check slider._correctAnswer attribute', async () => { + const isValid = sliders.some(({ _correctAnswer }) => _correctAnswer !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _correctAnswer not added to every instance of slider'); return true; }); - /** - * * Modify attribute of existing JSON field. - */ - mutateContent('adapt-contrib-slider - modify slider._correctRange._top', async () => { - sliders.forEach(slider => { - if (slider._correctRange._top === 1) { - slider._correctRange._top = 0; - } - }); + checkContent('adapt-contrib-slider - check slider._correctRange._bottom attribute', async () => { + const isValid = sliders.every(({ _correctRange }) => _correctRange._bottom !== undefined); + if (!isValid) throw new Error('adapt-contrib-slider - _correctRange._bottom not modified in every instance of slider'); return true; }); @@ -111,6 +112,25 @@ describe('adapt-contrib-slider - v2.0.1 > v2.0.3', async () => { }); updatePlugin('adapt-contrib-slider - update to v2.0.3', { name: 'adapt-contrib-slider', version: '2.0.3', framework: '>=2.0.0' }); + + testSuccessWhere('non/configured slider component with empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.2' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider', _correctRange: { _bottom: 5, _top: 10 } }, + { _id: 'c-110', _component: 'slider', _correctAnswer: 5 }, + { _type: 'course' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.2' }], + content: [{ _component: 'other' }] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.3' }] + }); }); describe('adapt-contrib-slider - v2.0.3 > v2.0.4', async () => { @@ -123,9 +143,6 @@ describe('adapt-contrib-slider - v2.0.3 > v2.0.4', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._canShowModelAnswer', async () => { sliders.forEach(slider => { slider._canShowModelAnswer = true; @@ -140,21 +157,36 @@ describe('adapt-contrib-slider - v2.0.3 > v2.0.4', async () => { }); updatePlugin('adapt-contrib-slider - update to v2.0.4', { name: 'adapt-contrib-slider', version: '2.0.4', framework: '>=2.0.0' }); + + testSuccessWhere('non/configured slider component with empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.3' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' }, + { _type: 'course' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.3' }], + content: [{ _component: 'other' }] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.4' }] + }); }); describe('adapt-contrib-slider - v2.0.4 > v2.1.0', async () => { let sliders; - whereFromPlugin('adapt-contrib-slider - from v2.0.3', { name: 'adapt-contrib-slider', version: '<2.0.4' }); + whereFromPlugin('adapt-contrib-slider - from v2.0.4', { name: 'adapt-contrib-slider', version: '<2.1.0' }); whereContent('adapt-contrib-slider - where slider', async content => { sliders = getComponents('slider'); return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._scaleStep', async () => { sliders.forEach(slider => { slider._scaleStep = 1; @@ -162,15 +194,6 @@ describe('adapt-contrib-slider - v2.0.4 > v2.1.0', async () => { return true; }); - checkContent('adapt-contrib-slider - check slider._scaleStep attribute', async () => { - const isValid = sliders.every(({ _scaleStep }) => _scaleStep === 1); - if (!isValid) throw new Error('adapt-contrib-slider - _scaleStep not added to every instance of slider'); - return true; - }); - - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._canShowModelAnswer', async () => { sliders.forEach(slider => { slider._canShowModelAnswer = true; @@ -178,6 +201,12 @@ describe('adapt-contrib-slider - v2.0.4 > v2.1.0', async () => { return true; }); + checkContent('adapt-contrib-slider - check slider._scaleStep attribute', async () => { + const isValid = sliders.every(({ _scaleStep }) => _scaleStep === 1); + if (!isValid) throw new Error('adapt-contrib-slider - _scaleStep not added to every instance of slider'); + return true; + }); + checkContent('adapt-contrib-slider - check slider._canShowModelAnswer attribute', async () => { const isValid = sliders.every(({ _canShowModelAnswer }) => _canShowModelAnswer === true); if (!isValid) throw new Error('adapt-contrib-slider - _canShowModelAnswer not added to every instance of slider'); @@ -185,6 +214,24 @@ describe('adapt-contrib-slider - v2.0.4 > v2.1.0', async () => { }); updatePlugin('adapt-contrib-slider - update to v2.1.0', { name: 'adapt-contrib-slider', version: '2.1.0', framework: '>=2.0.0' }); + + testSuccessWhere('non/configured slider component with empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.4' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' }, + { _type: 'course' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.0.4' }], + content: [{ _component: 'other' }] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.1.0' }] + }); }); describe('adapt-contrib-slider - v2.1.0 > v2.1.1', async () => { @@ -197,9 +244,6 @@ describe('adapt-contrib-slider - v2.1.0 > v2.1.1', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._scaleStep', async () => { sliders.forEach(slider => { slider._scaleStep = 1; @@ -207,15 +251,6 @@ describe('adapt-contrib-slider - v2.1.0 > v2.1.1', async () => { return true; }); - checkContent('adapt-contrib-slider - check slider._scaleStep attribute', async () => { - const isValid = sliders.every(({ _scaleStep }) => _scaleStep === 1); - if (!isValid) throw new Error('adapt-contrib-slider - _scaleStep not added to every instance of slider'); - return true; - }); - - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._canShowModelAnswer', async () => { sliders.forEach(slider => { slider._canShowModelAnswer = true; @@ -223,15 +258,6 @@ describe('adapt-contrib-slider - v2.1.0 > v2.1.1', async () => { return true; }); - checkContent('adapt-contrib-slider - check slider._canShowModelAnswer attribute', async () => { - const isValid = sliders.every(({ _canShowModelAnswer }) => _canShowModelAnswer === true); - if (!isValid) throw new Error('adapt-contrib-slider - _canShowModelAnswer not added to every instance of slider'); - return true; - }); - - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._canShowMarking', async () => { sliders.forEach(slider => { slider._canShowMarking = true; @@ -239,124 +265,55 @@ describe('adapt-contrib-slider - v2.1.0 > v2.1.1', async () => { return true; }); - checkContent('adapt-contrib-slider - check slider._canShowMarking attribute', async () => { - const isValid = sliders.every(({ _canShowMarking }) => _canShowMarking === true); - if (!isValid) throw new Error('adapt-contrib-slider - _canShowMarking not added to every instance of slider'); - return true; - }); - - updatePlugin('adapt-contrib-slider - update to v2.1.1', { name: 'adapt-contrib-slider', version: '2.1.1', framework: '>=2.0.11' }); -}); - -describe('adapt-contrib-slider - v2.1.1 > v2.1.5', async () => { - let sliders; - - whereFromPlugin('adapt-contrib-slider - from v2.1.1', { name: 'adapt-contrib-slider', version: '<2.1.5' }); - - whereContent('adapt-contrib-slider - where slider', async content => { - sliders = getComponents('slider'); - return sliders.length; - }); - - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-slider - remove slider._feedback', async () => { - sliders.forEach(slider => { - delete slider._feedback; - }); - return true; - }); - - checkContent('adapt-contrib-slider - check slider._feedback attribute', async () => { - const isValid = sliders.some(({ _feedback }) => _feedback); - if (!isValid) throw new Error('adapt-contrib-slider - _feedback not removed from every instance of slider'); - return true; - }); - - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-slider - add slider._feedback._correct', async () => { - sliders.forEach(slider => { - slider._feedback._correct = ''; - }); + checkContent('adapt-contrib-slider - check slider._scaleStep attribute', async () => { + const isValid = sliders.every(({ _scaleStep }) => _scaleStep === 1); + if (!isValid) throw new Error('adapt-contrib-slider - _scaleStep not added to every instance of slider'); return true; }); - checkContent('adapt-contrib-slider - check slider._feedback._correct attribute', async () => { - const isValid = sliders.every(({ _feedback }) => _feedback._correct !== undefined); - if (!isValid) throw new Error('adapt-contrib-slider - _feedback._correct not added to every instance of slider'); + checkContent('adapt-contrib-slider - check slider._canShowModelAnswer attribute', async () => { + const isValid = sliders.every(({ _canShowModelAnswer }) => _canShowModelAnswer === true); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowModelAnswer not added to every instance of slider'); return true; }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-slider - add slider._feedback._incorrect.final', async () => { - sliders.forEach(slider => { - slider._feedback._incorrect.final = ''; - }); + checkContent('adapt-contrib-slider - check slider._canShowMarking attribute', async () => { + const isValid = sliders.every(({ _canShowMarking }) => _canShowMarking === true); + if (!isValid) throw new Error('adapt-contrib-slider - _canShowMarking not added to every instance of slider'); return true; }); - checkContent('adapt-contrib-slider - check slider._feedback._incorrect.final attribute', async () => { - const isValid = sliders.every(({ _feedback }) => _feedback && _feedback._incorrect && _feedback._incorrect.final !== undefined); - if (!isValid) throw new Error('adapt-contrib-slider - _feedback._incorrect.final not added to every instance of slider'); - return true; - }); + updatePlugin('adapt-contrib-slider - update to v2.1.1', { name: 'adapt-contrib-slider', version: '2.1.1', framework: '>=2.0.11' }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-slider - add slider._feedback._incorrect.notFinal', async () => { - sliders.forEach(slider => { - slider._feedback._incorrect.notFinal = ''; - }); - return true; + testSuccessWhere('non/configured slider component with empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.1.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' }, + { _type: 'course' } + ] }); - checkContent('adapt-contrib-slider - check slider._feedback._incorrect.notFinal attribute', async () => { - const isValid = sliders.every(({ _feedback }) => _feedback._incorrect.notFinal !== undefined); - if (!isValid) throw new Error('adapt-contrib-slider - _feedback._incorrect.notFinal not added to every instance of slider'); - return true; + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.1.0' }], + content: [{ _component: 'other' }] }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-slider - add slider._feedback._partlyCorrect.final', async () => { - sliders.forEach(slider => { - slider._feedback._partlyCorrect.final = ''; - }); - return true; + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.1.1' }] }); +}); - checkContent('adapt-contrib-slider - check slider._feedback._partlyCorrect.final attribute', async () => { - const isValid = sliders.every(({ _feedback }) => _feedback._partlyCorrect.final !== undefined); - if (!isValid) throw new Error('adapt-contrib-slider - _feedback._partlyCorrect.final not added to every instance of slider'); - return true; - }); +describe('adapt-contrib-slider - v2.1.1 > v2.1.5', async () => { + let sliders; - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-slider - add slider._feedback._partlyCorrect.notFinal', async () => { - sliders.forEach(slider => { - slider._feedback._partlyCorrect.notFinal = ''; - }); - return true; - }); + whereFromPlugin('adapt-contrib-slider - from v2.1.1', { name: 'adapt-contrib-slider', version: '<2.1.5' }); - checkContent('adapt-contrib-slider - check slider._feedback._partlyCorrect.notFinal attribute', async () => { - const isValid = sliders.every(({ _feedback }) => _feedback._partlyCorrect.notFinal !== undefined); - if (!isValid) throw new Error('adapt-contrib-slider - _feedback._partlyCorrect.notFinal not added to every instance of slider'); - return true; + whereContent('adapt-contrib-slider - where slider', async content => { + sliders = getComponents('slider'); + return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._canShowFeedback', async () => { sliders.forEach(slider => { slider._canShowFeedback = true; @@ -371,6 +328,24 @@ describe('adapt-contrib-slider - v2.1.1 > v2.1.5', async () => { }); updatePlugin('adapt-contrib-slider - update to v2.1.5', { name: 'adapt-contrib-slider', version: '2.1.5', framework: '>=2.0.13' }); + + testSuccessWhere('non/configured slider component with empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.1.4' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' }, + { _type: 'course' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.1.4' }], + content: [{ _component: 'other' }] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.1.5' }] + }); }); describe('adapt-contrib-slider - v2.1.5 > v2.3.0', async () => { @@ -383,9 +358,6 @@ describe('adapt-contrib-slider - v2.1.5 > v2.3.0', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._showScaleNumbers', async () => { sliders.forEach(slider => { slider._showScaleNumbers = true; @@ -400,6 +372,23 @@ describe('adapt-contrib-slider - v2.1.5 > v2.3.0', async () => { }); updatePlugin('adapt-contrib-slider - update to v2.3.0', { name: 'adapt-contrib-slider', version: '2.3.0', framework: '>=2.0.13' }); + + testSuccessWhere('non/configured slider component', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.2.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.2.0' }], + content: [{ _component: 'other' }] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }] + }); }); describe('adapt-contrib-slider - v2.3.0 > v2.4.0', async () => { @@ -412,35 +401,26 @@ describe('adapt-contrib-slider - v2.3.0 > v2.4.0', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ - mutateContent('adapt-contrib-slider - add slider.labelStart', async (content) => { + mutateContent('Narrative - add globals if missing', async (content) => { course = getCourse(); if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); courseConfidenceSliderGlobals = course._globals._components._slider; - - courseConfidenceSliderGlobals.labelStart = 'Start of the scale'; - return true; }); - checkContent('adapt-contrib-slider - check globals labelStart attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.labelStart === 'Start of the scale'; - if (!isValid) throw new Error('adapt-contrib-slider - globals labelStart attribute not added.'); + mutateContent('adapt-contrib-slider - add slider.labelStart', async (content) => { + courseConfidenceSliderGlobals.labelStart = 'Start of the scale'; return true; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider.labelEnd', async (content) => { - course = getCourse(); - if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); - courseConfidenceSliderGlobals = course._globals._components._slider; - courseConfidenceSliderGlobals.labelEnd = 'End of the scale'; + return true; + }); + checkContent('adapt-contrib-slider - check globals labelStart attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.labelStart === 'Start of the scale'; + if (!isValid) throw new Error('adapt-contrib-slider - globals labelStart attribute not added.'); return true; }); @@ -451,4 +431,34 @@ describe('adapt-contrib-slider - v2.3.0 > v2.4.0', async () => { }); updatePlugin('adapt-contrib-slider - update to v2.4.0', { name: 'adapt-contrib-slider', version: '2.4.0', framework: '>=2.0.16' }); + + testSuccessWhere('non/configured slider component with empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' }, + { _type: 'course' } + ] + }); + + testSuccessWhere('non/configured slider component with course._globals', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' }, + { _type: 'course', _globals: { _components: { _slider: {} } } } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _component: 'other' }, + { _type: 'course' } + ] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.4.0' }] + }); }); diff --git a/migrations/v3.js b/migrations/v3.js index 8e9f4b3..c9a3168 100644 --- a/migrations/v3.js +++ b/migrations/v3.js @@ -1,19 +1,16 @@ -import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getCourse, getComponents } from 'adapt-migrations'; +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getCourse, getComponents, testStopWhere, testSuccessWhere } from 'adapt-migrations'; import _ from 'lodash'; -describe('adapt-contrib-slider - v2.4.0 > v3.1.0-alpha.1', async () => { +describe('adapt-contrib-slider - v2.4.0 > v3.1.0', async () => { let sliders; - whereFromPlugin('adapt-contrib-slider - from v2.4.0', { name: 'adapt-contrib-slider', version: '<3.1.0-alpha.1' }); + whereFromPlugin('adapt-contrib-slider - from v2.4.0', { name: 'adapt-contrib-slider', version: '<3.1.0' }); whereContent('adapt-contrib-slider - where slider', async content => { sliders = getComponents('slider'); return sliders.length; }); - /** - * * Remove JSON field - */ mutateContent('adapt-contrib-slider - remove slider._feedback._partlyCorrect', async () => { sliders.forEach(slider => { delete slider._feedback._partlyCorrect; @@ -22,16 +19,41 @@ describe('adapt-contrib-slider - v2.4.0 > v3.1.0-alpha.1', async () => { }); checkContent('adapt-contrib-slider - check slider._feedback._partlyCorrect', async () => { - const isValid = sliders.every(({ _feedback }) => _feedback._partlyCorrect); - if (!isValid) throw new Error('adapt-contrib-slider - _feedback not removed from every instance of slider'); + const isInvalid = sliders.some(({ _feedback }) => _feedback._partlyCorrect); + if (isInvalid) throw new Error('adapt-contrib-slider - _feedback not removed from every instance of slider'); return true; }); - updatePlugin('adapt-contrib-slider - update to v3.1.0-alpha.1', { name: 'adapt-contrib-slider', version: 'v3.1.0-alpha.1', framework: '>=5.19.1' }); + updatePlugin('adapt-contrib-slider - update to v3.1.0', { name: 'adapt-contrib-slider', version: 'v3.1.0', framework: '>=5.19.1' }); + + testSuccessWhere('non/configured slider component with course._globals', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _id: 'c-100', _component: 'slider', _feedback: { _partlyCorrect: {} } }, + { _id: 'c-105', _component: 'slider', _feedback: { _partlyCorrect: { final: 'final', notFinal: 'notFinal' } } }, + { _id: 'c-110', _component: 'slider', _feedback: {} }, + { _type: 'course', _globals: { _components: { _slider: {} } } } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _component: 'other' }, + { _type: 'course' } + ] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.4.0' }] + }); }); -describe('adapt-contrib-slider - v3.1.0-alpha.1 > v3.2.0', async () => { +describe('adapt-contrib-slider - v3.1.0 > v3.2.0', async () => { let course, courseConfidenceSliderGlobals, sliders; + const ariaCorrectAnswer = 'The correct answer is {{{correctAnswer}}}'; + const ariaCorrectAnswerRange = 'The correct answer is any value from {{{bottom}}} to {{{top}}}'; + const ariaUserAnswer = 'The answer you chose was {{{userAnswer}}}'; whereFromPlugin('adapt-contrib-slider - from v3.2.0', { name: 'adapt-contrib-slider', version: '<3.2.0' }); @@ -40,62 +62,73 @@ describe('adapt-contrib-slider - v3.1.0-alpha.1 > v3.2.0', async () => { return sliders.length; }); - /** - * * Add JSON field to globals and set attribute - */ - mutateContent('adapt-contrib-slider - add ariaCorrectAnswer to globals', async (content) => { + mutateContent('Narrative - add globals if missing', async (content) => { course = getCourse(); if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); courseConfidenceSliderGlobals = course._globals._components._slider; - - courseConfidenceSliderGlobals.ariaCorrectAnswer = 'The correct answer is {{{correctAnswer}}}'; - return true; }); - checkContent('adapt-contrib-slider - check globals ariaCorrectAnswer attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.ariaCorrectAnswer === 'The correct answer is {{{correctAnswer}}}'; - if (!isValid) throw new Error('adapt-contrib-slider - globals ariaCorrectAnswer attribute not added.'); + mutateContent('adapt-contrib-slider - add ariaCorrectAnswer to globals', async (content) => { + courseConfidenceSliderGlobals.ariaCorrectAnswer = ariaCorrectAnswer; return true; }); - /** - * * Add JSON field to globals and set attribute - */ mutateContent('adapt-contrib-slider - add ariaCorrectAnswerRange to globals', async (content) => { - course = getCourse(); - if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); - courseConfidenceSliderGlobals = course._globals._components._slider; - - courseConfidenceSliderGlobals.ariaCorrectAnswerRange = 'The correct answer is any value from {{{bottom}}} to {{{top}}}'; - + courseConfidenceSliderGlobals.ariaCorrectAnswerRange = ariaCorrectAnswerRange; return true; }); - checkContent('adapt-contrib-slider - check globals ariaCorrectAnswerRange attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.ariaCorrectAnswerRange === 'The correct answer is any value from {{{bottom}}} to {{{top}}}'; - if (!isValid) throw new Error('adapt-contrib-slider - globals ariaCorrectAnswerRange attribute not added.'); + mutateContent('adapt-contrib-slider - add ariaUserAnswer to globals', async (content) => { + courseConfidenceSliderGlobals.ariaUserAnswer = ariaUserAnswer; return true; }); - /** - * * Add JSON field to globals and set attribute - */ - mutateContent('adapt-contrib-slider - add ariaUserAnswer to globals', async (content) => { - course = getCourse(); - if (!_.has(course, '_globals._components._slider')) _.set(course, '_globals._components._slider', {}); - courseConfidenceSliderGlobals = course._globals._components._slider; - - courseConfidenceSliderGlobals.ariaUserAnswer = 'The answer you chose was {{{userAnswer}}}'; + checkContent('adapt-contrib-slider - check globals ariaCorrectAnswer attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.ariaCorrectAnswer === ariaCorrectAnswer; + if (!isValid) throw new Error('adapt-contrib-slider - globals ariaCorrectAnswer attribute not added.'); + return true; + }); + checkContent('adapt-contrib-slider - check globals ariaCorrectAnswerRange attribute', async (content) => { + const isValid = courseConfidenceSliderGlobals.ariaCorrectAnswerRange === ariaCorrectAnswerRange; + if (!isValid) throw new Error('adapt-contrib-slider - globals ariaCorrectAnswerRange attribute not added.'); return true; }); checkContent('adapt-contrib-slider - check globals ariaUserAnswer attribute', async (content) => { - const isValid = courseConfidenceSliderGlobals.ariaUserAnswer === 'The answer you chose was {{{userAnswer}}}'; + const isValid = courseConfidenceSliderGlobals.ariaUserAnswer === ariaUserAnswer; if (!isValid) throw new Error('adapt-contrib-slider - globals ariaUserAnswer attribute not added.'); return true; }); updatePlugin('adapt-contrib-slider - update to v3.2.0', { name: 'adapt-contrib-slider', version: '3.2.0', framework: '>=5.5.0' }); + + testSuccessWhere('non/configured slider component with course._globals', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _type: 'course', _globals: { _components: { _slider: {} } } } + ] + }); + + testSuccessWhere('non/configured slider component empty course', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _type: 'course' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.3.0' }], + content: [ + { _component: 'other' }, + { _type: 'course' } + ] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '2.4.0' }] + }); }); diff --git a/migrations/v4.js b/migrations/v4.js index 6cee710..1581e6f 100644 --- a/migrations/v4.js +++ b/migrations/v4.js @@ -1,4 +1,4 @@ -import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getComponents } from 'adapt-migrations'; +import { describe, whereContent, whereFromPlugin, mutateContent, checkContent, updatePlugin, getComponents, testStopWhere, testSuccessWhere } from 'adapt-migrations'; describe('adapt-contrib-slider - v3.2.0 > v4.2.1', async () => { let sliders; @@ -10,9 +10,6 @@ describe('adapt-contrib-slider - v3.2.0 > v4.2.1', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider.ariaQuestion', async () => { sliders.forEach(slider => { slider.ariaQuestion = ''; @@ -27,6 +24,26 @@ describe('adapt-contrib-slider - v3.2.0 > v4.2.1', async () => { }); updatePlugin('adapt-contrib-slider - update to v4.2.1', { name: 'adapt-contrib-slider', version: 'v4.2.1', framework: '>=5.19.1' }); + + testSuccessWhere('non/configured slider component with course._globals', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.2.0' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.2.0' }], + content: [ + { _component: 'other' }, + { _type: 'course' } + ] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.2.1' }] + }); }); describe('adapt-contrib-slider - v4.2.1 > v4.3.6', async () => { @@ -39,9 +56,6 @@ describe('adapt-contrib-slider - v4.2.1 > v4.3.6', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider.scaleStepPrefix', async () => { sliders.forEach(slider => { slider.scaleStepPrefix = ''; @@ -49,15 +63,6 @@ describe('adapt-contrib-slider - v4.2.1 > v4.3.6', async () => { return true; }); - checkContent('adapt-contrib-slider - check slider.scaleStepPrefix attribute', async () => { - const isValid = sliders.every(({ scaleStepPrefix }) => scaleStepPrefix === ''); - if (!isValid) throw new Error('adapt-contrib-slider - scaleStepPrefix not added to every instance of slider'); - return true; - }); - - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider.scaleStepSuffix', async () => { sliders.forEach(slider => { slider.scaleStepSuffix = ''; @@ -65,6 +70,12 @@ describe('adapt-contrib-slider - v4.2.1 > v4.3.6', async () => { return true; }); + checkContent('adapt-contrib-slider - check slider.scaleStepPrefix attribute', async () => { + const isValid = sliders.every(({ scaleStepPrefix }) => scaleStepPrefix === ''); + if (!isValid) throw new Error('adapt-contrib-slider - scaleStepPrefix not added to every instance of slider'); + return true; + }); + checkContent('adapt-contrib-slider - check slider.scaleStepSuffix attribute', async () => { const isValid = sliders.every(({ scaleStepSuffix }) => scaleStepSuffix === ''); if (!isValid) throw new Error('adapt-contrib-slider - scaleStepSuffix not added to every instance of slider'); @@ -72,6 +83,26 @@ describe('adapt-contrib-slider - v4.2.1 > v4.3.6', async () => { }); updatePlugin('adapt-contrib-slider - update to v4.3.6', { name: 'adapt-contrib-slider', version: 'v4.3.6', framework: '>=5.19.1' }); + + testSuccessWhere('non/configured slider component with course._globals', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.3.5' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.3.5' }], + content: [ + { _component: 'other' }, + { _type: 'course' } + ] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.3.6' }] + }); }); describe('adapt-contrib-slider - v4.3.6 > v4.3.9', async () => { @@ -84,9 +115,6 @@ describe('adapt-contrib-slider - v4.3.6 > v4.3.9', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider.ariaScaleName', async () => { sliders.forEach(slider => { slider.ariaScaleName = ''; @@ -113,9 +141,6 @@ describe('adapt-contrib-slider - v4.3.9 > v4.6.0', async () => { return sliders.length; }); - /** - * * Add JSON field to component and set attribute. - */ mutateContent('adapt-contrib-slider - add slider._canShowCorrectness', async () => { sliders.forEach(slider => { slider._canShowCorrectness = false; @@ -130,4 +155,24 @@ describe('adapt-contrib-slider - v4.3.9 > v4.6.0', async () => { }); updatePlugin('adapt-contrib-slider - update to v4.6.0', { name: 'adapt-contrib-slider', version: 'v4.6.0', framework: '>=5.19.1' }); + + testSuccessWhere('correct version slider component', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.3.5' }], + content: [ + { _id: 'c-100', _component: 'slider' }, + { _id: 'c-105', _component: 'slider' } + ] + }); + + testStopWhere('no slider components', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.3.5' }], + content: [ + { _component: 'other' }, + { _type: 'course' } + ] + }); + + testStopWhere('incorrect version', { + fromPlugins: [{ name: 'adapt-contrib-slider', version: '4.3.6' }] + }); });