app = Application::getInstance(); } /** * Asserts that all translation keys are present in all 5 supported languages */ protected function assertTranslationsComplete(string $module): void { $languages = ['pt_BR', 'en_US', 'es_ES', 'de_DE', 'fr_FR']; $basePath = dirname(__DIR__) . "/modules/{$module}/locales"; if (!is_dir($basePath)) { $this->fail("Locales directory not found for module: {$module}"); } $keys = []; foreach ($languages as $lang) { $file = "{$basePath}/{$lang}/{$module}.json"; if (!file_exists($file)) { $this->fail("Translation file missing for language {$lang} in module {$module}"); } $content = json_decode(file_get_contents($file), true); $keys[$lang] = array_keys($this->flattenArray($content)); } $referenceKeys = $keys['pt_BR']; foreach ($languages as $lang) { $diff = array_diff($referenceKeys, $keys[$lang]); $this->assertEmpty($diff, "Missing translation keys in {$lang} for module {$module}: " . implode(', ', $diff)); } } /** * Asserts that a route exists in the system */ protected function assertRouteExists(string $method, string $uri): void { $routes = $this->app->getRoutes(); $found = false; foreach ($routes as $route) { if ($route[0] === strtoupper($method) && $route[1] === $uri) { $found = true; break; } } $this->assertTrue($found, "Route [{$method}] {$uri} not found."); } /** * Verifies if a table exists and has specific data */ protected function assertDatabaseHas(string $table, array $data): void { $query = Capsule::table($table); foreach ($data as $key => $value) { $query->where($key, $value); } $this->assertGreaterThan(0, $query->count(), "Data not found in table {$table}"); } /** * Verifies if a table does not have specific data */ protected function assertDatabaseMissing(string $table, array $data): void { $query = Capsule::table($table); foreach ($data as $key => $value) { $query->where($key, $value); } $this->assertEquals(0, $query->count(), "Data found in table {$table} when it should be missing"); } /** * Verifies the count of records in a table */ protected function assertDatabaseCount(string $table, int $count): void { $this->assertEquals($count, Capsule::table($table)->count(), "Table {$table} does not have {$count} records"); } /** * Helper to flatten nested translation arrays */ private function flattenArray(array $array, string $prefix = ''): array { $result = []; foreach ($array as $key => $value) { $newKey = $prefix . (empty($prefix) ? '' : '.') . $key; if (is_array($value)) { $result = array_merge($result, $this->flattenArray($value, $newKey)); } else { $result[$newKey] = $value; } } return $result; } }