feat(brand): implement update functionality and validation for brand details
This commit is contained in:
@@ -11,6 +11,7 @@ use App\Shared\Attachable\Models\Attachment;
|
||||
use App\Shared\Attachable\Models\AttachmentCrop;
|
||||
use Database\Seeders\AuthorizationSeeder;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Laravel\Sanctum\Sanctum;
|
||||
use Tests\TestCase;
|
||||
@@ -80,8 +81,10 @@ class AdminAppBrandControllerTest extends TestCase
|
||||
|
||||
foreach (['header_logo' => $header, 'footer_logo' => $footer] as $field => $image) {
|
||||
$this->assertStringContainsString($image->path, $response->json("data.{$field}"));
|
||||
$response->assertJsonPath("data.{$field}_key", $image->key);
|
||||
}
|
||||
foreach ([$first, $second] as $index => $image) {
|
||||
$response->assertJsonPath("data.banner_images.{$index}.key", $image->key);
|
||||
$this->assertStringContainsString(
|
||||
$image->path,
|
||||
$response->json("data.banner_images.{$index}.original_url")
|
||||
@@ -94,6 +97,63 @@ class AdminAppBrandControllerTest extends TestCase
|
||||
$this->assertStringNotContainsString('other.png', $response->getContent());
|
||||
}
|
||||
|
||||
public function test_update_keeps_original_carousel_attachment_and_returns_its_crop(): void
|
||||
{
|
||||
$websiteType = $this->websiteType('shopit');
|
||||
$carousel = $websiteType->extras()->create([
|
||||
'codigo' => 'carousel', 'nombre' => 'Carrusel', 'is_required' => false,
|
||||
'config_schema' => ['request_rules' => [], 'transforms' => [
|
||||
'$.*' => ['handler' => 'attachment', 'attachment_type' => 'image'],
|
||||
]],
|
||||
]);
|
||||
$tenant = $this->tenant('acme', $websiteType, [
|
||||
'primary_color' => '#112233', 'footer_bg_color' => '#112233',
|
||||
]);
|
||||
Sanctum::actingAs($this->admin($tenant));
|
||||
$file = UploadedFile::fake()->image('banner.png', 400, 100);
|
||||
$dataUrl = 'data:image/png;base64,'.base64_encode(file_get_contents($file->getRealPath()));
|
||||
|
||||
$response = $this->putJson('/api/v1/adminapp/tenant/brand', [
|
||||
'nombre' => 'Acme Nueva', 'primary_color' => '#abcdef',
|
||||
'footer_bg_color' => '#abcdef', 'header_logo' => null, 'footer_logo' => null,
|
||||
'banner_images' => [[
|
||||
'image' => $dataUrl,
|
||||
'crop_horizontal' => ['start_percentage' => 10, 'end_percentage' => 90],
|
||||
'crop_vertical' => ['start_percentage' => 0, 'end_percentage' => 100],
|
||||
]],
|
||||
])->assertOk()
|
||||
->assertJsonPath('data.nombre', 'Acme Nueva')
|
||||
->assertJsonPath('data.footer_color', 'primary')
|
||||
->assertJsonPath('data.banner_images.0.crop.crop_horizontal.start_percentage', 10);
|
||||
|
||||
$original = Attachment::query()->where('key', $response->json('data.banner_images.0.key'))->firstOrFail();
|
||||
$this->assertSame([$original->id], $tenant->websiteExtras()
|
||||
->where('website_type_extra_id', $carousel->id)->firstOrFail()->config);
|
||||
$this->assertStringContainsString($original->path, $response->json('data.banner_images.0.original_url'));
|
||||
$this->assertNotSame($response->json('data.banner_images.0.original_url'),
|
||||
$response->json('data.banner_images.0.url'));
|
||||
|
||||
$updated = $this->putJson('/api/v1/adminapp/tenant/brand', [
|
||||
'nombre' => 'Acme Nueva', 'primary_color' => '#abcdef',
|
||||
'footer_bg_color' => '#abcdef', 'header_logo' => null, 'footer_logo' => null,
|
||||
'banner_images' => [[
|
||||
'image' => $original->key,
|
||||
'crop_horizontal' => ['start_percentage' => 20, 'end_percentage' => 80],
|
||||
'crop_vertical' => ['start_percentage' => 0, 'end_percentage' => 100],
|
||||
]],
|
||||
])->assertOk()
|
||||
->assertJsonPath('data.banner_images.0.key', $original->key)
|
||||
->assertJsonPath('data.banner_images.0.crop.crop_horizontal.start_percentage', 20);
|
||||
$this->assertSame([$original->id], $tenant->websiteExtras()
|
||||
->where('website_type_extra_id', $carousel->id)->firstOrFail()->config);
|
||||
$this->assertNotSame($response->json('data.banner_images.0.url'),
|
||||
$updated->json('data.banner_images.0.url'));
|
||||
|
||||
$this->assertSame('#abcdef', $tenant->refresh()->footer_bg_color);
|
||||
$tenant->update(['primary_color' => '#123456']);
|
||||
$this->assertSame('#abcdef', $tenant->refresh()->footer_bg_color);
|
||||
}
|
||||
|
||||
public function test_footer_color_is_mapped_to_a_supported_option(): void
|
||||
{
|
||||
$websiteType = $this->websiteType('shopit');
|
||||
|
||||
Reference in New Issue
Block a user