feat(steps): a reply that sets no status is a 200; inline Express handlers keep their replies
- effects.ts implicitResponseStatus: a body-sending reply with no status in its chain (res.json / send / render, reply.send, c.json, NextResponse.json, JSONResponse / jsonify / render_template, Rails render, Laravel response()->json) is a 200; a variable status, end, sendStatus and redirects stay as they were - branch-guards callSiteInTree: a status set by the statement just before the reply (`res.status(202); res.json(user)`) is that reply's — looked back within the block, only a statement that IS the status call counts - steps.ts: explicit chain/args → set-before → implicit 200 - express.ts: an inline handler's reply calls (`res.status(404).json(…)`, `res.json(user)`) are references at their own line and column instead of framework noise, so the route's own reply box exists - tests: servers fixture (inline route's 200 beside the service's 404; a 202 set before), ui-effects - CHANGELOG Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01REFyW9hmNrxhwN5wxRoAkC
This commit is contained in:
co-authored by
Claude Fable 5
parent
77dc0ad2eb
commit
02430ccc32
@@ -4,7 +4,7 @@
|
||||
* access a database call names; the status a response site sends.
|
||||
*/
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { classifyEffect, responseStatus } from '../src/ui-server/api/effects';
|
||||
import { classifyEffect, implicitResponseStatus, responseStatus } from '../src/ui-server/api/effects';
|
||||
|
||||
const c = (text: string, language?: string, extra: Partial<Parameters<typeof classifyEffect>[0]> = {}) =>
|
||||
classifyEffect({ text, kind: 'calls', language: language as never, project: 'api', ...extra });
|
||||
@@ -244,3 +244,25 @@ describe('responseStatus', () => {
|
||||
expect(responseStatus('res.json', '')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('implicitResponseStatus', () => {
|
||||
it('a body-sending reply that sets no status is a 200', () => {
|
||||
expect(implicitResponseStatus('res.json')).toBe(200);
|
||||
expect(implicitResponseStatus('res.send')).toBe(200);
|
||||
expect(implicitResponseStatus('res.render')).toBe(200);
|
||||
expect(implicitResponseStatus('reply.send')).toBe(200);
|
||||
expect(implicitResponseStatus('c.json')).toBe(200);
|
||||
expect(implicitResponseStatus('NextResponse.json')).toBe(200);
|
||||
expect(implicitResponseStatus('JSONResponse')).toBe(200);
|
||||
expect(implicitResponseStatus('jsonify')).toBe(200);
|
||||
});
|
||||
it('is null when the chain sets a status — literal or not — or ends without a body', () => {
|
||||
expect(implicitResponseStatus('res.status(404).json')).toBeNull();
|
||||
expect(implicitResponseStatus('res.status(code).json')).toBeNull();
|
||||
expect(implicitResponseStatus('res.sendStatus(204)')).toBeNull();
|
||||
expect(implicitResponseStatus('res.end')).toBeNull();
|
||||
expect(implicitResponseStatus('res.redirect')).toBeNull();
|
||||
expect(implicitResponseStatus('NotFoundException')).toBeNull();
|
||||
expect(implicitResponseStatus('prisma.user.create')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user