20 lines
1.9 KiB
TypeScript
20 lines
1.9 KiB
TypeScript
import assert from "node:assert/strict"
|
|
import {test} from "node:test"
|
|
import {parseReleaseManifest,safeReleaseUrl,shouldShowReleaseNotes} from "./release-metadata"
|
|
const empty={version:"1.0.0",tag:"v1.0.0",publishedAt:null,releaseUrl:"",commits:[]}
|
|
const commit={sha:"a".repeat(40),shortSha:"a".repeat(7),subject:"fix(ui): исправить форму",author:"Fixture",type:"fix"}
|
|
test("release metadata distinguishes confirmed empty and rejects malformed/inconsistent manifests",()=>{
|
|
assert.deepEqual(parseReleaseManifest(empty),empty)
|
|
for(const row of [null,[],{}, {...empty,commits:null},{...empty,publishedAt:"invalid"},{...empty,publishedAt:"2026-01-01"},{...empty,tag:"v2.0.0"},{...empty,commits:[{...commit,subject:12}]},{...empty,commits:[commit,commit]},{...empty,commits:[{...commit,shortSha:"bbbbbbb"}]}])assert.equal(parseReleaseManifest(row),null)
|
|
assert.equal(parseReleaseManifest({...empty,publishedAt:"2026-10-03T00:00:00Z",commits:[commit]})?.commits.length,1)
|
|
})
|
|
test("release links allow only absolute HTTP(S) without credentials",()=>{
|
|
for(const link of ["javascript:alert(1)","data:text/html,fixture","//example.test/releases","/releases","https://user:[email protected]/releases",null]){assert.equal(safeReleaseUrl(link),null);assert.equal(parseReleaseManifest({...empty,releaseUrl:link}),null)}
|
|
assert.equal(safeReleaseUrl(" https://example.test/releases "),"https://example.test/releases")
|
|
assert.equal(parseReleaseManifest({...empty,releaseUrl:"http://gitea.example.test/releases"})?.releaseUrl,"http://gitea.example.test/releases")
|
|
})
|
|
|
|
test("release announcement belongs only to the current production build",()=>{
|
|
const manifest={...empty,commits:[commit]};assert.equal(shouldShowReleaseNotes(manifest,"1.0.0"),true);assert.equal(shouldShowReleaseNotes(manifest,"1.0.0-dev"),false);assert.equal(shouldShowReleaseNotes(manifest,"2.0.0"),false);assert.equal(shouldShowReleaseNotes(empty,"1.0.0"),false)
|
|
})
|