Files
boc/vims-backend/tests/changeDetection.test.js
T
Bernt 6de2455917 v1.2.0: Add Global Markets footer, translated to 9 languages
- Added GLOBAL_MARKETS_TITLE to all translation files
- Updated footer with 12 markets (4 active + 8 upcoming)
- Translated market section to: zh-cn, zh-tw, ja, ko, th, vi, id, ms, hi
- Built and deployed to production
- CloudFront invalidation: I3RTMXVFDJXWLG3SYX208OP1CC
2026-07-08 19:56:03 +00:00

93 lines
2.6 KiB
JavaScript

/**
* Change Detection Service Tests
*/
const { ChangeDetectionService } = require('../src/services/changeDetection');
describe('ChangeDetectionService', () => {
let service;
let baseImage;
let modifiedImage;
beforeEach(async () => {
service = new ChangeDetectionService();
// Create test images with same dimensions
const width = 640;
const height = 640;
// Create white image
baseImage = Buffer.alloc(width * height * 3, 255);
// Create modified image with red region
modifiedImage = Buffer.from(baseImage);
for (let y = 100; y < 200; y++) {
for (let x = 100; x < 200; x++) {
const idx = (y * width + x) * 3;
modifiedImage[idx] = 255; // R
modifiedImage[idx + 1] = 0; // G
modifiedImage[idx + 2] = 0; // B
}
}
});
describe('calculatePixelDifference', () => {
it('should calculate pixel difference', () => {
const img1 = Buffer.from([255, 255, 255, 0, 0, 0]);
const img2 = Buffer.from([255, 255, 255, 255, 255, 255]);
const diff = service.calculatePixelDifference(img1, img2);
expect(diff).toBeGreaterThan(0);
expect(diff).toBeLessThanOrEqual(1);
});
it('should return 0 for identical images', () => {
const img = Buffer.from([128, 128, 128, 128, 128, 128]);
const diff = service.calculatePixelDifference(img, img);
expect(diff).toBe(0);
});
});
describe('classifyChange', () => {
it('should classify no change', () => {
const result = service.classifyChange(0, 0, 0);
expect(result).toBe('none');
});
it('should classify minor change', () => {
const result = service.classifyChange(0.03, 0.03, 0.02);
expect(result).toBe('minor');
});
it('should classify significant change', () => {
const result = service.classifyChange(0.2, 0.2, 0.2);
expect(result).toBe('significant');
});
});
describe('combineMetrics', () => {
it('should combine metrics with weights', () => {
const result = service.combineMetrics(0.1, 0.2, 0.3);
// Expected: 0.1*0.3 + 0.2*0.5 + 0.3*0.2 = 0.03 + 0.10 + 0.06 = 0.19
expect(result).toBeCloseTo(0.19, 2);
});
});
describe('calculateConfidence', () => {
it('should return high confidence for clear changes', () => {
const result = service.calculateConfidence(0.25);
expect(result).toBeGreaterThan(0.9);
});
it('should return lower confidence for borderline changes', () => {
const result = service.calculateConfidence(0.1);
expect(result).toBeLessThan(0.8);
expect(result).toBeGreaterThan(0.5);
});
});
});