From 018f3f6c134cf4a7ff3304720584a851ff27e29b Mon Sep 17 00:00:00 2001 From: ncoronel Date: Thu, 23 Jul 2026 15:19:25 -0300 Subject: [PATCH] feat(seeder): add SocialMediaSeeder and integrate social media data into TenantSeeder --- database/seeders/DatabaseSeeder.php | 1 + database/seeders/SocialMediaSeeder.php | 42 +++++++++++++++ database/seeders/TenantSeeder.php | 25 +++++++++ .../Feature/Seeders/SocialMediaSeederTest.php | 52 +++++++++++++++++++ tests/Feature/Seeders/TenantSeederTest.php | 36 ++++++++++++- 5 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 database/seeders/SocialMediaSeeder.php create mode 100644 tests/Feature/Seeders/SocialMediaSeederTest.php diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 69c9875..17ab1fa 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -23,6 +23,7 @@ class DatabaseSeeder extends Seeder ]); $this->call([ + SocialMediaSeeder::class, TenantSeeder::class, AttributeSeeder::class, CategorySeeder::class, diff --git a/database/seeders/SocialMediaSeeder.php b/database/seeders/SocialMediaSeeder.php new file mode 100644 index 0000000..97e2b40 --- /dev/null +++ b/database/seeders/SocialMediaSeeder.php @@ -0,0 +1,42 @@ + 'facebook', + 'icon' => 'fa-brands fa-facebook', + 'name' => 'Facebook', + ], + [ + 'code' => 'instagram', + 'icon' => 'fa-brands fa-instagram', + 'name' => 'Instagram', + ], + [ + 'code' => 'whatsapp', + 'icon' => 'fa-brands fa-whatsapp', + 'name' => 'WhatsApp', + ], + [ + 'code' => 'linkedin', + 'icon' => 'fa-brands fa-linkedin-in', + 'name' => 'LinkedIn', + ], + ]; + + foreach ($socialMedia as $socialMediaData) { + SocialMedia::query()->updateOrCreate( + ['code' => $socialMediaData['code']], + $socialMediaData + ); + } + } +} diff --git a/database/seeders/TenantSeeder.php b/database/seeders/TenantSeeder.php index 32c95f2..c10f538 100644 --- a/database/seeders/TenantSeeder.php +++ b/database/seeders/TenantSeeder.php @@ -19,6 +19,29 @@ class TenantSeeder extends Seeder '06-city-runners.png', ]; + private const SOCIAL_MEDIA = [ + [ + 'code' => 'instagram', + 'url' => 'https://www.instagram.com/sonderargentina/', + 'orden' => 0, + ], + [ + 'code' => 'facebook', + 'url' => 'https://www.facebook.com/SonderArgentina/', + 'orden' => 1, + ], + [ + 'code' => 'linkedin', + 'url' => 'https://www.linkedin.com/company/35664983/', + 'orden' => 2, + ], + [ + 'code' => 'whatsapp', + 'url' => 'https://wa.me/5493412602222', + 'orden' => 3, + ], + ]; + public function __construct(protected TenantService $tenantService) {} /** @@ -117,6 +140,7 @@ class TenantSeeder extends Seeder 'header_logo' => $headerLogo, 'footer_logo' => $footerLogo, 'main_carousel_images' => $mainCarouselImages, + 'social_media' => self::SOCIAL_MEDIA, ]); // Check if tenant 'fiesta_futbol_infantil' already exists @@ -214,6 +238,7 @@ class TenantSeeder extends Seeder 'location' => 'Sunchales, Santa Fe', 'dates' => ['2026-10-09', '2026-10-10', '2026-10-11', '2026-10-12'], ], + 'social_media' => self::SOCIAL_MEDIA, ]); } } diff --git a/tests/Feature/Seeders/SocialMediaSeederTest.php b/tests/Feature/Seeders/SocialMediaSeederTest.php new file mode 100644 index 0000000..6bae057 --- /dev/null +++ b/tests/Feature/Seeders/SocialMediaSeederTest.php @@ -0,0 +1,52 @@ +seed(SocialMediaSeeder::class); + + $this->assertSame([ + [ + 'code' => 'facebook', + 'icon' => 'fa-brands fa-facebook', + 'name' => 'Facebook', + ], + [ + 'code' => 'instagram', + 'icon' => 'fa-brands fa-instagram', + 'name' => 'Instagram', + ], + [ + 'code' => 'linkedin', + 'icon' => 'fa-brands fa-linkedin-in', + 'name' => 'LinkedIn', + ], + [ + 'code' => 'whatsapp', + 'icon' => 'fa-brands fa-whatsapp', + 'name' => 'WhatsApp', + ], + ], SocialMedia::query() + ->orderBy('code') + ->get(['code', 'icon', 'name']) + ->toArray()); + } + + public function test_it_can_run_more_than_once_without_creating_duplicates(): void + { + $this->seed(SocialMediaSeeder::class); + $this->seed(SocialMediaSeeder::class); + + $this->assertSame(4, SocialMedia::query()->count()); + } +} diff --git a/tests/Feature/Seeders/TenantSeederTest.php b/tests/Feature/Seeders/TenantSeederTest.php index 60d0e56..b4dc03d 100644 --- a/tests/Feature/Seeders/TenantSeederTest.php +++ b/tests/Feature/Seeders/TenantSeederTest.php @@ -3,6 +3,7 @@ namespace Tests\Feature\Seeders; use App\Domains\Tenant\Models\Tenant; +use Database\Seeders\SocialMediaSeeder; use Database\Seeders\TenantSeeder; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Storage; @@ -16,7 +17,10 @@ class TenantSeederTest extends TestCase { Storage::fake('s3'); - $this->seed(TenantSeeder::class); + $this->seed([ + SocialMediaSeeder::class, + TenantSeeder::class, + ]); $tenant = Tenant::query()->where('codigo', 'sonder')->firstOrFail(); $images = $tenant->mainCarouselImages()->get(); @@ -35,4 +39,34 @@ class TenantSeederTest extends TestCase Storage::disk('s3')->assertExists($image->path); } } + + public function test_it_assigns_social_media_to_both_tenants_in_order(): void + { + Storage::fake('s3'); + + $this->seed([ + SocialMediaSeeder::class, + TenantSeeder::class, + ]); + + $expectedCodes = ['instagram', 'facebook', 'linkedin', 'whatsapp']; + $expectedUrls = [ + 'https://www.instagram.com/sonderargentina/', + 'https://www.facebook.com/SonderArgentina/', + 'https://www.linkedin.com/company/35664983/', + 'https://wa.me/5493412602222', + ]; + + foreach (['sonder', 'fiesta_futbol_infantil'] as $tenantCode) { + $socialMedia = Tenant::query() + ->where('codigo', $tenantCode) + ->firstOrFail() + ->socialMedia() + ->get(); + + $this->assertSame($expectedCodes, $socialMedia->pluck('code')->all()); + $this->assertSame($expectedUrls, $socialMedia->pluck('pivot.url')->all()); + $this->assertSame([0, 1, 2, 3], $socialMedia->pluck('pivot.orden')->all()); + } + } }