arnaucube
arnaucube/jellyfin-toolsPublic Self-hosted repository
jellyfin-tools/jellyfin-year-review/web/unit/radar.test.js
jellyfin-year-review/web/unit/radar.test.jsRaw
 1import { test } from 'node:test';
 2import assert from 'node:assert/strict';
 3import { radarGeometry } from '../src/lib/radar.js';
 4
 5test('radar preserves genre order and scales watch time from zero to the largest value', () => {
 6  const values = [20, 10, 5, 0];
 7  const { max, axes } = radarGeometry(values);
 8  assert.equal(max, 20);
 9  for (let i = 0; i < values.length; i++) {
10    assert.ok(Math.abs(Math.hypot(axes[i].valueX, axes[i].valueY) - values[i] / 20) < 1e-10);
11  }
12  assert.ok(axes[0].y < 0 && Math.abs(axes[0].x) < 1e-10);
13  assert.ok(axes[1].x > 0 && Math.abs(axes[1].y) < 1e-10);
14});
15
16test('empty, zero and sparse data keep the radar grid and points finite', () => {
17  for (const values of [[], [0, 0, 0], [4], [4, 2]]) {
18    const { max, axes } = radarGeometry(values);
19    assert.ok(max > 0);
20    assert.ok(axes.length >= 3);
21    assert.ok(axes.every(axis => Object.values(axis).every(Number.isFinite)));
22    assert.ok(axes.slice(values.length).every(axis => axis.valueX === 0 && axis.valueY === 0));
23  }
24});