Files
GTI_GERENCIADOR_FISCAL/tests/test_router_chave_manual.py
T
Gustavo 361c2ca770 feat: gerador de chave de instalacao (aluguel/compra) na tela /gerador-chave
Adiciona a segunda rotina recuperada do Chave.exe original: chave de
instalacao (8 caracteres tipicos), ao lado da chave de reativacao ja
existente na mesma tela, com um seletor de tipo.

Algoritmo (confirmado matematicamente contra os 3 exemplos reais
fornecidos, byte a byte):
- codigoCliente * 19 + 31 vira um numero inserido sem cifrar no meio
  da chave final.
- A modalidade ("30"=ALUGUEL / "00"=COMPRA) e cifrada com o MESMO
  algoritmo/chave interna ja usado na reativacao (soma modular + XOR),
  gerando 6 hex (3 bytes: 1 aleatorio + 2 cifrados).
- Chave final = 3 primeiros hex + valor do cliente + 3 ultimos hex.

100% client-side (mesmo js puro da reativacao), nunca grava no banco.
Verifiquei os 3 exemplos (DC45092C, 2E35083D, 3D25090C) reproduzindo
o algoritmo em Python antes de trocar o JS - bateram exatamente.

106/106 testes passando.
2026-08-13 16:08:48 -03:00

26 lines
845 B
Python

from fastapi import FastAPI
from fastapi.testclient import TestClient
from app.auth import exigir_login
from app.routers import chave_manual as router_chave_manual
app_teste = FastAPI()
app_teste.include_router(router_chave_manual.router)
app_teste.dependency_overrides[exigir_login] = lambda: "teste"
client = TestClient(app_teste)
def test_pagina_gerador_carrega():
resposta = client.get("/gerador-chave")
assert resposta.status_code == 200
assert "gerarReativacao" in resposta.text
assert "gerarInstalacao" in resposta.text
assert "Gerador de Chave" in resposta.text
def test_pagina_gerador_nao_grava_nada():
# Rota é GET-only: não existe POST /gerador-chave, então não há como
# este router gravar em Clientes_Chaves.
resposta = client.post("/gerador-chave")
assert resposta.status_code == 405