feat: cabecalhos clicaveis para ordenar (crescente/decrescente) a lista de clientes
Codigo, Razao, Fantasia e CNPJ agora sao links no cabecalho da tabela: clicar ordena crescente; clicar de novo na mesma coluna alterna pra decrescente (e vice-versa). Trocar de coluna sempre comeca em crescente. Seta (▲/▼) indica a coluna/direcao ativa. db_clientes.listar_clientes() ganha o parametro direcao (whitelist asc/desc, igual ja acontecia com ordenar_por). Links de Anterior/Proxima da paginacao preservam a direcao escolhida. 97/97 testes passando.
This commit is contained in:
@@ -106,6 +106,29 @@ def test_listar_clientes_ordenacao_invalida_usa_padrao(cliente_id):
|
||||
assert any(c["CODIGO"] == "999901" for c in resultado)
|
||||
|
||||
|
||||
def test_listar_clientes_direcao_asc_e_desc(cliente_id):
|
||||
# Dois clientes de teste com códigos diferentes, mesma busca por RAZAO,
|
||||
# pra comparar a ordem entre asc/desc de forma determinística.
|
||||
outro_id = db_clientes.criar_cliente(dict(CLIENTE_TESTE, CODIGO="999905"))
|
||||
try:
|
||||
asc = db_clientes.listar_clientes(busca="TESTE PAINEL RAZAO", ordenar_por="codigo", direcao="asc")
|
||||
desc = db_clientes.listar_clientes(busca="TESTE PAINEL RAZAO", ordenar_por="codigo", direcao="desc")
|
||||
codigos_asc = [c["CODIGO"] for c in asc]
|
||||
codigos_desc = [c["CODIGO"] for c in desc]
|
||||
assert codigos_asc == sorted(codigos_asc)
|
||||
assert codigos_desc == sorted(codigos_desc, reverse=True)
|
||||
finally:
|
||||
_limpar("999905")
|
||||
|
||||
|
||||
def test_listar_clientes_direcao_invalida_usa_padrao_asc(cliente_id):
|
||||
# Não deve quebrar nem virar SQL arbitrário — cai em ASC.
|
||||
resultado = db_clientes.listar_clientes(
|
||||
busca="999901", ordenar_por="codigo", direcao="ASC; DROP TABLE CLIENTE"
|
||||
)
|
||||
assert resultado[0]["CODIGO"] == "999901"
|
||||
|
||||
|
||||
def test_proximo_codigo_sugerido_ignora_faixa_de_teste(cliente_id):
|
||||
# CLIENTE_TESTE usa CODIGO "999901" (faixa reservada para teste, >= 900000)
|
||||
# — a sugestão não pode considerar isso, senão qualquer sobra de dado de
|
||||
|
||||
Reference in New Issue
Block a user