feat(menu): add account menu hierarchy and related tests in MenuSeeder and MenuSeederTest
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user