feat(menu): add account menu hierarchy and related tests in MenuSeeder and MenuSeederTest

This commit is contained in:
2026-07-24 10:07:47 -03:00
parent f6ce85cbde
commit 7889d747d9
3 changed files with 137 additions and 3 deletions

View File

@@ -0,0 +1,88 @@
<?php
use App\Domains\Menu\Models\Menu;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
return new class extends Migration
{
public function up(): void
{
$now = now();
DB::table('menues')->updateOrInsert(
['code' => 'account'],
[
'parent_menu_code' => null,
'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
'static_content_schema' => null,
'route' => '/mi-cuenta',
'created_at' => $now,
'updated_at' => $now,
]
);
$routes = [
'profile' => '/mi-cuenta/datos-personales',
'purchases' => '/mi-cuenta/compras',
'tickets' => '/mi-cuenta/tickets',
];
foreach ($routes as $code => $route) {
DB::table('menues')
->where('code', $code)
->update([
'parent_menu_code' => 'account',
'route' => $route,
'updated_at' => $now,
]);
}
$tenantCodes = DB::table('tenants_menues')
->whereIn('menu_code', array_keys($routes))
->distinct()
->pluck('tenant_code');
foreach ($tenantCodes as $tenantCode) {
$alreadyAssigned = DB::table('tenants_menues')
->where('tenant_code', $tenantCode)
->where('menu_code', 'account')
->exists();
if ($alreadyAssigned) {
continue;
}
DB::table('tenants_menues')->insert([
'tenant_code' => $tenantCode,
'menu_code' => 'account',
'static_content' => null,
'created_at' => $now,
'updated_at' => $now,
]);
}
}
public function down(): void
{
$now = now();
$routes = [
'profile' => '/profile',
'purchases' => '/purchases',
'tickets' => '/tickets',
];
foreach ($routes as $code => $route) {
DB::table('menues')
->where('code', $code)
->update([
'parent_menu_code' => null,
'route' => $route,
'updated_at' => $now,
]);
}
DB::table('tenants_menues')->where('menu_code', 'account')->delete();
DB::table('menues')->where('code', 'account')->delete();
}
};

View File

@@ -17,9 +17,26 @@ class MenuSeeder extends Seeder
['code' => 'index', 'route' => '/'], ['code' => 'index', 'route' => '/'],
['code' => 'product.detail', 'route' => '/product/:id'], ['code' => 'product.detail', 'route' => '/product/:id'],
['code' => 'checkout', 'route' => '/checkout'], ['code' => 'checkout', 'route' => '/checkout'],
['code' => 'profile', 'route' => '/profile'], [
['code' => 'purchases', 'route' => '/purchases'], 'code' => 'account',
['code' => 'tickets', 'route' => '/tickets'], 'content_type' => Menu::CONTENT_TYPE_DYNAMIC,
'route' => '/mi-cuenta',
],
[
'code' => 'profile',
'parent_menu_code' => 'account',
'route' => '/mi-cuenta/datos-personales',
],
[
'code' => 'purchases',
'parent_menu_code' => 'account',
'route' => '/mi-cuenta/compras',
],
[
'code' => 'tickets',
'parent_menu_code' => 'account',
'route' => '/mi-cuenta/tickets',
],
[ [
'code' => 'help', 'code' => 'help',
'content_type' => Menu::CONTENT_TYPE_DYNAMIC, 'content_type' => Menu::CONTENT_TYPE_DYNAMIC,

View File

@@ -14,6 +14,35 @@ class MenuSeederTest extends TestCase
{ {
use RefreshDatabase; use RefreshDatabase;
public function test_it_seeds_the_account_menu_hierarchy(): void
{
$tenant = $this->createTenant('account_tenant');
$this->seed(MenuSeeder::class);
$account = Menu::query()
->with('children')
->where('code', 'account')
->firstOrFail();
$this->assertSame(Menu::CONTENT_TYPE_DYNAMIC, $account->content_type);
$this->assertSame('/mi-cuenta', $account->route);
$this->assertSame([
'profile',
'purchases',
'tickets',
], $account->children->pluck('code')->sort()->values()->all());
$this->assertSame([
'profile' => '/mi-cuenta/datos-personales',
'purchases' => '/mi-cuenta/compras',
'tickets' => '/mi-cuenta/tickets',
], $account->children->pluck('route', 'code')->sortKeys()->all());
$this->assertTrue(
$tenant->menues()->where('menues.code', 'account')->exists()
);
}
public function test_it_seeds_the_help_menu_hierarchy_and_content_schemas(): void public function test_it_seeds_the_help_menu_hierarchy_and_content_schemas(): void
{ {
$this->seed(MenuSeeder::class); $this->seed(MenuSeeder::class);