UNPKG

dnssweeper-cli

Version:

CLI tool for detecting and analyzing unused DNS records

178 lines 8.96 kB
"use strict"; /** * patternLoader.ts のユニットテスト */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const patternLoader_1 = require("./patternLoader"); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); describe('patternLoader', () => { const tempDir = path_1.default.join(process.cwd(), 'test', 'temp'); const tempPatternFile = path_1.default.join(tempDir, 'test-patterns.json'); beforeAll(async () => { // テスト用の一時ディレクトリ作成 await fs_1.promises.mkdir(tempDir, { recursive: true }); }); afterAll(async () => { // 一時ディレクトリのクリーンアップ try { await fs_1.promises.rm(tempDir, { recursive: true }); } catch (error) { // エラーは無視 } }); describe('loadPatternConfig', () => { const validConfig = { version: '1.0.0', description: 'テスト用パターン設定', patterns: { prefixes: { high: ['old-', 'tmp-'], medium: ['backup-'], low: ['new-'], }, suffixes: { high: ['-old', '-tmp'], medium: ['-backup'], low: ['-new'], }, keywords: { high: ['obsolete'], medium: ['archive'], low: ['future'], }, }, scoring: { high: 80, medium: 50, low: 30, base: 10, }, thresholds: { critical: 90, high: 70, medium: 50, low: 30, safe: 0, }, }; it('正常なパターンファイルを読み込める', async () => { // テスト用パターンファイルを作成 await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(validConfig, null, 2)); const config = await (0, patternLoader_1.loadPatternConfig)(tempPatternFile); expect(config).toEqual(validConfig); expect(config.version).toBe('1.0.0'); expect(config.patterns.prefixes.high).toContain('old-'); }); it('存在しないファイルでエラーが発生する', async () => { const nonExistentFile = path_1.default.join(tempDir, 'non-existent.json'); await expect((0, patternLoader_1.loadPatternConfig)(nonExistentFile)).rejects.toThrow('パターン設定読み込みエラー'); }); it('不正なJSONでエラーが発生する', async () => { const invalidJson = '{ "version": "1.0.0", invalid json }'; await fs_1.promises.writeFile(tempPatternFile, invalidJson); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('パターン設定読み込みエラー'); }); it('バージョン情報がない設定でエラーが発生する', async () => { const invalidConfig = { ...validConfig }; delete invalidConfig.version; await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(invalidConfig)); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('バージョン情報が必要です'); }); it('パターン定義がない設定でエラーが発生する', async () => { const invalidConfig = { ...validConfig }; delete invalidConfig.patterns; await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(invalidConfig)); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('パターン定義が必要です'); }); it('不完全なパターン定義でエラーが発生する', async () => { const invalidConfig = { ...validConfig, patterns: { prefixes: { high: ['old-'] }, // suffixes と keywords が不足 }, }; await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(invalidConfig)); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('prefixes, suffixes, keywordsの定義が必要です'); }); it('スコアリング設定がない設定でエラーが発生する', async () => { const invalidConfig = { ...validConfig }; delete invalidConfig.scoring; await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(invalidConfig)); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('スコアリング設定が必要です'); }); it('閾値設定がない設定でエラーが発生する', async () => { const invalidConfig = { ...validConfig }; delete invalidConfig.thresholds; await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(invalidConfig)); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('閾値設定が必要です'); }); it('不正なスコアリング設定でエラーが発生する', async () => { const invalidConfig = { ...validConfig, scoring: { high: 30, medium: 50, low: 80, base: 10, }, }; await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(invalidConfig)); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('スコアリング設定が不正です'); }); it('不正な閾値設定でエラーが発生する', async () => { const invalidConfig = { ...validConfig, thresholds: { critical: 30, high: 50, medium: 70, low: 90, safe: 0, }, }; await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(invalidConfig)); await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).rejects.toThrow('閾値設定が不正です'); }); }); describe('getDefaultPatternConfig', () => { it('有効なデフォルト設定を返す', () => { const defaultConfig = (0, patternLoader_1.getDefaultPatternConfig)(); expect(defaultConfig.version).toBeDefined(); expect(defaultConfig.patterns).toBeDefined(); expect(defaultConfig.scoring).toBeDefined(); expect(defaultConfig.thresholds).toBeDefined(); // デフォルト設定の構造チェック expect(defaultConfig.patterns.prefixes.high).toContain('old-'); expect(defaultConfig.patterns.suffixes.high).toContain('-old'); expect(defaultConfig.patterns.keywords.high).toContain('obsolete'); // スコアリング設定の順序チェック expect(defaultConfig.scoring.high).toBeGreaterThan(defaultConfig.scoring.medium); expect(defaultConfig.scoring.medium).toBeGreaterThan(defaultConfig.scoring.low); expect(defaultConfig.scoring.low).toBeGreaterThan(defaultConfig.scoring.base); // 閾値設定の順序チェック expect(defaultConfig.thresholds.critical).toBeGreaterThan(defaultConfig.thresholds.high); expect(defaultConfig.thresholds.high).toBeGreaterThan(defaultConfig.thresholds.medium); expect(defaultConfig.thresholds.medium).toBeGreaterThan(defaultConfig.thresholds.low); expect(defaultConfig.thresholds.low).toBeGreaterThan(defaultConfig.thresholds.safe); }); it('デフォルト設定がバリデーションを通過する', async () => { const defaultConfig = (0, patternLoader_1.getDefaultPatternConfig)(); // テスト用ファイルに書き込んでロードテスト await fs_1.promises.writeFile(tempPatternFile, JSON.stringify(defaultConfig, null, 2)); // エラーが発生しないことを確認 await expect((0, patternLoader_1.loadPatternConfig)(tempPatternFile)).resolves.toEqual(defaultConfig); }); }); }); // テスト終了後のクリーンアップ afterAll(async () => { // ファイルシステム関連のモックをクリア jest.restoreAllMocks(); }); //# sourceMappingURL=patternLoader.test.js.map