fix: Add tests for redirectToLearn
This commit is contained in:
committed by
mrugesh mohapatra
parent
953e1b2e11
commit
014c26cd4e
@ -16,7 +16,7 @@ import { homeLocation } from '../../../config/env';
|
|||||||
|
|
||||||
import { ifNoUserSend } from '../utils/middleware';
|
import { ifNoUserSend } from '../utils/middleware';
|
||||||
import { dasherize } from '../utils';
|
import { dasherize } from '../utils';
|
||||||
import pathMigrations from '../resources/pathMigration.json';
|
import _pathMigrations from '../resources/pathMigration.json';
|
||||||
import { fixCompletedChallengeItem } from '../../common/utils';
|
import { fixCompletedChallengeItem } from '../../common/utils';
|
||||||
|
|
||||||
const log = debug('fcc:boot:challenges');
|
const log = debug('fcc:boot:challenges');
|
||||||
@ -25,6 +25,7 @@ export default async function bootChallenge(app, done) {
|
|||||||
const send200toNonUser = ifNoUserSend(true);
|
const send200toNonUser = ifNoUserSend(true);
|
||||||
const api = app.loopback.Router();
|
const api = app.loopback.Router();
|
||||||
const router = app.loopback.Router();
|
const router = app.loopback.Router();
|
||||||
|
const redirectToLearn = createRedirectToLearn(_pathMigrations);
|
||||||
const challengeUrlResolver = await createChallengeUrlResolver(app);
|
const challengeUrlResolver = await createChallengeUrlResolver(app);
|
||||||
const redirectToCurrentChallenge = createRedirectToCurrentChallenge(
|
const redirectToCurrentChallenge = createRedirectToCurrentChallenge(
|
||||||
challengeUrlResolver
|
challengeUrlResolver
|
||||||
@ -352,11 +353,17 @@ export function createRedirectToCurrentChallenge(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function redirectToLearn(req, res) {
|
export function createRedirectToLearn(
|
||||||
const maybeChallenge = last(req.path.split('/'));
|
pathMigrations,
|
||||||
if (maybeChallenge in pathMigrations) {
|
base = homeLocation,
|
||||||
const redirectPath = pathMigrations[maybeChallenge];
|
learn = learnURL
|
||||||
return res.status(302).redirect(`${learnURL}${redirectPath}`);
|
) {
|
||||||
}
|
return function redirectToLearn(req, res) {
|
||||||
return res.status(302).redirect(learnURL);
|
const maybeChallenge = last(req.path.split('/'));
|
||||||
|
if (maybeChallenge in pathMigrations) {
|
||||||
|
const redirectPath = pathMigrations[maybeChallenge];
|
||||||
|
return res.status(302).redirect(`${base}${redirectPath}`);
|
||||||
|
}
|
||||||
|
return res.status(302).redirect(learn);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,8 @@ import {
|
|||||||
createChallengeUrlResolver,
|
createChallengeUrlResolver,
|
||||||
createRedirectToCurrentChallenge,
|
createRedirectToCurrentChallenge,
|
||||||
getFirstChallenge,
|
getFirstChallenge,
|
||||||
isValidChallengeCompletion
|
isValidChallengeCompletion,
|
||||||
|
createRedirectToLearn
|
||||||
} from '../boot/challenge';
|
} from '../boot/challenge';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -22,7 +23,8 @@ import {
|
|||||||
mockGetFirstChallenge,
|
mockGetFirstChallenge,
|
||||||
firstChallengeQuery,
|
firstChallengeQuery,
|
||||||
mockCompletedChallenge,
|
mockCompletedChallenge,
|
||||||
mockCompletedChallenges
|
mockCompletedChallenges,
|
||||||
|
mockPathMigrationMap
|
||||||
} from './fixtures';
|
} from './fixtures';
|
||||||
|
|
||||||
describe('boot/challenge', () => {
|
describe('boot/challenge', () => {
|
||||||
@ -372,5 +374,32 @@ describe('boot/challenge', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
xdescribe('redirectToLearn');
|
describe('redirectToLearn', () => {
|
||||||
|
const mockHome = 'https://example.com';
|
||||||
|
const mockLearn = 'https://example.com/learn';
|
||||||
|
const redirectToLearn = createRedirectToLearn(
|
||||||
|
mockPathMigrationMap,
|
||||||
|
mockHome,
|
||||||
|
mockLearn
|
||||||
|
);
|
||||||
|
|
||||||
|
it('redirects to learn by default', () => {
|
||||||
|
const req = mockReq({ path: '/challenges' });
|
||||||
|
const res = mockRes();
|
||||||
|
|
||||||
|
redirectToLearn(req, res);
|
||||||
|
|
||||||
|
expect(res.redirect.calledWith(mockLearn)).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('maps to the correct redirect if the path matches a challenge', () => {
|
||||||
|
const req = mockReq({ path: '/challenges/challenge-two' });
|
||||||
|
const res = mockRes();
|
||||||
|
const expectedRedirect =
|
||||||
|
'https://example.com/learn/superblock/block/challenge-two';
|
||||||
|
redirectToLearn(req, res);
|
||||||
|
|
||||||
|
expect(res.redirect.calledWith(expectedRedirect)).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -81,3 +81,8 @@ export const firstChallengeQuery = {
|
|||||||
// first challenge of the first block of the first superBlock
|
// first challenge of the first block of the first superBlock
|
||||||
where: { challengeOrder: 0, superOrder: 1, order: 0 }
|
where: { challengeOrder: 0, superOrder: 1, order: 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const mockPathMigrationMap = {
|
||||||
|
'challenge-one': '/learn/superblock/block/challenge-one',
|
||||||
|
'challenge-two': '/learn/superblock/block/challenge-two'
|
||||||
|
};
|
||||||
|
Reference in New Issue
Block a user