namespace Cepis.Tests;
/// Bodies the API really returns, copied from it.
public static class Fixtures
{
/// A CEP with a street-precision coordinate.
public const string SeAddress = """
{"cep":"01001000","logradouro":"Praça da Sé","complemento":"lado ímpar",
"unidade":"","bairro":"Sé","localidade":"São Paulo","uf":"SP",
"estado":"São Paulo","regiao":"Sudeste","ibge":"3550308","gia":"1004",
"ddd":"11","siafi":"7107",
"geo":{"lat":-23.567202,"lon":-46.649659,"raio_m":1084,"precisao":"logradouro"}}
""";
/// A CEP the database has no coordinate for.
public const string NoGeoAddress = """
{"cep":"20040020","logradouro":"Avenida Rio Branco","complemento":"",
"unidade":"","bairro":"Centro","localidade":"Rio de Janeiro","uf":"RJ",
"estado":"Rio de Janeiro","regiao":"Sudeste","ibge":"3304557","gia":"",
"ddd":"21","siafi":"6001"}
""";
/// A coordinate whose numbers cannot be read.
public const string BrokenGeoAddress = """
{"cep":"01001000","logradouro":"Praça da Sé","complemento":"","unidade":"",
"bairro":"Sé","localidade":"São Paulo","uf":"SP","estado":"São Paulo",
"regiao":"Sudeste","ibge":"3550308","gia":"1004","ddd":"11","siafi":"7107",
"geo":{"lat":"nowhere","precisao":"logradouro"}}
""";
/// A response carrying a field this library does not model.
public const string FutureAddress = """
{"cep":"01001000","logradouro":"Praça da Sé","complemento":"","unidade":"",
"bairro":"Sé","localidade":"São Paulo","uf":"SP","estado":"São Paulo",
"regiao":"Sudeste","ibge":"3550308","gia":"1004","ddd":"11","siafi":"7107",
"cep_pai":"01000000"}
""";
/// The 404 body.
public const string NotFound =
"""{"erro":"cep_nao_encontrado","mensagem":"CEP não existe na base do DNE"}""";
///
/// The 404 body for a CEP inside a municipality's range. The CEP that draws
/// it is 25845000 — the DNE's own start for Areal, and a CEP that was never
/// issued.
///
public const string NotFoundWithFaixa = """
{"erro":"cep_nao_encontrado","mensagem":"CEP não existe na base do DNE",
"faixa":{"localidade":"Areal","uf":"RJ","estado":"Rio de Janeiro",
"regiao":"Sudeste","ibge":"3300225","cep_ini":"25845001",
"cep_fim":"25849899","ceps":118}}
""";
/// A 404 whose range block is not even an object.
public const string NotFoundBrokenFaixa = """
{"erro":"cep_nao_encontrado","mensagem":"CEP não existe na base do DNE",
"faixa":"Areal"}
""";
/// A 404 whose range block names no municipality.
public const string NotFoundNamelessFaixa = """
{"erro":"cep_nao_encontrado","mensagem":"CEP não existe na base do DNE",
"faixa":{"uf":"RJ","cep_ini":"25845001","cep_fim":"25849899","ceps":118}}
""";
/// The 400 body.
public const string InvalidCep =
"""{"erro":"cep_invalido","mensagem":"CEP deve ter 8 dígitos"}""";
/// The 500 body.
public const string InternalError = """{"erro":"interno","mensagem":"falha interna"}""";
/// A healthy API.
public const string Healthy = """
{"status":"ok","dne":"26071","ceps":1596168,"geo":894489,
"base_gerada_em":"2026-07-24T03:48:28Z"}
""";
/// The batch header row.
public const string CsvHeader =
"cep,logradouro,complemento,unidade,bairro,localidade,uf,estado,regiao,ibge,gia,ddd,siafi";
/// Three CEPs, the middle one absent from the database.
public const string CsvBatch = CsvHeader + "\n"
+ "01001000,Praça da Sé,lado ímpar,,Sé,São Paulo,SP,São Paulo,Sudeste,3550308,1004,11,7107\n"
+ "99999999,,,,,,,,,,,,\n"
+ "20040020,Avenida Rio Branco,,,Centro,Rio de Janeiro,RJ,Rio de Janeiro,Sudeste,3304557,,21,6001\n";
/// One data row for a CEP, in the batch's column order.
public static string CsvRow(string cep) =>
$"{cep},Rua Teste,,,Centro,Cidade,SP,São Paulo,Sudeste,3550308,,11,7107";
}