Files
OmniRoute/tests/unit/release-notes.test.ts
Diego Rodrigues de Sa e Souza 0cd388efb8 Release v3.7.4 (#1730)
* chore(release): v3.7.4 — version bump, openapi and changelog sync

* fix: preserve previous_response_id and conversation_id fields on empty input array (#1729)

* fix: bypass UI validation block for optional API keys and fix string fallback typing (#1721)

* fix(proxy): disable HTTP keep-alive and pipelining in Undici proxy dispatcher to prevent socket hang up

* feat(proxy): implement bulk proxy import via pipe-delimited parser with update-or-create logic

* docs: update changelog for v3.7.4 fixes and proxy features

* test: update responses store expectations for empty input arrays

* feat(pwa): add fullscreen installable PWA with manifest, service worker, and cross-platform app icons. (#1728)

Integrated into release/v3.7.4

* Fix image provider validation and Stability image requests (#1726)

Integrated into release/v3.7.4

* docs: add PR 1726 and PR 1728 to v3.7.4 changelog

* fix(security): replace insecure Math.random with crypto.getRandomValues for fallback UUID generation

* fix(migrations): intercept 007 migration to use IF NOT EXISTS logic on fresh installs

Fixes #1733

* test: fix typescript compilation errors in unit tests

* fix(db): reconcile legacy reasoning cache migration

* chore(release): bump to v3.7.4 — changelog, docs, version sync

* fix(cc-compatible): preserve Claude Code system skeleton (#1740)

Integrated into release/v3.7.4

* docs(changelog): update for PR #1740 merge

* docs(changelog): include workflow updates

* fix(db): reconcile legacy reasoning cache migration (#1734)

Integrated into release/v3.7.4

* Add endpoint tunnel visibility settings (#1743)

Integrated into release/v3.7.4

* Normalize max reasoning effort for Codex routing (#1744)

Integrated into release/v3.7.4

* Fix Claude Code gateway config helper (#1745)

Integrated into release/v3.7.4

* Refresh CLI fingerprint provider profiles (#1746)

Integrated into release/v3.7.4

* Integrated into release/v3.7.4 (PR #1742)

* docs(changelog): update for PRs 1742-1746

---------

Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com>
Co-authored-by: Yash Ghule <y.ghule77@gmail.com>
Co-authored-by: backryun <bakryun0718@proton.me>
Co-authored-by: dhaern <manker_lol@hotmail.com>
Co-authored-by: Randi <55005611+rdself@users.noreply.github.com>
Co-authored-by: Duncan L <leungd@gmail.com>
2026-04-28 20:46:25 -03:00

53 lines
1.6 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
const releaseNotes = await import("../../src/shared/utils/releaseNotes.ts");
test("parseActiveNewsPayload returns only valid active announcements", () => {
assert.deepEqual(
releaseNotes.parseActiveNewsPayload({
active: true,
title: "Launch",
message: "A short announcement",
link: "https://github.com/diegosouzapw/tOmni",
linkLabel: "Learn more",
icon: "campaign",
}),
{
active: true,
title: "Launch",
message: "A short announcement",
link: "https://github.com/diegosouzapw/tOmni",
linkLabel: "Learn more",
icon: "campaign",
}
);
assert.equal(releaseNotes.parseActiveNewsPayload({ active: false }), null);
assert.equal(
releaseNotes.parseActiveNewsPayload({
active: true,
title: "Unsafe icon",
message: "Invalid icon names are rejected",
icon: "campaign<script>",
}),
null
);
});
test("getLatestChangelogMarkdown keeps the title and the ten latest releases", () => {
const versions = Array.from({ length: 12 }, (_, index) => {
const version = `1.0.${12 - index}`;
return `## [${version}] - 2026-04-${String(28 - index).padStart(2, "0")}\n\n### Bug Fixes\n- Fix ${version}`;
});
const markdown = ["# Changelog", ...versions].join("\n\n");
const sliced = releaseNotes.getLatestChangelogMarkdown(markdown, 10);
assert.match(sliced, /^# Changelog/);
assert.equal((sliced.match(/^## \[/gm) || []).length, 10);
assert.match(sliced, /## \[1\.0\.12\]/);
assert.match(sliced, /## \[1\.0\.3\]/);
assert.doesNotMatch(sliced, /## \[1\.0\.2\]/);
});