feat(menu): implement menu hierarchy and static content for help section in MenuSeeder and related tests
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Tests\Feature\Tenant;
|
||||
|
||||
use App\Domains\Menu\Models\Menu;
|
||||
use App\Domains\Tenant\Models\Tenant;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
@@ -99,6 +100,73 @@ class BootstrapTenantControllerTest extends TestCase
|
||||
$response->assertNotFound();
|
||||
}
|
||||
|
||||
public function test_it_returns_tenant_menus_as_a_clean_hierarchy(): void
|
||||
{
|
||||
$tenant = $this->createTenant();
|
||||
$parent = Menu::query()->create([
|
||||
'code' => 'help',
|
||||
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
|
||||
'route' => '/ayuda',
|
||||
]);
|
||||
$staticChild = Menu::query()->create([
|
||||
'code' => 'help.faq',
|
||||
'parent_menu_code' => $parent->code,
|
||||
'content_type' => Menu::CONTENT_TYPE_STATIC,
|
||||
'static_content_schema' => [
|
||||
'*.question' => 'required|string',
|
||||
'*.answer' => 'required|string',
|
||||
],
|
||||
'route' => '/ayuda/preguntas-frecuentes',
|
||||
]);
|
||||
$dynamicChild = Menu::query()->create([
|
||||
'code' => 'help.shipping',
|
||||
'parent_menu_code' => $parent->code,
|
||||
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
|
||||
'route' => '/ayuda/envios',
|
||||
]);
|
||||
$staticContent = [
|
||||
[
|
||||
'question' => '¿Cómo compro?',
|
||||
'answer' => 'Desde el catálogo.',
|
||||
],
|
||||
];
|
||||
|
||||
$tenant->menues()->sync([
|
||||
$parent->code,
|
||||
$staticChild->code => ['static_content' => $staticContent],
|
||||
$dynamicChild->code,
|
||||
]);
|
||||
|
||||
$response = $this->getJson('/api/tenants/bootstrap/acme.com');
|
||||
|
||||
$response
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data.menues')
|
||||
->assertJsonCount(2, 'data.menues.0.submenues')
|
||||
->assertJsonPath('data.menues.0.code', 'help')
|
||||
->assertJsonPath('data.menues.0.parent_menu_code', null)
|
||||
->assertJsonPath('data.menues.0.submenues.0.code', 'help.faq')
|
||||
->assertJsonPath('data.menues.0.submenues.0.parent_menu_code', 'help')
|
||||
->assertJsonPath('data.menues.0.submenues.1.code', 'help.shipping');
|
||||
|
||||
$assertCleanMenu = function (array $menu) use (&$assertCleanMenu): void {
|
||||
$this->assertArrayNotHasKey('created_at', $menu);
|
||||
$this->assertArrayNotHasKey('updated_at', $menu);
|
||||
$this->assertArrayNotHasKey('pivot', $menu);
|
||||
$this->assertArrayNotHasKey('static_content_schema', $menu);
|
||||
|
||||
foreach ($menu['submenues'] as $submenu) {
|
||||
$assertCleanMenu($submenu);
|
||||
}
|
||||
};
|
||||
|
||||
$menus = $response->json('data.menues');
|
||||
$this->assertEquals($staticContent, $menus[0]['submenues'][0]['static_content']);
|
||||
$assertCleanMenu($menus[0]);
|
||||
$this->assertArrayNotHasKey('static_content', $menus[0]);
|
||||
$this->assertArrayNotHasKey('static_content', $menus[0]['submenues'][1]);
|
||||
}
|
||||
|
||||
public function test_it_rejects_duplicate_domains_after_normalization_when_storing(): void
|
||||
{
|
||||
$base64Image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==';
|
||||
|
||||
Reference in New Issue
Block a user