feat: add tenant success color

This commit is contained in:
2026-07-01 11:55:08 -03:00
parent a150a9f694
commit 4aedf7ca86
11 changed files with 68 additions and 0 deletions

View File

@@ -17,6 +17,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany;
'primary_color',
'secondary_color',
'danger_color',
'success_color',
'header_footer_bg_color',
'header_logo_id',
'footer_logo_id',

View File

@@ -56,6 +56,7 @@ class StoreTenantRequest extends FormRequest
'primary_color' => ['required', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'secondary_color' => ['required', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'danger_color' => ['required', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'success_color' => ['required', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'header_footer_bg_color' => ['required', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'header_logo' => $logoRule,
'footer_logo' => $logoRule,

View File

@@ -67,6 +67,7 @@ class UpdateTenantRequest extends FormRequest
'primary_color' => ['nullable', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'secondary_color' => ['nullable', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'danger_color' => ['nullable', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'success_color' => ['nullable', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'header_footer_bg_color' => ['nullable', 'string', 'regex:/^#([a-fA-F0-9]{3,4}|[a-fA-F0-9]{6}|[a-fA-F0-9]{8})$/'],
'header_logo' => $logoRule,
'footer_logo' => $logoRule,

View File

@@ -23,6 +23,7 @@ class TenantResource extends JsonResource
'primary_color' => $this->primary_color,
'secondary_color' => $this->secondary_color,
'danger_color' => $this->danger_color,
'success_color' => $this->success_color,
'header_footer_bg_color' => $this->header_footer_bg_color,
// 1 day
'header_logo' => $this->headerLogo?->getTemporaryUrl(1440),

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('tenants', function (Blueprint $table) {
$table->string('success_color')->default('#28a745')->after('danger_color');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('tenants', function (Blueprint $table) {
$table->dropColumn('success_color');
});
}
};

View File

@@ -74,6 +74,7 @@ class TenantSeeder extends Seeder
'primary_color' => '#6376F3',
'secondary_color' => '#A0A0A0',
'danger_color' => '#FF8888',
'success_color' => '#198754',
'header_footer_bg_color' => '#313131',
'header_logo' => $headerLogo,
'footer_logo' => $footerLogo,

View File

@@ -324,6 +324,7 @@ class CartControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#28a745',
'header_footer_bg_color' => '#444444',
'header_logo_id' => $headerAttachment->id,
'footer_logo_id' => $footerAttachment->id,

View File

@@ -122,6 +122,7 @@ class AttributeControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#28a745',
'header_footer_bg_color' => '#444444',
'header_logo_id' => $headerAttachment->id,
'footer_logo_id' => $footerAttachment->id,

View File

@@ -806,6 +806,7 @@ class ProductControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#28a745',
'header_footer_bg_color' => '#444444',
'header_logo_id' => $headerAttachment->id,
'footer_logo_id' => $footerAttachment->id,

View File

@@ -41,6 +41,7 @@ class ProductVariantAttachmentTest extends TestCase
'primary_color' => '#ffffff',
'secondary_color' => '#ffffff',
'danger_color' => '#ffffff',
'success_color' => '#ffffff',
'header_footer_bg_color' => '#ffffff',
'header_logo_id' => $headerAttachment->id,
'footer_logo_id' => $footerAttachment->id,

View File

@@ -40,6 +40,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#ff0000',
'secondary_color' => '#00ff00',
'danger_color' => '#0000ff',
'success_color' => '#00ff00',
'header_footer_bg_color' => '#ffffff',
'header_logo_id' => $headerAttachment->id,
'footer_logo_id' => $footerAttachment->id,
@@ -54,6 +55,7 @@ class BootstrapTenantControllerTest extends TestCase
->assertJsonPath('data.primary_color', '#ff0000')
->assertJsonPath('data.secondary_color', '#00ff00')
->assertJsonPath('data.danger_color', '#0000ff')
->assertJsonPath('data.success_color', '#00ff00')
->assertJsonPath('data.header_footer_bg_color', '#ffffff');
$headerUrl = $response->json('data.header_logo');
@@ -107,6 +109,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => $base64Image,
'footer_logo' => $base64Image,
@@ -118,6 +121,7 @@ class BootstrapTenantControllerTest extends TestCase
->assertJsonPath('data.primary_color', '#111111')
->assertJsonPath('data.secondary_color', '#222222')
->assertJsonPath('data.danger_color', '#333333')
->assertJsonPath('data.success_color', '#555555')
->assertJsonPath('data.header_footer_bg_color', '#444444');
$tenant = Tenant::query()->with(['headerLogo', 'footerLogo'])->where('codigo', 'acme')->firstOrFail();
@@ -130,6 +134,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo_id' => $tenant->header_logo_id,
'footer_logo_id' => $tenant->footer_logo_id,
@@ -154,6 +159,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => (string) Str::uuid(),
'footer_logo' => (string) Str::uuid(),
@@ -203,6 +209,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#555555',
'secondary_color' => '#666666',
'danger_color' => '#777777',
'success_color' => '#999999',
'header_footer_bg_color' => '#888888',
'header_logo' => $hdrUuid,
'footer_logo' => $ftrUuid,
@@ -215,6 +222,7 @@ class BootstrapTenantControllerTest extends TestCase
->assertJsonPath('data.primary_color', '#555555')
->assertJsonPath('data.secondary_color', '#666666')
->assertJsonPath('data.danger_color', '#777777')
->assertJsonPath('data.success_color', '#999999')
->assertJsonPath('data.header_footer_bg_color', '#888888');
$headerUrl = $successfulResponse->json('data.header_logo');
@@ -234,6 +242,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#555555',
'secondary_color' => '#666666',
'danger_color' => '#777777',
'success_color' => '#999999',
'header_footer_bg_color' => '#888888',
'header_logo_id' => $hdrAttachment->id,
'footer_logo_id' => $ftrAttachment->id,
@@ -286,6 +295,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => 'invalid-color',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => (string) Str::uuid(),
'footer_logo' => (string) Str::uuid(),
@@ -300,12 +310,28 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#12345',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => (string) Str::uuid(),
'footer_logo' => (string) Str::uuid(),
]);
$response2->assertJsonValidationErrors(['primary_color']);
$response3 = $this->postJson('/api/tenants', [
'codigo' => 'acme',
'nombre' => 'Acme',
'dominio' => 'acme.com',
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => 'invalid-color',
'header_footer_bg_color' => '#444444',
'header_logo' => (string) Str::uuid(),
'footer_logo' => (string) Str::uuid(),
]);
$response3->assertJsonValidationErrors(['success_color']);
}
public function test_it_validates_logo_must_be_image_or_svg(): void
@@ -319,6 +345,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => UploadedFile::fake()->create('document.pdf', 10, 'application/pdf'),
'footer_logo' => (string) Str::uuid(),
@@ -333,6 +360,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => 'data:application/pdf;base64,JVBERi0xLjQKJdcfqksKMSAwIG9iagogIDw8IC9UeXBlIC9DYXRhbG9nCiAgICAvUGFnZXMgMiAwIFI...',
'footer_logo' => (string) Str::uuid(),
@@ -355,6 +383,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => $header,
'footer_logo' => $footer,
@@ -410,6 +439,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#ff0000',
'secondary_color' => '#00ff00',
'danger_color' => '#0000ff',
'success_color' => '#00ff00',
'header_footer_bg_color' => '#ffffff',
'header_logo_id' => $headerAttachment->id,
'footer_logo_id' => $footerAttachment->id,
@@ -438,6 +468,7 @@ class BootstrapTenantControllerTest extends TestCase
'primary_color' => '#111111',
'secondary_color' => '#222222',
'danger_color' => '#333333',
'success_color' => '#555555',
'header_footer_bg_color' => '#444444',
'header_logo' => $base64Image,
'footer_logo' => $ftrUuid,