/** * Test file for Namecheap domain registration operations * * IMPORTANT: These tests can incur charges even in sandbox mode! * Only run these tests if you understand the implications. */ import { expect, tap } from '@push.rocks/tapbundle'; import { createTestClient, TEST_DOMAINS, hasRealCredentials } from './config.js'; // Skip live API tests if no real credentials or if ENABLE_REGISTRATION_TESTS is not set const skipLiveTests = !hasRealCredentials() || process.env.ENABLE_REGISTRATION_TESTS !== 'true'; // Always run this test to ensure the file doesn't fail when all other tests are skipped tap.test('Registration - Basic Client Test', async () => { // Create a client with mock credentials const client = createTestClient(true); // Verify the client has the expected methods expect(client.domains.create).toBeTypeOf('function'); expect(client.domains.renew).toBeTypeOf('function'); expect(client.domains.reactivate).toBeTypeOf('function'); expect(client.domains.getTldList).toBeTypeOf('function'); // This test always passes expect(true).toBeTrue(); }); // Test TLD list retrieval if (skipLiveTests) { tap.skip.test('Registration - Check TLD List', async () => { console.log('Skipping TLD list test - no credentials or registration tests disabled'); }); } else { tap.test('Registration - Check TLD List', async (tools) => { // Set a timeout for the test tools.timeout(15000); // 15 seconds timeout // Create a new client instance const client = createTestClient(); // Get list of available TLDs const tlds = await client.domains.getTldList(); // Validate the result expect(Array.isArray(tlds)).toBeTrue(); expect(tlds.length).toBeGreaterThan(0); // Log some of the available TLDs with colored output console.log(await tools.coloredString( `Available TLDs: ${tlds.slice(0, 10).join(', ')}...`, 'cyan' )); }); } // Test domain registration // This test is always skipped by default because it costs money tap.skip.test('Registration - Register Domain', async (tools) => { // Set a timeout for the test tools.timeout(60000); // 60 seconds timeout // Create a new client instance const client = createTestClient(); // Sample contact information (required for registration) const contacts = { registrant: { FirstName: 'Test', LastName: 'User', Address1: '123 Test St', City: 'Test City', StateProvince: 'CA', PostalCode: '12345', Country: 'US', Phone: '+1.5555555555', EmailAddress: 'test@example.com' }, tech: { FirstName: 'Test', LastName: 'User', Address1: '123 Test St', City: 'Test City', StateProvince: 'CA', PostalCode: '12345', Country: 'US', Phone: '+1.5555555555', EmailAddress: 'test@example.com' }, admin: { FirstName: 'Test', LastName: 'User', Address1: '123 Test St', City: 'Test City', StateProvince: 'CA', PostalCode: '12345', Country: 'US', Phone: '+1.5555555555', EmailAddress: 'test@example.com' }, auxBilling: { FirstName: 'Test', LastName: 'User', Address1: '123 Test St', City: 'Test City', StateProvince: 'CA', PostalCode: '12345', Country: 'US', Phone: '+1.5555555555', EmailAddress: 'test@example.com' } }; console.log(await tools.coloredString( `Registering domain: ${TEST_DOMAINS.REGISTER}`, 'cyan' )); // Register a new domain const result = await client.domains.create({ domainName: TEST_DOMAINS.REGISTER, years: 1, contacts, nameservers: ['dns1.namecheaphosting.com', 'dns2.namecheaphosting.com'], addFreeWhoisguard: true, whoisguardPrivacy: true }); // Validate the result expect(result).toBeTypeOf('object'); expect(result.registered).toBeTrue(); expect(result.domain).toEqual(TEST_DOMAINS.REGISTER); // Log the registration result with colored output console.log(await tools.coloredString( `Domain ${result.domain} registered successfully`, 'green' )); console.log(await tools.coloredString( `Transaction ID: ${result.transactionId}`, 'green' )); console.log(await tools.coloredString( `Order ID: ${result.orderId}`, 'green' )); console.log(await tools.coloredString( `Charged Amount: ${result.chargedAmount}`, 'green' )); }); // Test domain renewal // This test is always skipped by default because it costs money tap.skip.test('Registration - Renew Domain', async (tools) => { // Set a timeout for the test tools.timeout(60000); // 60 seconds timeout // Create a new client instance const client = createTestClient(); console.log(await tools.coloredString( `Renewing domain: ${TEST_DOMAINS.INFO}`, 'cyan' )); // Renew a domain const result = await client.domains.renew(TEST_DOMAINS.INFO, 1); // Validate the result expect(result).toBeTypeOf('object'); expect(result.renewed).toBeTrue(); expect(result.domainName).toEqual(TEST_DOMAINS.INFO); // Log the renewal result with colored output console.log(await tools.coloredString( `Domain ${result.domainName} renewed successfully`, 'green' )); console.log(await tools.coloredString( `Transaction ID: ${result.transactionId}`, 'green' )); console.log(await tools.coloredString( `Order ID: ${result.orderId}`, 'green' )); console.log(await tools.coloredString( `Charged Amount: ${result.chargedAmount}`, 'green' )); console.log(await tools.coloredString( `New Expiry Date: ${result.expireDate}`, 'green' )); }); // Start the tests tap.start();