summaryrefslogtreecommitdiffstats
path: root/tests/server
diff options
context:
space:
mode:
Diffstat (limited to 'tests/server')
-rw-r--r--tests/server/router.php53
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/server/router.php b/tests/server/router.php
new file mode 100644
index 0000000..e082027
--- /dev/null
+++ b/tests/server/router.php
@@ -0,0 +1,53 @@
+<?php
+
+declare(strict_types=1);
+
+$state = getenv('CEPIS_TEST_STATE');
+if ($state === false) {
+ http_response_code(500);
+ echo 'CEPIS_TEST_STATE is not set';
+
+ return true;
+}
+
+$uri = $_SERVER['REQUEST_URI'] ?? '/';
+file_put_contents($state . '/calls.log', $uri . "\n", FILE_APPEND | LOCK_EX);
+
+$routes = json_decode((string) file_get_contents($state . '/routes.json'), true);
+$routes = is_array($routes) ? $routes : [];
+
+$specs = $routes[$uri] ?? $routes['*'] ?? null;
+if (!is_array($specs) || $specs === []) {
+ header('Content-Type: application/json; charset=utf-8');
+ http_response_code(404);
+ echo json_encode(['erro' => 'cep_nao_encontrado', 'mensagem' => 'no route registered']);
+
+ return true;
+}
+
+$calls = array_filter(explode("\n", (string) file_get_contents($state . '/calls.log')), 'strlen');
+$seen = count(array_filter($calls, static fn (string $line): bool => $line === $uri));
+$spec = $specs[min(max($seen - 1, 0), count($specs) - 1)];
+
+if (($spec['kind'] ?? 'static') === 'csv_echo') {
+ parse_str((string) parse_url($uri, PHP_URL_QUERY), $query);
+ $ceps = array_filter(explode(',', (string) ($query['ceps'] ?? '')), 'strlen');
+ $rows = ['cep,logradouro,complemento,unidade,bairro,localidade,uf,estado,regiao,ibge,gia,ddd,siafi'];
+ foreach ($ceps as $cep) {
+ $rows[] = $cep . ',Rua Teste,,,Centro,Cidade,SP,São Paulo,Sudeste,1,,11,1';
+ }
+ header('Content-Type: text/csv; charset=utf-8');
+ http_response_code(200);
+ echo implode("\n", $rows) . "\n";
+
+ return true;
+}
+
+foreach (($spec['headers'] ?? []) as $name => $value) {
+ header($name . ': ' . $value);
+}
+header('Content-Type: ' . ($spec['content_type'] ?? 'text/plain; charset=utf-8'));
+http_response_code((int) ($spec['status'] ?? 200));
+echo (string) ($spec['body'] ?? '');
+
+return true;