Files
crr-tools/migration/phase3/compatibility.json
T
jfmcarreira 561b6a2da9
App checks / changes (push) Canceled after 0s
App checks / tournament (push) Canceled after 0s
App checks / shifts (push) Canceled after 0s
feat: monorepo migration phase 3
2026-10-07 11:38:43 +01:00

189 lines
6.9 KiB
JSON

{
"passed": 44,
"tests": [
{
"name": "tournament manager HTTP API rejects unauthenticated administration and accepts only the configured login password",
"status": "passed"
},
{
"name": "tournament manager HTTP API scopes the administration session cookie to the deployment path",
"status": "passed"
},
{
"name": "tournament manager HTTP API publishes the admin-selected panel and zoom to the public display state",
"status": "passed"
},
{
"name": "tournament manager HTTP API notifies connected displays when the selected panel changes",
"status": "passed"
},
{
"name": "tournament manager HTTP API creates teams in Grupo A and rejects globally duplicated team numbers",
"status": "passed"
},
{
"name": "tournament manager HTTP API assigns the next team number when creating a team without one",
"status": "passed"
},
{
"name": "tournament manager HTTP API manages groups and prevents deleting nonempty or final groups",
"status": "passed"
},
{
"name": "tournament manager HTTP API previews and saves the exact one-leg schedule for four teams",
"status": "passed"
},
{
"name": "tournament manager HTTP API rejects generation when no group can produce a match",
"status": "passed"
},
{
"name": "tournament manager HTTP API keeps a round out of the standings until an administrator enables it",
"status": "passed"
},
{
"name": "tournament manager HTTP API ranks total game points and resolves equal totals by the direct match",
"status": "passed"
},
{
"name": "tournament manager HTTP API generates only intra-group games with persisted rounds and aligned public classifications",
"status": "passed"
},
{
"name": "tournament manager HTTP API previews a second leg that exactly mirrors the first with reversed venues",
"status": "passed"
},
{
"name": "tournament manager HTTP API rejects tampered and stale calendar generation descriptors",
"status": "passed"
},
{
"name": "tournament manager HTTP API requires confirmation to replace a scored calendar and clears scores when confirmed",
"status": "passed"
},
{
"name": "tournament manager HTTP API randomizes existing team numbers and group assignments after confirmation",
"status": "passed"
},
{
"name": "tournament manager HTTP API configures and advances a final stage that is exposed through public state",
"status": "passed"
},
{
"name": "tournament manager HTTP API accepts the next-match display panel",
"status": "passed"
},
{
"name": "tournament manager HTTP API previews automatic final-stage qualification from group standings",
"status": "passed"
},
{
"name": "final seeding uses standard bracket seed placement",
"status": "passed"
},
{
"name": "final seeding crosses the top two teams from two groups in the semi-finals",
"status": "passed"
},
{
"name": "final seeding leaves lower seeds empty when the bracket has extra slots",
"status": "passed"
},
{
"name": "final seeding can select the best teams across all groups",
"status": "passed"
},
{
"name": "calculateBracket faz avan\u00e7ar vencedores entre v\u00e1rias rondas e determina o campe\u00e3o",
"status": "passed"
},
{
"name": "calculateBracket n\u00e3o faz avan\u00e7ar um empate que a API deve rejeitar",
"status": "passed"
},
{
"name": "calculateBracket faz avan\u00e7ar uma equipa automaticamente num bye e deixa jogos vazios por apurar",
"status": "passed"
},
{
"name": "calculateBracket cria o jogo do 3.\u00ba lugar com os derrotados das meias-finais",
"status": "passed"
},
{
"name": "calculateBracket identifica todos os resultados a invalidar ap\u00f3s mudar um jogo a montante",
"status": "passed"
},
{
"name": "generateRoundRobinSchedule gera as tr\u00eas jornadas de um grupo par com quatro equipas",
"status": "passed"
},
{
"name": "generateRoundRobinSchedule suporta um grupo \u00edmpar atrav\u00e9s de uma folga por jornada",
"status": "passed"
},
{
"name": "generateRoundRobinSchedule combina grupos ordenados nas mesmas jornadas sem cruzar nem repetir equipas",
"status": "passed"
},
{
"name": "generateRoundRobinSchedule anexa uma segunda volta que espelha exatamente a primeira",
"status": "passed"
},
{
"name": "generateRoundRobinSchedule agenda todos os pares uma vez por volta",
"status": "passed"
},
{
"name": "generateRoundRobinSchedule n\u00e3o altera a lista nem a ordem recebidas",
"status": "passed"
},
{
"name": "generateRoundRobinSchedule rejeita um n\u00famero de voltas inv\u00e1lido mesmo quando o tipo \u00e9 contornado",
"status": "passed"
},
{
"name": "calculateClassification mant\u00e9m a classifica\u00e7\u00e3o standard como modo predefinido",
"status": "passed"
},
{
"name": "calculateClassification calcula vit\u00f3rias, empates, derrotas e ignora resultados incompletos",
"status": "passed"
},
{
"name": "calculateClassification ordena por pontos, diferen\u00e7a de golos e golos marcados",
"status": "passed"
},
{
"name": "calculateClassification usa confronto direto para equipas empatadas nos crit\u00e9rios principais",
"status": "passed"
},
{
"name": "calculateClassification usa o n\u00famero da equipa como \u00faltimo crit\u00e9rio determin\u00edstico",
"status": "passed"
},
{
"name": "calculateClassification total-points soma os resultados marcados por cada equipa nos pontos",
"status": "passed"
},
{
"name": "calculateClassification total-points resolve totais empatados pelo confronto direto, n\u00e3o pela diferen\u00e7a global",
"status": "passed"
},
{
"name": "calculateClassification total-points usa o n\u00famero da equipa como fallback determin\u00edstico",
"status": "passed"
},
{
"name": "calculateClassification total-points ignora jogos incompletos sem acumular resultados ou estat\u00edsticas",
"status": "passed"
}
],
"contract_sha256": {
"src/server/app.integration.test.ts": "a8d16cedbfbfcacc33f234c4fe60e09078dac117953a3254106d0a701865488c",
"src/server/services/calendar.test.ts": "3ed80358e56a2447242f0d5e8907ac558cde9983149ed618e63cfc530c189248",
"src/server/services/classification.test.ts": "83eddf6ee8b6f1779d0c5488cbf34ed3e6e4f4777172ad37cee42fc060d62e91",
"src/server/services/bracket.test.ts": "9a930d995b020751609bc70658e5a3514cbc0feb559fb51e0ed6dbd2d9a9dbc6",
"src/shared/finalSeeding.test.ts": "5e4a3ea66324d0b488a29109263495c0d5ee5c831a149e659b2e5dfd9b23a99b"
}
}