fix(18): Manifest-Eintraege in getManifest() auf gueltige Form pruefen (WR-03)
Ein kaputter Plattform-Eintrag (z. B. fehlendes name-Feld oder ungueltiger sha256) fiel bisher erst spaeter unbemerkt durch -- entry.name === undefined wurde zu "undefined" gecoerct und als Dateiname gesucht. getManifest() prueft jetzt jeden vorhandenen Plattform-Eintrag (name: string, size: number, sha256: 64-stelliger Hex-String) und behandelt ein kaputtes Manifest wie ein fehlendes (404 + Warn-Log), statt die kaputte Form durchzureichen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -161,7 +161,33 @@ describe('DesktopService/DesktopController — HTTP-Durchstich (Phase 18)', () =
|
||||
expect(res.status).toBe(404);
|
||||
});
|
||||
|
||||
it('Test 8 (bewusst oeffentlich): getLatest und download tragen @Public()', () => {
|
||||
it('Test 9 (WR-03, ungueltiger Eintrag im Manifest): name fehlt -- getLatest wirft NotFoundException statt "undefined" als Datei zu suchen', () => {
|
||||
// Bewusst am `writeManifest()`-Helper vorbei direkt geschrieben -- dessen
|
||||
// Parametertyp verlangt `name`, hier soll aber genau dessen Fehlen
|
||||
// geprueft werden (kaputtes Manifest, kein TS-Typfehler im Test).
|
||||
fs.writeFileSync(
|
||||
path.join(tempDir, 'manifest.json'),
|
||||
JSON.stringify({
|
||||
version: '1.1.0',
|
||||
channel: 'dev',
|
||||
commit: 'abc1234',
|
||||
buildTime: '2026-09-16T00:00:00Z',
|
||||
files: { linux: { size: 123, sha256: 'a'.repeat(64) } },
|
||||
}),
|
||||
);
|
||||
const service = new DesktopService();
|
||||
expect(() => service.getLatest()).toThrow(NotFoundException);
|
||||
});
|
||||
|
||||
it('Test 10 (WR-03, ungueltiger Eintrag im Manifest): sha256 ist kein 64-stelliger Hex-String -- 404', async () => {
|
||||
writeManifest({
|
||||
linux: { name: PACKAGE_NAME, size: packageSize, sha256: 'not-a-hash' },
|
||||
});
|
||||
const res = await fetch(`${baseUrl}/desktop/download/linux`);
|
||||
expect(res.status).toBe(404);
|
||||
});
|
||||
|
||||
it('Test 11 (bewusst oeffentlich): getLatest und download tragen @Public()', () => {
|
||||
expect(Reflect.getMetadata(IS_PUBLIC_KEY, DesktopController.prototype.getLatest)).toBe(true);
|
||||
expect(Reflect.getMetadata(IS_PUBLIC_KEY, DesktopController.prototype.download)).toBe(true);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user