Repository navigation
Playground JSON flowchartIds e links admin
Documentação técnica do contrato de metadados de flowchart no índice público do smoke-tests-playground (GET /tests e aliases).
Issue de origem: smoke-tests-playground#7
Programa pai: app-community#601 (smokes E2E do flowchart Venda / produção, admin id 1, flowKey=sales-production)
Código canônico (master): SmokeFlowchartMetadata, SmokeTestsIndexFactory, SmokeReportReader / SmokeXmlReportParser
Permitir que cada suite (e, opcionalmente, cada teste) declare vínculo com os flowcharts publicados no admin, para:
- organizar e filtrar o índice agregado por flowchart;
- expor links estáveis para a UI do admin (
/admin/flowcharts/{id}); - manter suites legadas sem o campo (compatibilidade:
flowchartIds: []).
O playground não inventa vínculo. Só propaga o que o report declarar (ou o que já estiver em links válidos do admin).
| Em escopo | Fora de escopo |
|---|---|
Contrato JSON do índice (GET /tests) |
Implementação dos smokes Playwright |
Normalização de IDs / links / flowKey
|
UI HTML no bundle |
Agrupamento flowcharts[] no índice |
Autorização ou multi-tenant no index (metadados de report apenas) |
Extração a partir de report.json / campos no payload remoto |
Alteração do catálogo de flowcharts no admin |
| Classe | Papel |
|---|---|
SmokeFlowchartMetadata |
Normaliza flowchartIds, monta flowchartLinks, extrai flowKey, enriquece suite/testes e agrupa suites por id |
SmokeTestsIndexFactory |
Monta o índice: enriquece cada suite via metadata e publica summary.flowcharts + flowcharts[]
|
SmokeReportReader / SmokeXmlReportParser
|
Leitura local de reports; campos de flowchart passam no payload de suite quando presentes no JSON (ou equivalentes no fluxo de parse) |
SmokeRemoteIndexReader |
Suites remotas também passam por enrichSuite
|
Base de URL fixa (não configurável por env nesta entrega):
https://admin.controleonline.com/admin/flowcharts
Constante: SmokeFlowchartMetadata::ADMIN_FLOWCHART_BASE.
Campos adicionados (ou normalizados) em cada suite do índice:
| Campo | Tipo | Regra |
|---|---|---|
flowchartIds |
list<int> |
IDs positivos únicos; vazio se o report não declarar |
flowchartLinks |
list<string> |
Uma URL por id: {ADMIN_FLOWCHART_BASE}/{id}
|
flowKey |
string | null |
Chave opcional (sales-production, etc.); não implica id |
Os mesmos campos podem aparecer em cada item de tests[]:
- se o teste declarar IDs próprios, usa a normalização do teste;
- senão, herda o metadata da suite;
-
flowKeydo teste, se presente, prevalece sobre o da suite.
A partir de um array-fonte (suite ou teste), normalize() considera, sem inventar id a partir só do nome da suite:
-
flowchartIds/flowchart_ids(lista ou escalar) -
flowchartId/flowchart_id -
flowchart.id/flowchart.ids -
flowchartLinks/flowchart_links— extrai id via regex#/admin/flowcharts/(\d+)# -
flowKey/flow_key/flowchartKey
Importante: flowKey=sales-production sozinho não gera flowchartIds: [1]. O vínculo numérico precisa ser declarado (ou recuperável de um link válido do admin).
{
"suite": "balcao-prepaid",
"displayName": "Balcão prepaid",
"flowchartIds": [1],
"flowchartLinks": [
"https://admin.controleonline.com/admin/flowcharts/1"
],
"flowKey": "sales-production",
"tests": [
{
"title": "pedido prepaid",
"status": "passed",
"flowchartIds": [1],
"flowchartLinks": [
"https://admin.controleonline.com/admin/flowcharts/1"
],
"flowKey": "sales-production"
}
]
}{
"suite": "legacy-suite",
"flowchartIds": [],
"flowchartLinks": [],
"flowKey": null
}Além de enriquecer cada suite, o factory publica:
{
"summary": {
"flowcharts": {
"total": 1
}
},
"flowcharts": [
{
"id": 1,
"link": "https://admin.controleonline.com/admin/flowcharts/1",
"flowKeys": ["sales-production"],
"suites": [ /* suites que declararam id 1 */ ]
}
]
}Regras de groupSuites:
- só entra suite com
flowchartIdsnão vazio; - uma suite pode aparecer em mais de um id se declarar vários;
-
flowKeysé lista única de chaves não vazias vistas nas suites daquele id; - ordenação numérica crescente por
id.
Isso permite filtrar/agrupar no consumidor (tests-frontend-tool ou scripts) sem varrer todas as suites.
flowchart LR
local["SmokeReportReader<br/>var/tests/**/report.*"] --> enrich
remote["SmokeRemoteIndexReader"] --> enrich
enrich["SmokeFlowchartMetadata.enrichSuite"] --> sort["usort suites"]
sort --> index["SmokeTestsIndexFactory.create"]
index --> out["GET /tests<br/>types + suites + flowcharts"]
- Descobre reports locais e suites remotas.
- Cada payload passa por
enrichSuite(IDs/links/flowKey+ propagação aos testes). - Ordena suites por timestamp / id.
- Constrói seções
types,summaryeflowcharts(agrupamento).
Inalteradas em path; o payload do índice ganha os campos acima:
GET /testsGET /tests/index.jsonGET /tests/api
Compatibilidade: consumidores antigos que ignoram campos extras continuam válidos. Suites sem declaração não quebram o schema (listas vazias / flowKey null).
O playground é infra de qualidade, não uma visão de produto (MANAGER, POS, PPC, etc.).
-
Não substitui o admin de flowcharts nem a API
GET /flowcharts/{id}. -
Não decide regras de negócio de venda/produção; apenas amarra suites de smoke ao diagrama oficial (ex.: admin id
1). - Os smokes que cobrem jornadas reais (balcão, garçom/mesa, multi-comanda, PCP, delivery) vivem nos módulos de produto e no programa app-community#601; este módulo só indexa e linka.
Referência visual do fluxo id 1: admin flowchart 1.
tests/Service/SmokeFlowchartMetadataTest.php cobre, entre outros:
- report sem IDs → listas vazias e
flowKeynull; - IDs declarados → links admin corretos +
flowKey; -
flowKeysozinho não inventa id; - extração de id a partir de
flowchartLinksválidos; - propagação suite → testes e agrupamento
groupSuites.
Arquivos da entrega permanecem ≤ 500 linhas (SmokeFlowchartMetadata, factory, reader, parser).
- Novos flowcharts no admin: o smoke declara
flowchartIds(e opcionalmenteflowKey) no report; o índice passa a listar o id e o link sem mudança de código no playground. - Não hardcode lista de ids no factory — a fonte é o report.
- Se a base pública do admin mudar de host/path, atualizar
ADMIN_FLOWCHART_BASEe os testes de link. - Manter a regra “não inventar vínculo” ao estender o parser (XML/JSON).
| Destino | URL |
|---|---|
| Issue #7 | https://github.com/ControleOnline/smoke-tests-playground/issues/7 |
| Programa pai #601 | https://github.com/ControleOnline/app-community/issues/601 |
| Admin flowchart 1 | https://admin.controleonline.com/admin/flowcharts/1 |
| Home deste módulo | Home |
| Instalação | Instalacao |
| Wiki API | https://github.com/ControleOnline/api-community/wiki |
| Wiki App | https://github.com/ControleOnline/app-community/wiki |
Código SmokeFlowchartMetadata
|
https://github.com/ControleOnline/smoke-tests-playground/blob/master/src/Service/SmokeFlowchartMetadata.php |
Código SmokeTestsIndexFactory
|
https://github.com/ControleOnline/smoke-tests-playground/blob/master/src/Service/SmokeTestsIndexFactory.php |