feat: filtro de status (ativos/inativos/todos) na rota de listagem
This commit is contained in:
@@ -58,6 +58,7 @@ def _form_valido(codigo: str = "000001") -> dict:
|
||||
"DATA_CONTRATO": "2026-01-01",
|
||||
"VENCIMENTO_CONTRATO": "2027-01-01",
|
||||
"DIA_VENCIMENTO": "10",
|
||||
"ATIVO": "1",
|
||||
"csrf_token": CSRF_TESTE,
|
||||
}
|
||||
)
|
||||
@@ -103,9 +104,9 @@ def test_listar_clientes_por_pagina_padrao_e_15(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": capturado.setdefault("limite", limite) and [],
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: capturado.setdefault("limite", limite) and [],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 3)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:3)
|
||||
|
||||
resposta = client.get("/clientes")
|
||||
assert resposta.status_code == 200
|
||||
@@ -117,9 +118,9 @@ def test_listar_clientes_por_pagina_da_query_e_usada_e_grava_cookie(monkeypatch)
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": capturado.setdefault("limite", limite) and [],
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: capturado.setdefault("limite", limite) and [],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 3)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:3)
|
||||
|
||||
resposta = client.get("/clientes?por_pagina=50")
|
||||
assert resposta.status_code == 200
|
||||
@@ -132,9 +133,9 @@ def test_listar_clientes_usa_cookie_quando_sem_por_pagina_na_query(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": capturado.setdefault("limite", limite) and [],
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: capturado.setdefault("limite", limite) and [],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 3)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:3)
|
||||
|
||||
resposta = client.get("/clientes", cookies={router_clientes.POR_PAGINA_COOKIE: "30"})
|
||||
assert resposta.status_code == 200
|
||||
@@ -146,9 +147,9 @@ def test_listar_clientes_por_pagina_invalida_na_query_cai_no_padrao_e_nao_grava_
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": capturado.setdefault("limite", limite) and [],
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: capturado.setdefault("limite", limite) and [],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 3)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:3)
|
||||
|
||||
resposta = client.get("/clientes?por_pagina=999")
|
||||
assert resposta.status_code == 200
|
||||
@@ -156,15 +157,75 @@ def test_listar_clientes_por_pagina_invalida_na_query_cai_no_padrao_e_nao_grava_
|
||||
assert router_clientes.POR_PAGINA_COOKIE not in resposta.cookies
|
||||
|
||||
|
||||
def test_listar_clientes_status_padrao_e_ativos(monkeypatch):
|
||||
capturado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: (capturado.__setitem__("filtro_ativo", filtro_ativo), [])[1],
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"contar_clientes",
|
||||
lambda busca=None, ordenar_por="razao", filtro_ativo=1: 0,
|
||||
)
|
||||
|
||||
resposta = client.get("/clientes")
|
||||
assert resposta.status_code == 200
|
||||
assert capturado["filtro_ativo"] == 1
|
||||
|
||||
|
||||
def test_listar_clientes_status_inativos_usa_filtro_zero(monkeypatch):
|
||||
capturado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: (capturado.__setitem__("filtro_ativo", filtro_ativo), [])[1],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1: 0)
|
||||
|
||||
resposta = client.get("/clientes?status=inativos")
|
||||
assert resposta.status_code == 200
|
||||
assert capturado["filtro_ativo"] == 0
|
||||
|
||||
|
||||
def test_listar_clientes_status_todos_sem_filtro(monkeypatch):
|
||||
capturado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: (capturado.__setitem__("filtro_ativo", filtro_ativo), [])[1],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1: 0)
|
||||
|
||||
resposta = client.get("/clientes?status=todos")
|
||||
assert resposta.status_code == 200
|
||||
assert capturado["filtro_ativo"] is None
|
||||
|
||||
|
||||
def test_listar_clientes_status_invalido_cai_no_padrao(monkeypatch):
|
||||
capturado = {}
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: (capturado.__setitem__("filtro_ativo", filtro_ativo), [])[1],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1: 0)
|
||||
|
||||
resposta = client.get("/clientes?status=lixo_qualquer")
|
||||
assert resposta.status_code == 200
|
||||
assert capturado["filtro_ativo"] == 1
|
||||
|
||||
|
||||
def test_listar_clientes(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": [
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: [
|
||||
{"ID": 1, "CODIGO": "000001", "RAZAO": "Cliente Um", "FANTASIA": "Um", "CNPJ": "11222333000181"}
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 1)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:1)
|
||||
resposta = client.get("/clientes")
|
||||
assert resposta.status_code == 200
|
||||
assert "Cliente Um" in resposta.text
|
||||
@@ -174,9 +235,9 @@ def test_listar_clientes_inclui_csrf_token_no_contexto(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": [],
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: [],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 0)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:0)
|
||||
|
||||
resposta = client.get("/clientes")
|
||||
assert resposta.status_code == 200
|
||||
@@ -191,11 +252,11 @@ def test_listar_clientes_tem_botao_de_gerar_chave_por_linha(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": [
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: [
|
||||
{"ID": 1, "CODIGO": "000042", "RAZAO": "Cliente Um", "FANTASIA": "Um", "CNPJ": "11222333000181"}
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 1)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:1)
|
||||
|
||||
resposta = client.get("/clientes")
|
||||
assert resposta.status_code == 200
|
||||
@@ -208,12 +269,12 @@ def test_listar_clientes_pagina_com_controles_de_paginacao(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": [
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: [
|
||||
{"ID": i, "CODIGO": f"{i:06d}", "RAZAO": f"Cliente {i}", "FANTASIA": f"C{i}", "CNPJ": "11222333000181"}
|
||||
for i in range(1, 6)
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 250)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:250)
|
||||
|
||||
resposta = client.get("/clientes?pagina=2&por_pagina=100")
|
||||
assert resposta.status_code == 200
|
||||
@@ -226,12 +287,12 @@ def test_listar_clientes_footer_com_selecao_de_por_pagina(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": [
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: [
|
||||
{"ID": i, "CODIGO": f"{i:06d}", "RAZAO": f"Cliente {i}", "FANTASIA": f"C{i}", "CNPJ": "1"}
|
||||
for i in range(1, 16)
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 98)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:98)
|
||||
|
||||
resposta = client.get("/clientes?pagina=1")
|
||||
assert resposta.status_code == 200
|
||||
@@ -243,7 +304,7 @@ def test_listar_clientes_footer_com_selecao_de_por_pagina(monkeypatch):
|
||||
|
||||
def test_listar_clientes_paginacao_com_reticencias_quando_muitas_paginas(monkeypatch):
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "listar_clientes", lambda **kwargs: [])
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 500)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:500)
|
||||
|
||||
# 500 / 5 = 100 paginas, pedindo a pagina 10 (no meio) -> tem reticencias
|
||||
resposta = client.get("/clientes?pagina=10&por_pagina=5")
|
||||
@@ -254,12 +315,12 @@ def test_listar_clientes_paginacao_com_reticencias_quando_muitas_paginas(monkeyp
|
||||
def test_listar_clientes_ordenar_por_invalido_cai_no_padrao(monkeypatch):
|
||||
capturado = {}
|
||||
|
||||
def _listar_clientes(busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc"):
|
||||
def _listar_clientes(busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1):
|
||||
capturado["ordenar_por"] = ordenar_por
|
||||
return []
|
||||
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "listar_clientes", _listar_clientes)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 0)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:0)
|
||||
|
||||
client.get("/clientes?ordenar_por=coisa_invalida_qualquer")
|
||||
assert capturado["ordenar_por"] == "razao"
|
||||
@@ -272,7 +333,7 @@ def test_cabecalhos_da_lista_alternam_direcao(monkeypatch):
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes, "listar_clientes", lambda **kwargs: []
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 0)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:0)
|
||||
|
||||
# Sem ordenar_por/direcao na URL: padrão é razao/asc. Clicar de novo em
|
||||
# "Razão" deve levar pra desc; clicar em "Código" (coluna diferente da
|
||||
@@ -296,12 +357,12 @@ def test_busca_com_e_comercial_nao_quebra_links_de_paginacao_e_ordenacao(monkeyp
|
||||
monkeypatch.setattr(
|
||||
router_clientes.db_clientes,
|
||||
"listar_clientes",
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc": [
|
||||
lambda busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1: [
|
||||
{"ID": i, "CODIGO": f"{i:06d}", "RAZAO": f"Cliente {i}", "FANTASIA": f"C{i}", "CNPJ": "1"}
|
||||
for i in range(1, 6)
|
||||
],
|
||||
)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 250)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:250)
|
||||
|
||||
resposta = client.get("/clientes?pagina=2&busca=A%26B")
|
||||
assert resposta.status_code == 200
|
||||
@@ -312,12 +373,12 @@ def test_busca_com_e_comercial_nao_quebra_links_de_paginacao_e_ordenacao(monkeyp
|
||||
def test_listar_clientes_direcao_invalida_cai_no_padrao(monkeypatch):
|
||||
capturado = {}
|
||||
|
||||
def _listar_clientes(busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc"):
|
||||
def _listar_clientes(busca=None, limite=100, offset=0, ordenar_por="razao", direcao="asc", filtro_ativo=1):
|
||||
capturado["direcao"] = direcao
|
||||
return []
|
||||
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "listar_clientes", _listar_clientes)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao": 0)
|
||||
monkeypatch.setattr(router_clientes.db_clientes, "contar_clientes", lambda busca=None, ordenar_por="razao", filtro_ativo=1:0)
|
||||
|
||||
client.get("/clientes?direcao=coisa_invalida")
|
||||
assert capturado["direcao"] == "asc"
|
||||
|
||||
Reference in New Issue
Block a user