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.
109 lines (108 loc) • 5.79 kB
JavaScript
;
// src/__tests__/synthetic-data/test-data-generator-random-numbers.ts
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestDataGeneratorRandomNumbers = void 0;
const test_data_generator_base_1 = require("./test-data-generator-base");
const test_data_generator_valid_numbers_1 = require("./test-data-generator-valid-numbers");
const test_data_generator_invalid_numbers_1 = require("./test-data-generator-invalid-numbers");
const network_access_code_1 = require("../../numbering-plan/network-access-code");
const chance_1 = __importDefault(require("chance"));
// Initialize Chance with a seed for reproducibility if needed
const chance = new chance_1.default();
/**
* Generator for random Nigerian mobile numbers (both valid and invalid)
*/
class TestDataGeneratorRandomNumbers extends test_data_generator_base_1.TestDataGeneratorBase {
/**
* Generate a completely random phone number (may be valid or invalid)
*/
static generateRandomPhoneNumber() {
// Choose a format - local, international, or international with plus
const format = chance.pickone(['local', 'international', 'international-plus']);
// Generate the base number
const isValid = chance.bool({ likelihood: 70 });
// Use either a valid NetworkAccessCode or an invalid numeric code
const networkCode = isValid ? this.randomNetworkCode() : this.randomInvalidNetworkCode();
const subscriberNumber = isValid ? this.randomSubscriberNumber(networkCode) : this.randomSubscriberNumber();
let number;
if (format === 'local') {
number = `0${networkCode}${subscriberNumber}`;
}
else if (format === 'international') {
number = `234${networkCode}${subscriberNumber}`;
}
else {
number = `+234${networkCode}${subscriberNumber}`;
}
// Potentially add some "noise" to the number
const noiseType = chance.pickone(['none', 'spaces', 'o-instead-of-0', 'non-numeric', 'wrong-length']);
switch (noiseType) {
case 'none':
return number;
case 'spaces':
return test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.addRandomSpaces(number);
case 'o-instead-of-0':
return test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.replaceZerosWithO(number);
case 'non-numeric':
return test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.addNonNumericChars(number);
case 'wrong-length':
return chance.bool() ?
test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.makeTooLong(number) :
test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.makeTooShort(number);
}
}
/**
* Generate a mixed batch with both valid and invalid numbers
* Useful for testing batch validation error handling
*/
static generateMixedNumberBatch(size = 50, invalidRatio = 0.2) {
const numbers = [];
const validSize = Math.floor(size * (1 - invalidRatio));
const invalidSize = size - validSize;
// Add valid numbers
const validNumbers = test_data_generator_valid_numbers_1.TestDataGeneratorValidNumbers.generateValidNumberBatch(validSize);
numbers.push(...validNumbers);
// Add invalid numbers of different types
for (let i = 0; i < invalidSize; i++) {
const invalidType = chance.integer({ min: 0, max: 7 });
switch (invalidType) {
case 0: {
const networkCode = this.randomNetworkCode();
numbers.push(test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.generateInvalidLengthNumber(networkCode, true)); // Too long
break;
}
case 1: {
const networkCode = this.randomNetworkCode();
numbers.push(test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.generateInvalidLengthNumber(networkCode, false)); // Too short
break;
}
case 2: {
const networkCode = this.randomNetworkCode();
numbers.push(test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.generateNonNumericNumber(networkCode)); // Non-numeric
break;
}
case 3:
numbers.push(test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.generateInvalidNetworkCodeNumber()); // Invalid network code
break;
case 4:
numbers.push(`0${network_access_code_1.NetworkAccessCode.n709}1234567`); // Withdrawn code
break;
case 5:
numbers.push(`0${network_access_code_1.NetworkAccessCode.n700}1234567`); // Shared VAS
break;
case 6:
numbers.push(`0${network_access_code_1.NetworkAccessCode.n900}1234567`); // Reserved
break;
case 7:
numbers.push(test_data_generator_invalid_numbers_1.TestDataGeneratorInvalidNumbers.generateWithdrawn702Number()); // Withdrawn 702 range
break;
}
}
// Shuffle the array to mix valid and invalid numbers
return this.shuffleArray(numbers);
}
}
exports.TestDataGeneratorRandomNumbers = TestDataGeneratorRandomNumbers;