UNPKG

@monkeyscanjump/cloudflare-dyndns

Version:

A robust TypeScript application that automatically updates Cloudflare DNS records when your public IP address changes. Perfect for maintaining consistent domain names for home servers, WireGuard VPN, self-hosted services, or any system with a dynamic IP a

89 lines 3.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const CloudflareService_1 = require("../services/CloudflareService"); const Logger_1 = require("../utils/Logger"); const axios_1 = __importDefault(require("axios")); jest.mock('axios'); jest.mock('../utils/Logger'); describe('CloudflareService', () => { let mockLogger; let config; let cloudflareService; beforeEach(() => { mockLogger = new Logger_1.Logger('test.log'); config = { API_TOKEN: 'test-token', ZONE_ID: 'zone-id', RECORD_ID: 'record-id', DOMAIN: 'example.com', SUBDOMAIN: 'test', FQDN: 'test.example.com', TTL: 120, PROXIED: false, RETRY_ATTEMPTS: 3, RETRY_DELAY: 100, LOG_FILE: 'test.log', LAST_IP_FILE: 'ip.txt', IP_SERVICES: ['ipify'] }; cloudflareService = new CloudflareService_1.CloudflareService(config, mockLogger); jest.resetAllMocks(); }); test('should initialize with auto-discovery', async () => { // Mock the API responses for auto-discovery axios_1.default.mockImplementation(() => { return Promise.resolve({ data: { success: true, result: [{ id: 'discovered-zone-id', name: 'example.com' }] } }); }); // Remove IDs to trigger auto-discovery const autoDiscoverConfig = { ...config }; delete autoDiscoverConfig.ZONE_ID; delete autoDiscoverConfig.RECORD_ID; const service = new CloudflareService_1.CloudflareService(autoDiscoverConfig, mockLogger); const result = await service.initialize(); expect(result).toBe(true); expect(axios_1.default).toHaveBeenCalled(); }); test('should update DNS record', async () => { axios_1.default.mockImplementation(() => { return Promise.resolve({ data: { success: true, result: { id: 'record-id' } } }); }); const result = await cloudflareService.updateDnsRecord('1.2.3.4'); expect(result).toBe(true); expect(axios_1.default).toHaveBeenCalledWith(expect.objectContaining({ method: 'put', data: expect.objectContaining({ content: '1.2.3.4' }) })); }); test('should handle API errors gracefully', async () => { axios_1.default.mockImplementation(() => { return Promise.reject({ response: { status: 403, data: { success: false, errors: [{ message: 'Access denied' }] } } }); }); const result = await cloudflareService.updateDnsRecord('1.2.3.4'); expect(result).toBe(false); expect(mockLogger.error).toHaveBeenCalled(); }); }); //# sourceMappingURL=CloudflareService.test.js.map