diff --git a/src/lib/libraries/decks/index.jsx b/src/lib/libraries/decks/index.jsx index 793358cc1..65242b170 100644 --- a/src/lib/libraries/decks/index.jsx +++ b/src/lib/libraries/decks/index.jsx @@ -126,7 +126,7 @@ export default { ] } ], - urlId: 1 + urlId: 'getStarted' }, 'say-it-out-loud': { @@ -237,7 +237,7 @@ export default { ] } ], - urlId: 16 + urlId: 'animations-that-talk' }, 'cartoon-network': { @@ -348,7 +348,7 @@ export default { ] } ], - urlId: 17 + urlId: 'animate-an-adventure-game' }, 'animate-a-name': { name: ( @@ -423,7 +423,7 @@ export default { ] } ], - urlId: 2 + urlId: 'name' }, 'Make-Music': { name: ( @@ -492,7 +492,7 @@ export default { ] } ], - urlId: 3 + urlId: 'music' }, 'Make-A-Game': { name: ( @@ -578,7 +578,7 @@ export default { ] } ], - urlId: 4 + urlId: 'clicker-game' }, 'Chase-Game': { @@ -682,7 +682,7 @@ export default { ] } ], - urlId: 5 + urlId: 'chase-game' }, 'add-sprite': { name: ( @@ -712,7 +712,7 @@ export default { ] } ], - urlId: 6 + urlId: 'add-a-sprite' }, 'add-a-backdrop': { name: ( @@ -732,7 +732,7 @@ export default { 'switch-costume' ] }], - urlId: 7 + urlId: 'add-a-backdrop' }, 'change-size': { name: ( @@ -752,7 +752,7 @@ export default { 'spin-video' ] }], - urlId: 8 + urlId: 'change-size' }, 'glide-around': { name: ( @@ -772,7 +772,7 @@ export default { 'switch-costume' ] }], - urlId: 9 + urlId: 'glide-around' }, 'record-a-sound': { @@ -793,7 +793,7 @@ export default { 'switch-costume' ] }], - urlId: 10 + urlId: 'record-a-sound' }, 'spin-video': { name: ( @@ -813,7 +813,7 @@ export default { 'switch-costume' ] }], - urlId: 11 + urlId: 'make-it-spin' }, 'hide-and-show': { name: ( @@ -833,7 +833,7 @@ export default { 'switch-costume' ] }], - urlId: 12 + urlId: 'hide' }, 'switch-costume': { @@ -854,7 +854,7 @@ export default { 'add-effects' ] }], - urlId: 13 + urlId: 'animate-a-sprite' }, 'move-around-with-arrow-keys': { @@ -875,7 +875,7 @@ export default { 'switch-costume' ] }], - urlId: 14 + urlId: 'arrow-keys' }, 'add-effects': { name: ( @@ -896,6 +896,6 @@ export default { 'switch-costume' ] }], - urlId: 15 + urlId: 'add-effects' } }; diff --git a/src/lib/tutorial-from-url.js b/src/lib/tutorial-from-url.js index 3dab2f3d3..4988d9962 100644 --- a/src/lib/tutorial-from-url.js +++ b/src/lib/tutorial-from-url.js @@ -36,15 +36,11 @@ const getDeckIdFromUrlId = urlId => { */ const detectTutorialId = () => { const queryParams = queryString.parse(location.search); - const tutorialID = Number( - Array.isArray(queryParams.tutorial) ? - queryParams.tutorial[0] : - queryParams.tutorial - ); - if (!isNaN(tutorialID)) { - return getDeckIdFromUrlId(tutorialID); - } - return null; + const tutorialID = Array.isArray(queryParams.tutorial) ? + queryParams.tutorial[0] : + queryParams.tutorial; + if (typeof tutorialID === 'undefined') return null; + return getDeckIdFromUrlId(tutorialID); }; export { diff --git a/test/unit/util/tutorial-from-url.test.js b/test/unit/util/tutorial-from-url.test.js index f29cbd8cc..70ff88350 100644 --- a/test/unit/util/tutorial-from-url.test.js +++ b/test/unit/util/tutorial-from-url.test.js @@ -3,7 +3,9 @@ jest.mock('../../../src/lib/analytics.js', () => ({ })); jest.mock('../../../src/lib/libraries/decks/index.jsx', () => ({ - foo: {urlId: 1} + noUrlId: {}, + foo: {urlId: 'one'}, + noUrlIdSandwich: {} })); import {detectTutorialId} from '../../../src/lib/tutorial-from-url.js'; @@ -15,7 +17,7 @@ Object.defineProperty( ); test('returns the tutorial ID if the urlId matches', () => { - window.location.search = '?tutorial=1'; + window.location.search = '?tutorial=one'; expect(detectTutorialId()).toBe('foo'); }); @@ -29,12 +31,17 @@ test('returns null if empty template', () => { expect(detectTutorialId()).toBe(null); }); +test('returns null if no query param', () => { + window.location.search = ''; + expect(detectTutorialId()).toBe(null); +}); + test('returns null if non-numeric template', () => { window.location.search = '?tutorial=asdf'; expect(detectTutorialId()).toBe(null); }); test('takes the first of multiple', () => { - window.location.search = '?tutorial=1&tutorial=2'; + window.location.search = '?tutorial=one&tutorial=two'; expect(detectTutorialId()).toBe('foo'); });