They should be handled either by nginx or by the client. Turned out a lot of code, including the path migration, existed to support them. Hence the large number of removals
		
			
				
	
	
		
			210 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* global jest*/
 | 
						|
import { isEqual } from 'lodash';
 | 
						|
import { isEmail } from 'validator';
 | 
						|
 | 
						|
export const firstChallengeUrl = '/learn/the/first/challenge';
 | 
						|
export const requestedChallengeUrl = '/learn/my/actual/challenge';
 | 
						|
 | 
						|
export const mockChallenge = {
 | 
						|
  id: '123abc',
 | 
						|
  block: 'actual',
 | 
						|
  superBlock: 'my',
 | 
						|
  dashedName: 'challenge'
 | 
						|
};
 | 
						|
 | 
						|
export const mockFirstChallenge = {
 | 
						|
  id: '456def',
 | 
						|
  block: 'first',
 | 
						|
  superBlock: 'the',
 | 
						|
  dashedName: 'challenge',
 | 
						|
  challengeOrder: 0,
 | 
						|
  superOrder: 1,
 | 
						|
  order: 0
 | 
						|
};
 | 
						|
 | 
						|
export const mockCompletedChallenge = {
 | 
						|
  id: '890xyz',
 | 
						|
  challengeType: 0,
 | 
						|
  files: [
 | 
						|
    {
 | 
						|
      contents: 'file contents',
 | 
						|
      key: 'indexfile',
 | 
						|
      name: 'index',
 | 
						|
      path: 'index.file',
 | 
						|
      ext: 'file'
 | 
						|
    }
 | 
						|
  ],
 | 
						|
  completedDate: Date.now()
 | 
						|
};
 | 
						|
 | 
						|
export const mockCompletedChallenges = [
 | 
						|
  {
 | 
						|
    id: 'bd7123c8c441eddfaeb5bdef',
 | 
						|
    completedDate: 1538052380328.0
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: '587d7dbd367417b2b2512bb4',
 | 
						|
    completedDate: 1547472893032.0,
 | 
						|
    files: []
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: 'aaa48de84e1ecc7c742e1124',
 | 
						|
    completedDate: 1541678430790.0,
 | 
						|
    files: [
 | 
						|
      {
 | 
						|
        contents:
 | 
						|
          // eslint-disable-next-line max-len
 | 
						|
          "function palindrome(str) {\n  const clean = str.replace(/[\\W_]/g, '').toLowerCase()\n  const revStr = clean.split('').reverse().join('');\n  return clean === revStr;\n}\n\n\n\npalindrome(\"eye\");\n",
 | 
						|
        ext: 'js',
 | 
						|
        path: 'index.js',
 | 
						|
        name: 'index',
 | 
						|
        key: 'indexjs'
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
    id: '5a24c314108439a4d4036164',
 | 
						|
    completedDate: 1543845124143.0,
 | 
						|
    files: []
 | 
						|
  }
 | 
						|
];
 | 
						|
export const mockUserID = '5c7d892aff9777c8b1c1a95e';
 | 
						|
 | 
						|
export const createUserMockFn = jest.fn();
 | 
						|
export const createDonationMockFn = jest.fn();
 | 
						|
export const updateDonationAttr = jest.fn();
 | 
						|
export const updateUserAttr = jest.fn();
 | 
						|
export const mockUser = {
 | 
						|
  id: mockUserID,
 | 
						|
  username: 'camperbot',
 | 
						|
  currentChallengeId: '123abc',
 | 
						|
  email: 'donor@freecodecamp.com',
 | 
						|
  timezone: 'UTC',
 | 
						|
  completedChallenges: mockCompletedChallenges,
 | 
						|
  progressTimestamps: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
 | 
						|
  isDonating: true,
 | 
						|
  donationEmails: ['donor@freecodecamp.com', 'donor@freecodecamp.com'],
 | 
						|
  createDonation: donation => {
 | 
						|
    createDonationMockFn(donation);
 | 
						|
    return mockObservable;
 | 
						|
  },
 | 
						|
  updateAttributes: updateUserAttr
 | 
						|
};
 | 
						|
 | 
						|
const mockObservable = {
 | 
						|
  toPromise: () => Promise.resolve('result')
 | 
						|
};
 | 
						|
 | 
						|
export const mockDonation = {
 | 
						|
  id: '5e5f8eda5ed7be2b54e18718',
 | 
						|
  email: 'donor@freecodecamp.com',
 | 
						|
  provider: 'paypal',
 | 
						|
  amount: 500,
 | 
						|
  duration: 'month',
 | 
						|
  startDate: {
 | 
						|
    _when: '2018-11-01T00:00:00.000Z',
 | 
						|
    _date: '2018-11-01T00:00:00.000Z'
 | 
						|
  },
 | 
						|
  subscriptionId: 'I-BA1ATBNF8T3P',
 | 
						|
  userId: mockUserID,
 | 
						|
  updateAttributes: updateDonationAttr
 | 
						|
};
 | 
						|
 | 
						|
export function createNewUserFromEmail(email) {
 | 
						|
  const newMockUser = mockUser;
 | 
						|
  newMockUser.email = email;
 | 
						|
  newMockUser.username = 'camberbot2';
 | 
						|
  newMockUser.ID = '5c7d892aff9888c8b1c1a95e';
 | 
						|
  return newMockUser;
 | 
						|
}
 | 
						|
 | 
						|
export const mockApp = {
 | 
						|
  models: {
 | 
						|
    Donation: {
 | 
						|
      findOne(query, cb) {
 | 
						|
        return isEqual(query, matchSubscriptionIdQuery)
 | 
						|
          ? cb(null, mockDonation)
 | 
						|
          : cb(Error('No Donation'));
 | 
						|
      }
 | 
						|
    },
 | 
						|
    User: {
 | 
						|
      findById(id, cb) {
 | 
						|
        if (id === mockUser.id) {
 | 
						|
          return cb(null, mockUser);
 | 
						|
        }
 | 
						|
        return cb(Error('No user'));
 | 
						|
      },
 | 
						|
      findOne(query, cb) {
 | 
						|
        if (isEqual(query, matchEmailQuery) || isEqual(query, matchUserIdQuery))
 | 
						|
          return cb(null, mockUser);
 | 
						|
        return cb(null, null);
 | 
						|
      },
 | 
						|
      create(query, cb) {
 | 
						|
        if (!isEmail(query.email)) return cb(new Error('email not valid'));
 | 
						|
        else if (query.email === mockUser.email)
 | 
						|
          return cb(new Error('user exist'));
 | 
						|
        createUserMockFn();
 | 
						|
        return Promise.resolve(createNewUserFromEmail(query.email));
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
export const mockAllChallenges = [mockFirstChallenge, mockChallenge];
 | 
						|
 | 
						|
export const mockGetFirstChallenge = () => firstChallengeUrl;
 | 
						|
 | 
						|
export const matchEmailQuery = {
 | 
						|
  where: { email: mockUser.email }
 | 
						|
};
 | 
						|
export const matchSubscriptionIdQuery = {
 | 
						|
  where: { subscriptionId: mockDonation.subscriptionId }
 | 
						|
};
 | 
						|
export const matchUserIdQuery = {
 | 
						|
  where: { id: mockUser.id }
 | 
						|
};
 | 
						|
 | 
						|
export const firstChallengeQuery = {
 | 
						|
  // first challenge of the first block of the first superBlock
 | 
						|
  where: { challengeOrder: 0, superOrder: 1, order: 0 }
 | 
						|
};
 | 
						|
 | 
						|
export const fullStackChallenges = [
 | 
						|
  {
 | 
						|
    completedDate: 1585210952511,
 | 
						|
    id: '5a553ca864b52e1d8bceea14',
 | 
						|
    challengeType: 7,
 | 
						|
    files: []
 | 
						|
  },
 | 
						|
  {
 | 
						|
    completedDate: 1585210952511,
 | 
						|
    id: '561add10cb82ac38a17513bc',
 | 
						|
    challengeType: 7,
 | 
						|
    files: []
 | 
						|
  },
 | 
						|
  {
 | 
						|
    completedDate: 1588665778679,
 | 
						|
    id: '561acd10cb82ac38a17513bc',
 | 
						|
    challengeType: 7,
 | 
						|
    files: []
 | 
						|
  },
 | 
						|
  {
 | 
						|
    completedDate: 1685210952511,
 | 
						|
    id: '561abd10cb81ac38a17513bc',
 | 
						|
    challengeType: 7,
 | 
						|
    files: []
 | 
						|
  },
 | 
						|
  {
 | 
						|
    completedDate: 1585210952511,
 | 
						|
    id: '561add10cb82ac38a17523bc',
 | 
						|
    challengeType: 7,
 | 
						|
    files: []
 | 
						|
  },
 | 
						|
  {
 | 
						|
    completedDate: 1588665778679,
 | 
						|
    id: '561add10cb82ac38a17213bc',
 | 
						|
    challengeType: 7,
 | 
						|
    files: []
 | 
						|
  }
 | 
						|
];
 |