feat(ui): Steps for servers — route roots, server effects, request/decorator triggers, guards for Python/Java/Kotlin/C#/Go/C
- api/route-roots.ts: the symbol a route runs (references-edge handler, exported page component, or the route itself for an inline handler), shared by steps and screens; the bare Steps tab lists an API's endpoints by router file - api/effects.ts: database / response / queue / email / payments / cache / auth / process / network / storage / device / telemetry, matched on the call as written per language family, with model + read/write and the literal status on a response site - graph/branch-guards.ts: callSitesForFile (the whole member chain), memberTypesInTree, decoratorsForFile, request/decorator triggers with the middleware/guard chain; guard + argument rules for Python, Java, Kotlin, C#, Go and C - steps.ts: classify on the chain before trusting a name match, retarget this.x.y() by declared type, skip test doubles after the effect pre-check, project kind on the wire - viewer: kindWord/kindWords per project kind, endpoint chooser, response boxes labelled by status codes - python.ts: FastAPI detected from a monorepo sub-directory; is-test-file: samples/examples package paths are not tests - tests: ui-steps-api-servers, ui-effects, branch-guards-languages; spec §3.13 Servers paragraph, CHANGELOG, plan doc 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
5e06204deb
commit
950686def4
@@ -13,6 +13,26 @@ import { describe, it, expect } from 'vitest';
|
||||
import { isTestFile } from '../src/search/query-utils';
|
||||
|
||||
describe('isTestFile', () => {
|
||||
it('flags test-support modules and doubles by directory name', () => {
|
||||
expect(isTestFile('core/data-test/src/main/kotlin/com/example/FakeUserDataRepository.kt')).toBe(true);
|
||||
expect(isTestFile('core/datastore-test/src/main/kotlin/com/example/InMemoryDataStore.kt')).toBe(true);
|
||||
expect(isTestFile('core/testing/src/main/kotlin/com/example/TestUserDataRepository.kt')).toBe(true);
|
||||
expect(isTestFile('pkg/testdata/fixture.go')).toBe(true);
|
||||
expect(isTestFile('src/__mocks__/api.ts')).toBe(true);
|
||||
expect(isTestFile('internal/testutil/helpers.go')).toBe(true);
|
||||
});
|
||||
|
||||
it('does NOT flag production code whose package path runs through a samples or examples segment', () => {
|
||||
// Only the project layout above `src/` decides; the package path below it never does.
|
||||
expect(isTestFile('core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt')).toBe(false);
|
||||
expect(isTestFile('feature/foryou/impl/src/main/kotlin/com/google/samples/apps/ForYouViewModel.kt')).toBe(false);
|
||||
expect(isTestFile('src/samples/demo.ts')).toBe(false);
|
||||
// …while a real examples folder in the layout still counts.
|
||||
expect(isTestFile('examples/basic/src/index.ts')).toBe(true);
|
||||
expect(isTestFile('packages/x/examples/basic.ts')).toBe(true);
|
||||
expect(isTestFile('benchmarks/run.py')).toBe(true);
|
||||
});
|
||||
|
||||
it('flags Kotlin test files and source sets', () => {
|
||||
expect(isTestFile('okhttp/src/jvmTest/kotlin/okhttp3/CallTest.kt')).toBe(true);
|
||||
expect(isTestFile('okhttp/src/commonTest/kotlin/okhttp3/CompressionInterceptorTest.kt')).toBe(true);
|
||||
|
||||
Reference in New Issue
Block a user