Repository navigation
test: cover untested FR-044 reporting features across conformance corpora - #423
Merged
Merged
Conversation
…el and every port Adds 12 reports to the canonical fitness model (and a Session entity) and grows the api-contract report corpus to four entities and nine reports, so the report corpora exercise vocabulary they did not before: multi-hop and self-referencing dimensions, day/quarter/year/hour/date time grains, min/max/avg/count-distinct over more column types, negative and decimal measure defaults over an empty table, measure filters on the remaining operators, segment and report filters combining like/in/or/ne, a two-hop @spine, and a TPH base as @from. - persistence-conformance: 10 new report query scenarios, all five ports - api-contract-conformance/report: 6 new scenarios (22 in all), all five ports - cube-model goldens and the live Cube lane cover the new reports - committed derived artifacts regenerated with the repo's own tools - test-harness fixes only: date and uuid operand coercion in the Java and C# runners, `like` and uuid in the seam lanes' in-memory report repositories, and the SQLite convergence test's known inet residue - removes a stray generated temp directory committed in #420, which turned the ts build + typecheck gate red on main No product port defect was found, so no CHANGELOG entry.
… and the MySQL Cube lane The engine lanes added in #421 now run all 19 report scenarios. The MySQL adopter tables gain the nodes, sessions, measurements, auths and all_types tables, the api-contract MySQL schema gains the disputed/category/sku columns, and the MySQL Cube lane covers all 21 served reports. A naive timestamp keeps its wall clock without a zone suffix on the SQLite and D1 wire form; two scenarios no longer depend on engine-specific NULL ordering or on a Postgres-only clock expression.
…e and read min/max timestamps there The Kotlin SQLite lane spells a DATE column's SQL type as TEXT, so the string operand of a date filter reached Exposed uncoerced; key the coercion on the column type as well. The report-time-min-max seed now spells its timestamps in the form the SQLite driver's date_string_format parses (fixture seed only; expect blocks unchanged).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds test reports to MetaObjects' own test metadata that exercise FR-044 reporting features the existing corpora did not, and makes them pass in every port.
fixtures/persistence-conformance/canonical/meta.fitness.json: 9 reports become 21, plus one new entity (Session) so a two-hop path and a to-one@spinethrough it exist.persistence-conformance: 10 new report query scenarios (19 report scenarios in all), run on all five ports against Postgres, and on SQLite, MySQL 8.4 and D1 wherever a port has those lanes (test(integration-tests): run report scenarios on SQLite, MySQL and D1 across ports #421).api-contract-conformance/report/: model grows to four entities (Invoice,Category,Product,Sale) and nine reports (eight served); 6 new scenarios (22 in all), run on all five ports in the generated lane.fixtures/cube-model/: goldens regenerated with the repo's own tool (12 new cubes, 1 new view); the live Cube lane covers the new reports on Postgres and, new in this branch, on MySQL 8.4 (all 21 served reports;seed.mysql.sqlextended to match).schema.postgres.sql,report-shapes.json, the C#Generated/*.g.cs, the Kotlintables/*View.kt, cube goldens) were regenerated, not hand-edited.Coverage inventory
Legend: P = persistence-conformance scenario, A = api-contract
report/scenario, C = cube-model corpus/live lane. "before" is what the corpora exercised at the start of this branch.@aggcount / sum@aggavgreport-numeric-types), currency (Preport-time-grains-extended)@aggmin / maxreport-time-min-max); float/double/decimal; currency; long (Preport-all-types-breakdown)@distinctcountreport-time-min-max,report-tph-base-filter)measure.ratio@defaulton measures-1on avg and0on decimal max over an EMPTY table (Preport-negative-default);-1under a no-match scope (Preport-filter-operators); defaulted vs undefaulted sum on a spine (Preport-multi-hop)@filteroperatorseq,in(P)isNulltrue/false,lt, a two-operator range,likeANDed with a segment,ne(Preport-measure-filters,report-filter-operators); Afilter-on-filtered-measuresegment.filterin a reporteq)oroflikeandeq,inlist (Preport-filter-operators)@filterP30Din,lt,ne,andwith a segment, a filter no row meets (Preport-filter-operators); relativePT1Hmixed withne(Preport-all-types-breakdown); discriminatorneon a TPH base (Preport-tph-base-filter)dimension.attribute, to-one, one hopdimension.attribute, multi-hop@viareport-multi-hop, Alist-multi-hop, Cdimension.attributethrough the entity's own referencereport-self-reference, Cdimension.attributeover bool / enum / int-backed nullable enum / date / uuidreport-all-types-breakdown; Afilter-boolean-dimension,filter-uuid-dimension,filter-on-string-dimension(like)dimension.timegrainsreport-time-grains-extended, Alist-two-grains), hour and date (Preport-time-min-max); several grains of one column at onceP30DPT1H@spinereport-multi-hop, A, CProgramSessionsview)@fromreport-tph-base-filterPort defects found
None in a product port. Every new scenario passed in all five ports once the fixture and the per-port test harnesses understood the new shapes. Harness gaps fixed (test code only, no shipped behaviour):
uuidoperand coercion (Java) and thelikeoperator (Python).field.datefilter operand is parsed toLocalDate, as the other ports' runners already coerce to the column's native type.DateOnly.field.datefilter operand is coerced by the column type (SQLite spells a DATE column's type as TEXT), and thereport-time-min-maxseed spells its timestamps in the form the SQLite driver'sdate_string_formatparses (seed only;expectblocks unchanged).nodes,sessions,measurements,auths,all_types); the api-contract MySQL schema gains the newInvoice/Category/Productcolumns; a naive (@localTime) timestamp keeps its zone-less wire form inengine-wire.ts; two scenarios no longer rest on engine-specific NULL ordering (report-self-reference) or a Postgres-only clock expression (report-all-types-breakdown).IntroprogramsLiveIntroProgramsneeds; two Cube-vs-view differences are kept as executed known differences (ProgramsEmptyScopeanswers null where the view answers 0/-1;ProgramsOverTimedeclares a rollup Cube never matches).codegen-ts/test/tmp-typed-create-sqlite-*directory that fix(verify,cli): verify --docs catches orphan model pages; hand-rolled-aggregate advice names object.report #420 committed by accident is removed.inettable change is the same residue as that change.No CHANGELOG line: nothing shipped changed.
Testing
scripts/ci-local.sh --quickgreen. The full run was green except the Kotlin SQLite lane; after the harness fix above, the Java, Python, C#, Kotlin (SQLite and MySQL) and TypeScript (Postgres, SQLite, MySQL, D1) integration lanes were each re-run green, and the Cube live lane passes.main, and the test step's evidence phase timing out); run 3 was authorized by the maintainer and is the last. Total gate runs: 3. Run 3 passed its baseline tests and finished with an approved test exception: the agent's live-evidence phase reported 'inconclusive' (it drove the TypeScript lanes live and the Cube lane 27/27, and asked for the Java, Kotlin, Python and C# lanes to be run). Those lanes were run locally before the gate and are green, as listed above.