153 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import test from 'tape';
 | 
						|
import {
 | 
						|
  filterComingSoonBetaChallenge,
 | 
						|
  filterComingSoonBetaFromEntities
 | 
						|
} from './utils.js';
 | 
						|
 | 
						|
 | 
						|
test.test('filterComingSoonBetaChallenge', t => {
 | 
						|
  t.plan(4);
 | 
						|
  t.test('should return true when not coming-soon/beta', t => {
 | 
						|
    let isDev;
 | 
						|
    t.ok(filterComingSoonBetaChallenge(isDev, {}));
 | 
						|
    t.ok(filterComingSoonBetaChallenge(true, {}));
 | 
						|
    t.end();
 | 
						|
  });
 | 
						|
  t.test('should return false when isComingSoon', t => {
 | 
						|
    let isDev;
 | 
						|
    t.notOk(filterComingSoonBetaChallenge(isDev, { isComingSoon: true }));
 | 
						|
    t.end();
 | 
						|
  });
 | 
						|
  t.test('should return false when isBeta', t => {
 | 
						|
    let isDev;
 | 
						|
    t.notOk(filterComingSoonBetaChallenge(isDev, { isBeta: true }));
 | 
						|
    t.end();
 | 
						|
  });
 | 
						|
  t.test('should always return true when in dev', t => {
 | 
						|
    let isDev = true;
 | 
						|
    t.ok(filterComingSoonBetaChallenge(isDev, { isBeta: true }));
 | 
						|
    t.ok(filterComingSoonBetaChallenge(isDev, { isComingSoon: true }));
 | 
						|
    t.ok(filterComingSoonBetaChallenge(
 | 
						|
      isDev,
 | 
						|
      { isBeta: true, isCompleted: true }
 | 
						|
    ));
 | 
						|
    t.end();
 | 
						|
  });
 | 
						|
});
 | 
						|
test.test('filterComingSoonBetaFromEntities', t => {
 | 
						|
  t.plan(2);
 | 
						|
  t.test('should filter isBeta|coming-soon by default', t => {
 | 
						|
    t.plan(4);
 | 
						|
    const normalChallenge = { dashedName: 'normal-challenge' };
 | 
						|
    const entities = {
 | 
						|
      challenge: {
 | 
						|
        'coming-soon': {
 | 
						|
          isComingSoon: true
 | 
						|
        },
 | 
						|
        'is-beta': {
 | 
						|
          isBeta: true
 | 
						|
        },
 | 
						|
        [normalChallenge.dashedName]: normalChallenge
 | 
						|
      },
 | 
						|
      block: {
 | 
						|
        'coming-soon': {
 | 
						|
          dashedName: 'coming-soon',
 | 
						|
          challenges: ['coming-soon']
 | 
						|
        },
 | 
						|
        'is-beta': {
 | 
						|
          dashedName: 'is-beta',
 | 
						|
          challenges: ['is-beta']
 | 
						|
        },
 | 
						|
        normal: {
 | 
						|
          dashedName: 'normal',
 | 
						|
          challenges: [normalChallenge.dashedName]
 | 
						|
        }
 | 
						|
      }
 | 
						|
    };
 | 
						|
 | 
						|
    const actual = filterComingSoonBetaFromEntities(entities);
 | 
						|
    t.isEqual(
 | 
						|
      Object.keys(actual.challenge).length,
 | 
						|
      1,
 | 
						|
      'did not filter the correct amount of challenges'
 | 
						|
    );
 | 
						|
    t.isEqual(
 | 
						|
      actual.challenge[normalChallenge.dashedName],
 | 
						|
      normalChallenge,
 | 
						|
      'did not return the correct challenge'
 | 
						|
    );
 | 
						|
 | 
						|
    const challengesFromBlocks = [];
 | 
						|
    Object.keys(actual.block)
 | 
						|
      .forEach(block => {
 | 
						|
        const challenges = actual.block[block].challenges;
 | 
						|
        challenges.forEach(challenge => challengesFromBlocks.push(challenge));
 | 
						|
      });
 | 
						|
    t.isEqual(
 | 
						|
      challengesFromBlocks.length,
 | 
						|
      1,
 | 
						|
      'did not filter the correct amount of challenges from blocks'
 | 
						|
    );
 | 
						|
    t.isEqual(
 | 
						|
      challengesFromBlocks[0],
 | 
						|
      normalChallenge.dashedName,
 | 
						|
      'did not return the correct challenge from blocks'
 | 
						|
    );
 | 
						|
  });
 | 
						|
  t.test('should not filter isBeta|coming-soon when isDev', t => {
 | 
						|
    t.plan(2);
 | 
						|
    const normalChallenge = { dashedName: 'normal-challenge' };
 | 
						|
    const entities = {
 | 
						|
      challenge: {
 | 
						|
        'coming-soon': {
 | 
						|
          dashedName: 'coming-soon',
 | 
						|
          isComingSoon: true
 | 
						|
        },
 | 
						|
        'is-beta': {
 | 
						|
          dashedName: 'is-beta',
 | 
						|
          isBeta: true
 | 
						|
        },
 | 
						|
        'is-both': {
 | 
						|
          dashedName: 'is-both',
 | 
						|
          isBeta: true
 | 
						|
        },
 | 
						|
        [normalChallenge.dashedName]: normalChallenge
 | 
						|
      },
 | 
						|
      block: {
 | 
						|
        'coming-soon': {
 | 
						|
          dashedName: 'coming-soon',
 | 
						|
          challenges: ['coming-soon']
 | 
						|
        },
 | 
						|
        'is-beta': {
 | 
						|
          dashedName: 'is-beta',
 | 
						|
          challenges: ['is-beta']
 | 
						|
        },
 | 
						|
        'is-both': {
 | 
						|
          dashedName: 'is-both',
 | 
						|
          challenges: ['is-both']
 | 
						|
        },
 | 
						|
        normal: {
 | 
						|
          dashedName: 'normal',
 | 
						|
          challenges: [normalChallenge.dashedName]
 | 
						|
        }
 | 
						|
      }
 | 
						|
    };
 | 
						|
    const actual = filterComingSoonBetaFromEntities(entities, true);
 | 
						|
    t.isEqual(
 | 
						|
      Object.keys(actual.challenge).length,
 | 
						|
      4,
 | 
						|
      'filtered challenges'
 | 
						|
    );
 | 
						|
    let challengesFromBlocksCount = 0;
 | 
						|
    Object.keys(actual.block)
 | 
						|
      .forEach(block => {
 | 
						|
        challengesFromBlocksCount += actual.block[block].challenges.length;
 | 
						|
      });
 | 
						|
    t.isEqual(
 | 
						|
      challengesFromBlocksCount,
 | 
						|
      4,
 | 
						|
      'filtered challenges from blocks'
 | 
						|
    );
 | 
						|
  });
 | 
						|
});
 |