refactor(web/api): errCode + errMessage helpers; 41 sites migrated (W1)

This commit is contained in:
2026-05-07 22:17:45 -04:00
parent 965df28127
commit 9c91a342e2
16 changed files with 138 additions and 70 deletions
+51
View File
@@ -0,0 +1,51 @@
import { describe, expect, test } from 'vitest';
import { errCode, errMessage } from './errors';
import { ERROR_COPY } from './error-copy';
describe('errCode', () => {
test('returns code from object', () => {
expect(errCode({ code: 'foo' })).toBe('foo');
});
test("returns 'unknown' for null", () => {
expect(errCode(null)).toBe('unknown');
});
test("returns 'unknown' for undefined", () => {
expect(errCode(undefined)).toBe('unknown');
});
test("returns 'unknown' for non-object values", () => {
expect(errCode('boom')).toBe('unknown');
expect(errCode(42)).toBe('unknown');
expect(errCode(true)).toBe('unknown');
});
test('handles missing code field', () => {
expect(errCode({})).toBe('unknown');
expect(errCode({ message: 'hi' })).toBe('unknown');
});
});
describe('errMessage', () => {
test('returns mapped copy when code is known', () => {
const expected = ERROR_COPY.track_not_found;
expect(errMessage({ code: 'track_not_found' })).toBe(expected);
});
test('returns the unknown-fallback copy when code is missing', () => {
const result = errMessage({ code: 'definitely_not_a_real_code_xyz' });
expect(result).toBeTruthy();
expect(typeof result).toBe('string');
expect(result.length).toBeGreaterThan(0);
});
test('accepts custom fallback parameter without throwing', () => {
// copyForCode itself returns a non-empty string for any input, so the
// explicit fallback only matters in narrow cases. Just exercise the
// signature.
const result = errMessage(null, 'custom fallback');
expect(typeof result).toBe('string');
expect(result.length).toBeGreaterThan(0);
});
});
+18
View File
@@ -0,0 +1,18 @@
import { copyForCode } from './error-copy';
/**
* Returns the `code` field from an unknown error value, or 'unknown'
* when the value isn't shaped like { code: string }.
*/
export function errCode(err: unknown): string {
return (err as { code?: string })?.code ?? 'unknown';
}
/**
* Returns user-facing copy for an unknown error value. Looks up the
* error's code in the error-copy map; falls back to the supplied
* fallback (default: "Something went wrong.") when the code is unknown.
*/
export function errMessage(err: unknown, fallback = 'Something went wrong.'): string {
return copyForCode(errCode(err)) ?? fallback;
}