Adjust watermark permissions and transparency
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-01-19 13:45:43 +01:00
parent fbff2afa3e
commit d4ab9a3a20
15 changed files with 325 additions and 54 deletions

View File

@@ -8,6 +8,7 @@ use App\Models\EventType;
use App\Models\Package;
use App\Models\PackagePurchase;
use App\Models\TenantPackage;
use App\Models\WatermarkSetting;
use App\Services\EventJoinTokenService;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Carbon;
@@ -369,7 +370,14 @@ class EventControllerTest extends TenantTestCase
{
Storage::fake('public');
config(['watermark.base.asset' => 'branding/watermarks/base-watermark.png']);
$setting = WatermarkSetting::query()->create([
'asset' => 'branding/watermarks/base-watermark.png',
'position' => 'bottom-right',
'opacity' => 0.25,
'scale' => 0.2,
'padding' => 16,
]);
Storage::disk('public')->put('branding/watermarks/base-watermark.png', 'asset');
$eventType = EventType::factory()->create();
@@ -389,6 +397,83 @@ class EventControllerTest extends TenantTestCase
$this->assertNotSame('', $url);
$this->assertStringContainsString('/api/v1/branding/asset/branding/watermarks/base-watermark.png', $url);
$this->assertStringContainsString('signature=', $url);
$this->assertSame($setting->asset, $response->json('data.settings.watermark.asset'));
}
public function test_update_event_allows_disabling_watermark_when_removal_is_enabled(): void
{
$package = Package::factory()->create([
'watermark_allowed' => true,
'branding_allowed' => true,
'features' => ['no_watermark'],
]);
$eventType = EventType::factory()->create();
$event = Event::factory()->for($this->tenant)->create([
'event_type_id' => $eventType->id,
'name' => 'Removal Allowed Event',
'slug' => 'removal-allowed',
'date' => now()->addDays(2),
]);
EventPackage::create([
'event_id' => $event->id,
'package_id' => $package->id,
'purchased_price' => $package->price ?? 0,
'used_photos' => 0,
]);
$response = $this->authenticatedRequest('PUT', "/api/v1/tenant/events/{$event->slug}", [
'settings' => [
'watermark' => [
'mode' => 'off',
],
],
]);
$response->assertOk();
$event->refresh();
$this->assertSame('off', data_get($event->settings, 'watermark.mode'));
$this->assertTrue((bool) data_get($event->settings, 'watermark_removal_allowed'));
}
public function test_update_event_forces_base_watermark_when_removal_is_disabled(): void
{
$package = Package::factory()->create([
'watermark_allowed' => true,
'branding_allowed' => true,
'features' => [],
]);
$eventType = EventType::factory()->create();
$event = Event::factory()->for($this->tenant)->create([
'event_type_id' => $eventType->id,
'name' => 'Removal Disabled Event',
'slug' => 'removal-disabled',
'date' => now()->addDays(2),
]);
EventPackage::create([
'event_id' => $event->id,
'package_id' => $package->id,
'purchased_price' => $package->price ?? 0,
'used_photos' => 0,
]);
$response = $this->authenticatedRequest('PUT', "/api/v1/tenant/events/{$event->slug}", [
'settings' => [
'watermark' => [
'mode' => 'off',
],
],
]);
$response->assertOk();
$event->refresh();
$this->assertSame('base', data_get($event->settings, 'watermark.mode'));
$this->assertFalse((bool) data_get($event->settings, 'watermark_removal_allowed'));
}
public function test_update_event_uploads_branding_logo_data_url(): void

View File

@@ -4,11 +4,15 @@ namespace Tests\Feature;
use App\Filament\Resources\EventResource\Pages\ManageWatermark;
use App\Filament\SuperAdmin\Pages\GuestPolicySettingsPage;
use App\Filament\SuperAdmin\Pages\WatermarkSettingsPage;
use App\Models\Event;
use App\Models\SuperAdminActionLog;
use App\Models\User;
use App\Models\WatermarkSetting;
use Filament\Facades\Filament;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Livewire\Livewire;
use Tests\TestCase;
@@ -49,6 +53,28 @@ class SuperAdminAuditLogSettingsTest extends TestCase
->exists());
}
public function test_base_watermark_settings_save_creates_audit_log(): void
{
Storage::fake('public');
$user = User::factory()->create(['role' => 'super_admin']);
$this->bootSuperAdminPanel($user);
$file = UploadedFile::fake()->image('watermark.png', 120, 120);
Livewire::test(WatermarkSettingsPage::class)
->set('asset', [$file])
->call('save');
$settings = WatermarkSetting::query()->first();
$this->assertNotNull($settings);
$this->assertNotNull($settings->asset);
Storage::disk('public')->assertExists($settings->asset);
}
private function bootSuperAdminPanel(User $user): void
{
$panel = Filament::getPanel('superadmin');