nigerian-mobile-validator
Version:
The most rigorous, up-to-date library for validating Nigerian mobile numbers. Fully NCC-compliant, and security-focused, with enterprise-grade features to prevent the business risks of validation failures in regulated industries.
113 lines (112 loc) • 4.33 kB
JavaScript
// src/__tests__/synthetic-data/test-data-generator.ts
import { TestDataGeneratorValidNumbers } from './test-data-generator-valid-numbers';
import { TestDataGeneratorInvalidNumbers } from './test-data-generator-invalid-numbers';
import { TestDataGeneratorRandomNumbers } from './test-data-generator-random-numbers';
import { TestDataGeneratorPropertyBased } from './test-data-generator-property-based';
import { invalidTelcos } from '../../numbering-plan/telco';
/**
* Main test data generator that brings together all the specialized generators
*/
export class TestDataGenerator {
/**
* Generate a valid mobile number for a specific network code
*/
static generateValidNumber(networkCode) {
return TestDataGeneratorValidNumbers.generateValidNumber(networkCode);
}
/**
* Generate a valid mobile number for a specific telco
*/
static generateValidNumberForTelco(telco) {
if (invalidTelcos.includes(telco)) {
throw new Error(`Invalid Telcos cannot be used to generate valid synthetic mobile numbers. Telco name: ${telco}`);
}
return TestDataGeneratorValidNumbers.generateValidNumberForTelco(telco);
}
/**
* Generate an international format number
*/
static generateInternationalNumber(networkCode) {
return TestDataGeneratorValidNumbers.generateInternationalNumber(networkCode);
}
/**
* Generate an international format number with plus
*/
static generateInternationalPlusNumber(networkCode) {
return TestDataGeneratorValidNumbers.generateInternationalPlusNumber(networkCode);
}
/**
* Generate a number with spaces
*/
static generateNumberWithSpaces(networkCode) {
return TestDataGeneratorValidNumbers.generateNumberWithSpaces(networkCode);
}
/**
* Generate a number with "O" instead of "0"
*/
static generateNumberWithO(networkCode) {
return TestDataGeneratorValidNumbers.generateNumberWithO(networkCode);
}
/**
* Generate a number with invalid length (too long or too short)
*/
static generateInvalidLengthNumber(networkCode, tooLong = true) {
return TestDataGeneratorInvalidNumbers.generateInvalidLengthNumber(networkCode, tooLong);
}
/**
* Generate a number with non-numeric characters
*/
static generateNonNumericNumber(networkCode) {
return TestDataGeneratorInvalidNumbers.generateNonNumericNumber(networkCode);
}
/**
* Generate a number with invalid network code
*/
static generateInvalidNetworkCodeNumber() {
return TestDataGeneratorInvalidNumbers.generateInvalidNetworkCodeNumber();
}
/**
* Generate a valid withdrawn number in the 702 range
*/
static generateWithdrawn702Number() {
return TestDataGeneratorInvalidNumbers.generateWithdrawn702Number();
}
/**
* Generate a valid returned number in the 702 range
*/
static generateReturned702Number() {
return TestDataGeneratorInvalidNumbers.generateReturned702Number();
}
/**
* Generate a completely random phone number (may be valid or invalid)
*/
static generateRandomPhoneNumber() {
return TestDataGeneratorRandomNumbers.generateRandomPhoneNumber();
}
/**
* Generate a comprehensive batch of valid numbers covering all telcos
*/
static generateValidNumberBatch(size = 50) {
return TestDataGeneratorValidNumbers.generateValidNumberBatch(size);
}
/**
* Generate a mixed batch with both valid and invalid numbers
*/
static generateMixedNumberBatch(size = 50, invalidRatio = 0.2) {
return TestDataGeneratorRandomNumbers.generateMixedNumberBatch(size, invalidRatio);
}
/**
* Generate a property-based test for a specific validation aspect
* @param aspect The validation aspect to test
* @param count Number of test cases to generate
*/
static generatePropertyBasedTest(aspect, count = 10) {
return TestDataGeneratorPropertyBased.generatePropertyBasedTest(aspect, count);
}
/**
* Generate a comprehensive set of test cases for validation
*/
static generateValidationTestCases() {
return TestDataGeneratorPropertyBased.generatePropertyBasedTestCases(50);
}
}