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.

134 lines (133 loc) 6.12 kB
"use strict"; // src/__tests__/synthetic-data/test-data-generator-valid-numbers.ts var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TestDataGeneratorValidNumbers = void 0; const test_data_generator_base_1 = require("./test-data-generator-base"); const network_access_code_1 = require("../../numbering-plan/network-access-code"); const telco_1 = require("../../numbering-plan/telco"); const chance_1 = __importDefault(require("chance")); // Initialize Chance with a seed for reproducibility if needed const chance = new chance_1.default(); /** * Generator for valid Nigerian mobile numbers */ class TestDataGeneratorValidNumbers extends test_data_generator_base_1.TestDataGeneratorBase { /** * Generate a valid mobile number for a specific network code with randomized subscriber number */ static generateValidNumber(networkCode) { const subscriberNumber = this.randomSubscriberNumber(networkCode); return `0${networkCode}${subscriberNumber}`; } /** * Generate a valid mobile number for a specific telco */ static generateValidNumberForTelco(telco) { // Handle special case for 702 range if (telco === telco_1.Telco.Smile) { return `0${network_access_code_1.NetworkAccessCode.n702}${TestDataGeneratorValidNumbers.random702SubscriberNumber('Smile')}`; } else if (telco === telco_1.Telco.InterconnectClearinghouse) { return `0${network_access_code_1.NetworkAccessCode.n702}${TestDataGeneratorValidNumbers.random702SubscriberNumber('InterconnectClearinghouse')}`; } else if (telco === telco_1.Telco.Openskys) { return `0${network_access_code_1.NetworkAccessCode.n702}${TestDataGeneratorValidNumbers.random702SubscriberNumber('Openskys')}`; } else if (telco === telco_1.Telco.Visafone) { return `0${network_access_code_1.NetworkAccessCode.n702}${TestDataGeneratorValidNumbers.random702SubscriberNumber('Visafone')}`; } // For other telcos const networkCode = this.randomNetworkCodeForTelco(telco); return TestDataGeneratorValidNumbers.generateValidNumber(networkCode); } /** * Generate an international format number */ static generateInternationalNumber(networkCode) { const subscriberNumber = this.randomSubscriberNumber(networkCode); return `234${networkCode}${subscriberNumber}`; } /** * Generate an international format number with plus */ static generateInternationalPlusNumber(networkCode) { const subscriberNumber = this.randomSubscriberNumber(networkCode); return `+234${networkCode}${subscriberNumber}`; } /** * Generate a number with spaces in random positions */ static generateNumberWithSpaces(networkCode) { const subscriberNumber = this.randomSubscriberNumber(networkCode); const number = `0${networkCode}${subscriberNumber}`; // Insert 1-3 spaces at random positions let result = ''; const positions = chance.unique(chance.integer, chance.integer({ min: 1, max: 3 }), { min: 1, max: number.length - 1 }); let lastPos = 0; for (const pos of positions.sort((a, b) => a - b)) { result += number.substring(lastPos, pos) + ' '; lastPos = pos; } result += number.substring(lastPos); return result; } /** * Generate a number with "O" instead of "0" at random positions */ static generateNumberWithO(networkCode) { const subscriberNumber = this.randomSubscriberNumber(networkCode); const number = `0${networkCode}${subscriberNumber}`; // Replace 0 with o let result = ''; for (const element of number) { if (element === '0') { result += chance.bool() ? 'o' : 'O'; } else { result += element; } } return result; } /** * Generate a comprehensive batch of valid numbers covering all telcos * Useful for batch validation testing */ static generateValidNumberBatch(size = 50) { const numbers = []; // Determine proportions for different telcos const mtnCount = Math.floor(size * 0.4); // 40% MTN const airtelCount = Math.floor(size * 0.25); // 25% Airtel const gloCount = Math.floor(size * 0.2); // 20% Glo const nineMobileCount = Math.floor(size * 0.1); // 10% 9Mobile const otherCount = size - mtnCount - airtelCount - gloCount - nineMobileCount; // Remaining for other telcos // MTN numbers for (let i = 0; i < mtnCount; i++) { numbers.push(TestDataGeneratorValidNumbers.generateValidNumberForTelco(telco_1.Telco.MTN)); } // Airtel numbers for (let i = 0; i < airtelCount; i++) { numbers.push(TestDataGeneratorValidNumbers.generateValidNumberForTelco(telco_1.Telco.Airtel)); } // Glo numbers for (let i = 0; i < gloCount; i++) { numbers.push(TestDataGeneratorValidNumbers.generateValidNumberForTelco(telco_1.Telco.Globacom)); } // 9Mobile numbers for (let i = 0; i < nineMobileCount; i++) { numbers.push(TestDataGeneratorValidNumbers.generateValidNumberForTelco(telco_1.Telco.NineMobile)); } // Other telcos const otherTelcos = [telco_1.Telco.Smile, telco_1.Telco.Telewyz, telco_1.Telco.Mafab, telco_1.Telco.Visafone, telco_1.Telco.InterconnectClearinghouse, telco_1.Telco.Openskys]; for (let i = 0; i < otherCount; i++) { const telco = chance.pickone(otherTelcos); numbers.push(TestDataGeneratorValidNumbers.generateValidNumberForTelco(telco)); } // Shuffle the array to mix telcos return this.shuffleArray(numbers); } } exports.TestDataGeneratorValidNumbers = TestDataGeneratorValidNumbers;