From 64ff107b8a9cd0965a67f00fd30cded144c02fd6 Mon Sep 17 00:00:00 2001 From: Shinigami Date: Sun, 25 Feb 2024 10:36:31 +0100 Subject: refactor(random)!: remove deprecated random module (#2678) --- test/all-functional.spec.ts | 5 +- test/modules/helpers.spec.ts | 2 +- test/modules/random.spec.ts | 461 ------------------------------------------- 3 files changed, 2 insertions(+), 466 deletions(-) delete mode 100644 test/modules/random.spec.ts (limited to 'test') diff --git a/test/all-functional.spec.ts b/test/all-functional.spec.ts index 80b1fece..b1819428 100644 --- a/test/all-functional.spec.ts +++ b/test/all-functional.spec.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from 'vitest'; -import type { Faker, RandomModule, allLocales } from '../src'; +import type { Faker, allLocales } from '../src'; import { allFakers, fakerEN } from '../src'; import { keys } from '../src/internal/keys'; @@ -55,9 +55,6 @@ const BROKEN_LOCALE_METHODS = { zipCode: ['en_HK'], zipCodeByState: ['en_HK'], }, - random: { - locale: '*', // locale() has been pseudo removed - } as SkipConfig, string: { fromCharacters: '*', }, diff --git a/test/modules/helpers.spec.ts b/test/modules/helpers.spec.ts index 08dc2b61..6163a0d2 100644 --- a/test/modules/helpers.spec.ts +++ b/test/modules/helpers.spec.ts @@ -993,7 +993,7 @@ describe('helpers', () => { }); it('replaces a token with a random value for a method with an object parameter', () => { - const actual = faker.helpers.fake('{{random.alpha({"count": 3})}}'); + const actual = faker.helpers.fake('{{string.alpha({"length": 3})}}'); expect(actual).toMatch(/^[a-z]{3}$/i); }); diff --git a/test/modules/random.spec.ts b/test/modules/random.spec.ts deleted file mode 100644 index 94de137e..00000000 --- a/test/modules/random.spec.ts +++ /dev/null @@ -1,461 +0,0 @@ -import { describe, expect, it } from 'vitest'; -import { Faker, FakerError, faker, fakerZH_CN } from '../../src'; -import { seededTests } from '../support/seeded-runs'; -import { times } from './../support/times'; - -const NON_SEEDED_BASED_RUN = 5; - -describe('random', () => { - seededTests(faker, 'random', (t) => { - t.it('word'); - t.skip('locale' as 'word'); // locale() has been pseudo removed - - t.describeEach( - 'alpha', - 'alphaNumeric', - 'numeric' - )((t) => { - t.it('noArgs').it('with length', 5); - }); - - t.describe('words', (t) => { - t.it('noArgs') - .it('with length', 5) - .it('with length range', { min: 1, max: 5 }); - }); - }); - - describe.each(times(NON_SEEDED_BASED_RUN).map(() => faker.seed()))( - 'random seeded tests for seed %i', - () => { - describe('word', () => { - const bannedChars = [ - '!', - '#', - '%', - '&', - '*', - ')', - '(', - '+', - '=', - '.', - '<', - '>', - '{', - '}', - '[', - ']', - ':', - ';', - "'", - '"', - '_', - '-', - ]; - - it('should return a random word', () => { - const actual = faker.random.word(); - - expect(actual).toBeTruthy(); - expect(actual).toBeTypeOf('string'); - }); - - it.each(times(50))( - 'should only contain a word without undesirable non-alpha characters (run %i)', - () => { - const actual = faker.random.word(); - - expect(actual).not.satisfy((word: string) => - bannedChars.some((char) => word.includes(char)) - ); - } - ); - - it.each(times(50))( - 'should only contain a word without undesirable non-alpha characters, locale=zh_CN (run %i)', - () => { - const actual = fakerZH_CN.random.word(); - - expect(actual).not.satisfy((word: string) => - bannedChars.some((char) => word.includes(char)) - ); - } - ); - - it('should throw error if no data are available', () => { - const faker = new Faker({ - locale: [{ metadata: { title: 'custom' } }], - }); - - expect(() => faker.random.word()).toThrow(); - }); - }); - - describe('words', () => { - it('should return random words', () => { - const actual = faker.random.words(); - - expect(actual).toBeTruthy(); - expect(actual).toBeTypeOf('string'); - - const words = actual.split(' '); - expect(words.length).toBeGreaterThanOrEqual(1); - expect(words.length).toBeLessThanOrEqual(3); - }); - - it('should return 5 random words', () => { - const actual = faker.random.words(5); - - expect(actual).toBeTruthy(); - expect(actual).toBeTypeOf('string'); - - const words = actual.split(' '); - expect(words).toHaveLength(5); - }); - - it('should return 3-5 random words', () => { - const actual = faker.random.words({ min: 3, max: 5 }); - - expect(actual).toBeTruthy(); - expect(actual).toBeTypeOf('string'); - - const words = actual.split(' '); - expect(words.length).toBeGreaterThanOrEqual(3); - expect(words.length).toBeLessThanOrEqual(5); - }); - }); - - describe('alpha', () => { - it('should return single letter when no count provided', () => { - const actual = faker.random.alpha(); - - expect(actual).toHaveLength(1); - }); - - it('should return mixed letter when no option provided', () => { - const actual = faker.random.alpha(); - - expect(actual).toMatch(/^[a-z]$/i); - }); - - it.each([ - ['upper', /^[A-Z]{250}$/], - ['lower', /^[a-z]{250}$/], - ['mixed', /^[a-zA-Z]{250}$/], - ] as const)('should return %s-case', (casing, pattern) => { - const actual = faker.random.alpha({ count: 250, casing }); - expect(actual).toMatch(pattern); - }); - - it('should generate many random letters', () => { - const actual = faker.random.alpha(5); - - expect(actual).toHaveLength(5); - }); - - it.each([0, -1, -100])( - 'should return empty string when length is <= 0', - (length) => { - const actual = faker.random.alpha(length); - - expect(actual).toBe(''); - } - ); - - it('should be able to ban some characters', () => { - const actual = faker.random.alpha({ - count: 5, - bannedChars: ['a', 'p', 'A', 'P'], - }); - - expect(actual).toHaveLength(5); - expect(actual).toMatch(/^[b-oq-z]{5}$/i); - }); - - it('should be able to ban some characters via string', () => { - const actual = faker.random.alpha({ - count: 5, - bannedChars: 'apAP', - }); - - expect(actual).toHaveLength(5); - expect(actual).toMatch(/^[b-oq-z]{5}$/i); - }); - - it('should be able handle mistake in banned characters array', () => { - const alphaText = faker.random.alpha({ - count: 5, - bannedChars: ['a', 'a', 'p', 'A', 'A', 'P'], - }); - - expect(alphaText).toHaveLength(5); - expect(alphaText).toMatch(/^[b-oq-z]{5}$/i); - }); - - it('should throw if all possible characters being banned', () => { - const bannedChars = [ - ...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', - ]; - expect(() => - faker.random.alpha({ - count: 5, - bannedChars, - }) - ).toThrow( - new FakerError( - 'Unable to generate string: No characters to select from.' - ) - ); - }); - - it('should not mutate the input object', () => { - const input: { - count: number; - casing: 'mixed'; - bannedChars: string[]; - } = Object.freeze({ - count: 5, - casing: 'mixed', - bannedChars: ['a', '%'], - }); - - expect(() => faker.random.alpha(input)).not.toThrow(); - expect(input.bannedChars).toEqual(['a', '%']); - }); - }); - - describe('alphaNumeric', () => { - it('should generate single character when no additional argument was provided', () => { - const actual = faker.random.alphaNumeric(); - - expect(actual).toHaveLength(1); - }); - - it.each([ - ['upper', /^[A-Z0-9]{250}$/], - ['lower', /^[a-z0-9]{250}$/], - ['mixed', /^[a-zA-Z0-9]{250}$/], - ] as const)('should return %s-case', (casing, pattern) => { - const actual = faker.random.alphaNumeric(250, { casing }); - expect(actual).toMatch(pattern); - }); - - it('should generate many random characters', () => { - const actual = faker.random.alphaNumeric(5); - - expect(actual).toHaveLength(5); - }); - - it.each([0, -1, -100])( - 'should return empty string when length is <= 0', - (length) => { - const actual = faker.random.alphaNumeric(length); - - expect(actual).toBe(''); - } - ); - - it('should be able to ban all alphabetic characters', () => { - const bannedChars = [...'abcdefghijklmnopqrstuvwxyz']; - const alphaText = faker.random.alphaNumeric(5, { - bannedChars, - }); - - expect(alphaText).toHaveLength(5); - for (const bannedChar of bannedChars) { - expect(alphaText).not.includes(bannedChar); - } - }); - - it('should be able to ban all alphabetic characters via string', () => { - const bannedChars = 'abcdefghijklmnopqrstuvwxyz'; - const alphaText = faker.random.alphaNumeric(5, { - bannedChars, - }); - - expect(alphaText).toHaveLength(5); - for (const bannedChar of bannedChars) { - expect(alphaText).not.includes(bannedChar); - } - }); - - it('should be able to ban all numeric characters', () => { - const bannedChars = [...'0123456789']; - const alphaText = faker.random.alphaNumeric(5, { - bannedChars, - }); - - expect(alphaText).toHaveLength(5); - for (const bannedChar of bannedChars) { - expect(alphaText).not.includes(bannedChar); - } - }); - - it('should be able to ban all numeric characters via string', () => { - const bannedChars = '0123456789'; - const alphaText = faker.random.alphaNumeric(5, { - bannedChars, - }); - - expect(alphaText).toHaveLength(5); - for (const bannedChar of bannedChars) { - expect(alphaText).not.includes(bannedChar); - } - }); - - it('should be able to handle mistake in banned characters array', () => { - const alphaText = faker.random.alphaNumeric(5, { - bannedChars: ['a', 'p', 'a'], - casing: 'lower', - }); - - expect(alphaText).toHaveLength(5); - expect(alphaText).toMatch(/^[0-9b-oq-z]{5}$/); - }); - - it('should throw if all possible characters being banned', () => { - const bannedChars = [...'abcdefghijklmnopqrstuvwxyz0123456789']; - expect(() => - faker.random.alphaNumeric(5, { - bannedChars, - casing: 'lower', - }) - ).toThrow( - new FakerError( - 'Unable to generate string: No characters to select from.' - ) - ); - }); - - it('should throw if all possible characters being banned via string', () => { - const bannedChars = 'abcdefghijklmnopqrstuvwxyz0123456789'; - expect(() => - faker.random.alphaNumeric(5, { - bannedChars, - casing: 'lower', - }) - ).toThrow(); - }); - - it('should not mutate the input object', () => { - const input: { - bannedChars: string[]; - } = Object.freeze({ - bannedChars: ['a', '0', '%'], - }); - - expect(() => faker.random.alphaNumeric(5, input)).not.toThrow(); - expect(input.bannedChars).toEqual(['a', '0', '%']); - }); - }); - - describe('numeric', () => { - it('should return single digit when no length provided', () => { - const actual = faker.random.numeric(); - - expect(actual).toHaveLength(1); - expect(actual).toMatch(/^[0-9]$/); - }); - - it.each(times(100))( - 'should generate random value with a length of %s', - (length) => { - const actual = faker.random.numeric(length); - - expect(actual).toHaveLength(length); - expect(actual).toMatch(/^[0-9]*$/); - } - ); - - it('should return empty string with a length of 0', () => { - const actual = faker.random.numeric(0); - - expect(actual).toHaveLength(0); - }); - - it('should return empty string with a negative length', () => { - const actual = faker.random.numeric(-10); - - expect(actual).toHaveLength(0); - }); - - it('should return a valid numeric string with provided length', () => { - const actual = faker.random.numeric(1000); - - expect(actual).toBeTypeOf('string'); - expect(actual).toHaveLength(1000); - expect(actual).toMatch(/^[0-9]+$/); - }); - - it('should allow leading zeros via option', () => { - const actual = faker.random.numeric(15, { allowLeadingZeros: true }); - - expect(actual).toMatch(/^[0-9]+$/); - }); - - it('should allow leading zeros via option and all other digits banned', () => { - const actual = faker.random.numeric(4, { - allowLeadingZeros: true, - bannedDigits: [...'123456789'], - }); - - expect(actual).toBe('0000'); - }); - - it('should allow leading zeros via option and all other digits banned via string', () => { - const actual = faker.random.numeric(4, { - allowLeadingZeros: true, - bannedDigits: '123456789', - }); - - expect(actual).toBe('0000'); - }); - - it('should fail on leading zeros via option and all other digits banned', () => { - expect(() => - faker.random.numeric(4, { - allowLeadingZeros: false, - bannedDigits: [...'123456789'], - }) - ).toThrow( - new FakerError( - 'Unable to generate numeric string, because all possible digits are excluded.' - ) - ); - }); - - it('should fail on leading zeros via option and all other digits banned via string', () => { - expect(() => - faker.random.numeric(4, { - allowLeadingZeros: false, - bannedDigits: '123456789', - }) - ).toThrow( - new FakerError( - 'Unable to generate numeric string, because all possible digits are excluded.' - ) - ); - }); - - it('should ban all digits passed via bannedDigits', () => { - const actual = faker.random.numeric(1000, { - bannedDigits: [...'c84U1'], - }); - - expect(actual).toHaveLength(1000); - expect(actual).toMatch(/^[0235679]{1000}$/); - }); - - it('should ban all digits passed via bannedDigits via string', () => { - const actual = faker.random.numeric(1000, { - bannedDigits: 'c84U1', - }); - - expect(actual).toHaveLength(1000); - expect(actual).toMatch(/^[0235679]{1000}$/); - }); - }); - } - ); -}); -- cgit v1.2.3