UNPKG

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
"use strict"; // 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;