# raven-test-integration memory ## Project purpose Integration test project for AyaNova v8 API. Target: net8.0. Run with: dotnet test raven-integration.csproj ## Key constants / config - API base: http://localhost:7575/api/v8/ (util.cs line 31) - Seeded logins: superuser (password: l3tm3in), BizAdmin, SubContractorRestricted - Seeded customer id=1 is always safe to reference in payloads - Time zone adjustment for date filters: -7 (util.cs TIME_ZONE_ADJUSTMENT) ## Known good enum values used in tests - ContractOverrideType: PriceDiscount=1, CostMarkup=2 - PMTimeUnit: Minutes=2, Hours=3, Days=4, Months=6, Years=7 - AyaDaysOfWeek (flags): Mon=1,Tue=2,Wed=4,Thu=8,Fri=16,Sat=32,Sun=64 — 96 = Saturday|Sunday (used in PM tests) ## DataList key names Class names in AyaNova.DataList namespace ARE the list keys. Examples: WorkOrderDataList, CustomerDataList, QuoteDataList, PMDataList, ContractDataList ## API response conventions - POST: 201, {data: full object} - GET: 200, {data: full object} - DELETE: 204, no body - Customer/QuoteItem/PMItem PUT: 200, {data: {Concurrency: N}} (just concurrency) - Quote/PM/Contract/WorkOrder header PUT: 200, {data: full object} - Concurrency conflict: 409 - Referential integrity violation: 400, error.code = 2200 - Not found: 404, error.code = 2010 ## Files written (Feb 2026 session) - Customer/CustomerCrud.cs — CRUD + concurrency + alert + referential integrity (2 tests) - Quote/QuoteCrud.cs — header CRUD + QuoteItem + QuoteItemLabor + concurrency + id-from-number - Contract/ContractCrud.cs — CRUD + concurrency (contract PUT returns full object) - PM/PMCrud.cs — header CRUD + PMItem + concurrency + id-from-number - DataList/DataListOperations.cs — SavedFilterCRUD (live) + filter/sort stubs (skipped) ## DataList saved filter route POST/GET/PUT/DELETE: /data-list-filter (NOT data-list-view — that was old) List endpoint: GET /data-list-filter/list?ListKey=WorkOrderDataList userId=0 in payload is fine; server assigns from auth token ## Todo.md coverage status Tier 1: DataList saved filter CRUD done; filter/sort stubs need browser payload capture Tier 1: Quote CRUD done Tier 1: Customer CRUD done Tier 2: Contract CRUD done Tier 2: PM CRUD done Tier 2: Auth roles, Schedule, Part — not yet started Tier 3: All not yet started