feat: expand permission management for settings by introducing new permissions for system, social media, marketplace, HR, and homepage updates; refactor related controllers, requests, and services to utilize these permissions; enhance frontend components to support new permission checks and improve user experience
This commit is contained in:
parent
f1c3658166
commit
2b7208a0c4
@ -135,8 +135,16 @@ enum Permission: string
|
|||||||
case PAYROLL_VIEW = 'payroll.view';
|
case PAYROLL_VIEW = 'payroll.view';
|
||||||
case PAYROLL_ADJUST = 'payroll.adjust';
|
case PAYROLL_ADJUST = 'payroll.adjust';
|
||||||
|
|
||||||
case SETTINGS_VIEW = 'settings.view';
|
case SETTINGS_VIEW_SYSTEM = 'settings.view_system';
|
||||||
case SETTINGS_UPDATE = 'settings.update';
|
case SETTINGS_UPDATE_SYSTEM = 'settings.update_system';
|
||||||
|
case SETTINGS_VIEW_SOCIAL_MEDIA = 'settings.view_social_media';
|
||||||
|
case SETTINGS_UPDATE_SOCIAL_MEDIA = 'settings.update_social_media';
|
||||||
|
case SETTINGS_VIEW_MARKETPLACE = 'settings.view_marketplace';
|
||||||
|
case SETTINGS_UPDATE_MARKETPLACE = 'settings.update_marketplace';
|
||||||
|
case SETTINGS_VIEW_HR = 'settings.view_hr';
|
||||||
|
case SETTINGS_UPDATE_HR = 'settings.update_hr';
|
||||||
|
case SETTINGS_VIEW_HOMEPAGE = 'settings.view_homepage';
|
||||||
|
case SETTINGS_UPDATE_HOMEPAGE = 'settings.update_homepage';
|
||||||
|
|
||||||
case ACTIVITY_LOGS_VIEW = 'activity_logs.view';
|
case ACTIVITY_LOGS_VIEW = 'activity_logs.view';
|
||||||
|
|
||||||
@ -275,8 +283,16 @@ public function label(): string
|
|||||||
self::PAYROLL_VIEW => 'Lihat Gaji',
|
self::PAYROLL_VIEW => 'Lihat Gaji',
|
||||||
self::PAYROLL_ADJUST => 'Sesuaikan Gaji',
|
self::PAYROLL_ADJUST => 'Sesuaikan Gaji',
|
||||||
|
|
||||||
self::SETTINGS_VIEW => 'Lihat Pengaturan Aplikasi',
|
self::SETTINGS_VIEW_SYSTEM => 'Lihat Pengaturan Sistem',
|
||||||
self::SETTINGS_UPDATE => 'Ubah Pengaturan Aplikasi',
|
self::SETTINGS_UPDATE_SYSTEM => 'Ubah Pengaturan Sistem',
|
||||||
|
self::SETTINGS_VIEW_SOCIAL_MEDIA => 'Lihat Pengaturan Media Sosial',
|
||||||
|
self::SETTINGS_UPDATE_SOCIAL_MEDIA => 'Ubah Pengaturan Media Sosial',
|
||||||
|
self::SETTINGS_VIEW_MARKETPLACE => 'Lihat Pengaturan Marketplace',
|
||||||
|
self::SETTINGS_UPDATE_MARKETPLACE => 'Ubah Pengaturan Marketplace',
|
||||||
|
self::SETTINGS_VIEW_HR => 'Lihat Pengaturan HR',
|
||||||
|
self::SETTINGS_UPDATE_HR => 'Ubah Pengaturan HR',
|
||||||
|
self::SETTINGS_VIEW_HOMEPAGE => 'Lihat Pengaturan Homepage',
|
||||||
|
self::SETTINGS_UPDATE_HOMEPAGE => 'Ubah Pengaturan Homepage',
|
||||||
|
|
||||||
self::ACTIVITY_LOGS_VIEW => 'Lihat Log Aktivitas',
|
self::ACTIVITY_LOGS_VIEW => 'Lihat Log Aktivitas',
|
||||||
|
|
||||||
@ -335,7 +351,11 @@ public function group(): string
|
|||||||
self::EMPLOYEE_ADVANCES_DELETE, self::EMPLOYEE_ADVANCES_VERIFY,
|
self::EMPLOYEE_ADVANCES_DELETE, self::EMPLOYEE_ADVANCES_VERIFY,
|
||||||
self::EMPLOYEE_ADVANCES_PAY => 'Kasbon',
|
self::EMPLOYEE_ADVANCES_PAY => 'Kasbon',
|
||||||
self::PAYROLL_VIEW, self::PAYROLL_ADJUST => 'Gaji',
|
self::PAYROLL_VIEW, self::PAYROLL_ADJUST => 'Gaji',
|
||||||
self::SETTINGS_VIEW, self::SETTINGS_UPDATE => 'Pengaturan Aplikasi',
|
self::SETTINGS_VIEW_SYSTEM, self::SETTINGS_UPDATE_SYSTEM,
|
||||||
|
self::SETTINGS_VIEW_SOCIAL_MEDIA, self::SETTINGS_UPDATE_SOCIAL_MEDIA,
|
||||||
|
self::SETTINGS_VIEW_MARKETPLACE, self::SETTINGS_UPDATE_MARKETPLACE,
|
||||||
|
self::SETTINGS_VIEW_HR, self::SETTINGS_UPDATE_HR,
|
||||||
|
self::SETTINGS_VIEW_HOMEPAGE, self::SETTINGS_UPDATE_HOMEPAGE => 'Pengaturan Aplikasi',
|
||||||
self::ACTIVITY_LOGS_VIEW => 'Log Aktivitas',
|
self::ACTIVITY_LOGS_VIEW => 'Log Aktivitas',
|
||||||
self::ROLES_VIEW, self::ROLES_CREATE, self::ROLES_UPDATE,
|
self::ROLES_VIEW, self::ROLES_CREATE, self::ROLES_UPDATE,
|
||||||
self::ROLES_DELETE => 'Role & Permission',
|
self::ROLES_DELETE => 'Role & Permission',
|
||||||
|
|||||||
@ -193,8 +193,16 @@ public function permissions(): array
|
|||||||
Permission::PAYROLL_VIEW,
|
Permission::PAYROLL_VIEW,
|
||||||
Permission::PAYROLL_ADJUST,
|
Permission::PAYROLL_ADJUST,
|
||||||
|
|
||||||
Permission::SETTINGS_VIEW,
|
Permission::SETTINGS_VIEW_SYSTEM,
|
||||||
Permission::SETTINGS_UPDATE,
|
Permission::SETTINGS_UPDATE_SYSTEM,
|
||||||
|
Permission::SETTINGS_VIEW_SOCIAL_MEDIA,
|
||||||
|
Permission::SETTINGS_UPDATE_SOCIAL_MEDIA,
|
||||||
|
Permission::SETTINGS_VIEW_MARKETPLACE,
|
||||||
|
Permission::SETTINGS_UPDATE_MARKETPLACE,
|
||||||
|
Permission::SETTINGS_VIEW_HR,
|
||||||
|
Permission::SETTINGS_UPDATE_HR,
|
||||||
|
Permission::SETTINGS_VIEW_HOMEPAGE,
|
||||||
|
Permission::SETTINGS_UPDATE_HOMEPAGE,
|
||||||
],
|
],
|
||||||
|
|
||||||
self::CASHIER => [
|
self::CASHIER => [
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
use App\Services\System\Setting\SocialMediaService;
|
use App\Services\System\Setting\SocialMediaService;
|
||||||
use App\Services\System\Setting\SystemService;
|
use App\Services\System\Setting\SystemService;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
use Inertia\Inertia;
|
use Inertia\Inertia;
|
||||||
use Inertia\Response;
|
use Inertia\Response;
|
||||||
|
|
||||||
@ -33,8 +34,10 @@ public function __construct(
|
|||||||
private readonly OwnerVerificationService $ownerVerificationService,
|
private readonly OwnerVerificationService $ownerVerificationService,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public function index(): Response
|
public function index(Request $request): Response
|
||||||
{
|
{
|
||||||
|
$user = $request->user();
|
||||||
|
|
||||||
return Inertia::render('admin/system/setting/Index', [
|
return Inertia::render('admin/system/setting/Index', [
|
||||||
'system' => $this->systemService->systemData(),
|
'system' => $this->systemService->systemData(),
|
||||||
'socialMedia' => $this->socialMediaService->socialMediaData(),
|
'socialMedia' => $this->socialMediaService->socialMediaData(),
|
||||||
@ -42,15 +45,16 @@ public function index(): Response
|
|||||||
'hr' => $this->hrSettingService->hrData(),
|
'hr' => $this->hrSettingService->hrData(),
|
||||||
'homepage' => $this->homepageSettingService->homepageData(),
|
'homepage' => $this->homepageSettingService->homepageData(),
|
||||||
'hasPendingMarketplaceVerification' => $this->ownerVerificationService->hasPendingMarketplaceVerification(),
|
'hasPendingMarketplaceVerification' => $this->ownerVerificationService->hasPendingMarketplaceVerification(),
|
||||||
|
'canUpdateSystem' => $user->can(Permission::SETTINGS_UPDATE_SYSTEM->value),
|
||||||
|
'canUpdateSocialMedia' => $user->can(Permission::SETTINGS_UPDATE_SOCIAL_MEDIA->value),
|
||||||
|
'canUpdateMarketplace' => $user->can(Permission::SETTINGS_UPDATE_MARKETPLACE->value),
|
||||||
|
'canUpdateHr' => $user->can(Permission::SETTINGS_UPDATE_HR->value),
|
||||||
|
'canUpdateHomepage' => $user->can(Permission::SETTINGS_UPDATE_HOMEPAGE->value),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function updateSystem(SystemRequest $request): RedirectResponse
|
public function updateSystem(SystemRequest $request): RedirectResponse
|
||||||
{
|
{
|
||||||
if (! $request->user()->can(Permission::OWNER_VERIFICATIONS_VERIFY->value)) {
|
|
||||||
abort(403, 'Aksi ini tidak diizinkan.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->systemService->updateSystem($request->validated());
|
$this->systemService->updateSystem($request->validated());
|
||||||
|
|
||||||
$this->flashSuccess('Pengaturan sistem berhasil disimpan.');
|
$this->flashSuccess('Pengaturan sistem berhasil disimpan.');
|
||||||
@ -60,10 +64,6 @@ public function updateSystem(SystemRequest $request): RedirectResponse
|
|||||||
|
|
||||||
public function updateSocialMedia(SocialMediaRequest $request): RedirectResponse
|
public function updateSocialMedia(SocialMediaRequest $request): RedirectResponse
|
||||||
{
|
{
|
||||||
if (! $request->user()->can(Permission::OWNER_VERIFICATIONS_VERIFY->value)) {
|
|
||||||
abort(403, 'Aksi ini tidak diizinkan.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->socialMediaService->updateSocialMedia($request->validated());
|
$this->socialMediaService->updateSocialMedia($request->validated());
|
||||||
|
|
||||||
$this->flashSuccess('Pengaturan media sosial berhasil disimpan.');
|
$this->flashSuccess('Pengaturan media sosial berhasil disimpan.');
|
||||||
@ -86,10 +86,6 @@ public function updateMarketplace(MarketplaceRequest $request): RedirectResponse
|
|||||||
|
|
||||||
public function updateHr(HrSettingRequest $request): RedirectResponse
|
public function updateHr(HrSettingRequest $request): RedirectResponse
|
||||||
{
|
{
|
||||||
if (! $request->user()->can(Permission::OWNER_VERIFICATIONS_VERIFY->value)) {
|
|
||||||
abort(403, 'Aksi ini tidak diizinkan.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->hrSettingService->updateHr($request->validated());
|
$this->hrSettingService->updateHr($request->validated());
|
||||||
|
|
||||||
$this->flashSuccess('Pengaturan HR berhasil disimpan.');
|
$this->flashSuccess('Pengaturan HR berhasil disimpan.');
|
||||||
@ -99,10 +95,6 @@ public function updateHr(HrSettingRequest $request): RedirectResponse
|
|||||||
|
|
||||||
public function updateHomepage(HomepageSettingRequest $request): RedirectResponse
|
public function updateHomepage(HomepageSettingRequest $request): RedirectResponse
|
||||||
{
|
{
|
||||||
if (! $request->user()->can(Permission::OWNER_VERIFICATIONS_VERIFY->value)) {
|
|
||||||
abort(403, 'Aksi ini tidak diizinkan.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->homepageSettingService->updateHomepage($request->validated());
|
$this->homepageSettingService->updateHomepage($request->validated());
|
||||||
|
|
||||||
$this->flashSuccess('Pengaturan homepage berhasil disimpan.');
|
$this->flashSuccess('Pengaturan homepage berhasil disimpan.');
|
||||||
|
|||||||
@ -9,7 +9,7 @@ class HomepageSettingRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return $this->user()?->can(Permission::SETTINGS_UPDATE->value) ?? false;
|
return $this->user()?->can(Permission::SETTINGS_UPDATE_HOMEPAGE->value) ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,6 +24,8 @@ public function rules(): array
|
|||||||
'about_image_s3_key' => ['nullable', 'string'],
|
'about_image_s3_key' => ['nullable', 'string'],
|
||||||
'gallery_s3_keys' => ['nullable', 'array', 'max:10'],
|
'gallery_s3_keys' => ['nullable', 'array', 'max:10'],
|
||||||
'gallery_s3_keys.*' => ['required', 'string'],
|
'gallery_s3_keys.*' => ['required', 'string'],
|
||||||
|
'gallery_images' => ['nullable', 'array', 'max:10'],
|
||||||
|
'gallery_images.*' => ['required', 'image', 'max:5120'],
|
||||||
'gallery_images_remove' => ['nullable', 'array'],
|
'gallery_images_remove' => ['nullable', 'array'],
|
||||||
'gallery_images_remove.*' => ['integer'],
|
'gallery_images_remove.*' => ['integer'],
|
||||||
];
|
];
|
||||||
|
|||||||
@ -9,7 +9,7 @@ class HrSettingRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return $this->user()?->can(Permission::SETTINGS_UPDATE->value) ?? false;
|
return $this->user()?->can(Permission::SETTINGS_UPDATE_HR->value) ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -13,7 +13,7 @@ class MarketplaceRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return $this->user()?->can(Permission::SETTINGS_UPDATE->value) ?? false;
|
return $this->user()?->can(Permission::SETTINGS_UPDATE_MARKETPLACE->value) ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -9,7 +9,7 @@ class SocialMediaRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return $this->user()?->can(Permission::SETTINGS_UPDATE->value) ?? false;
|
return $this->user()?->can(Permission::SETTINGS_UPDATE_SOCIAL_MEDIA->value) ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -10,7 +10,7 @@ class SystemRequest extends FormRequest
|
|||||||
{
|
{
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return $this->user()?->can(Permission::SETTINGS_UPDATE->value) ?? false;
|
return $this->user()?->can(Permission::SETTINGS_UPDATE_SYSTEM->value) ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -3,12 +3,16 @@
|
|||||||
namespace App\Services\System\Setting;
|
namespace App\Services\System\Setting;
|
||||||
|
|
||||||
use App\Models\HomepageConfiguration;
|
use App\Models\HomepageConfiguration;
|
||||||
|
use App\Services\Concerns\RunsInTransaction;
|
||||||
|
use App\Services\Concerns\SyncsPhotos;
|
||||||
use App\Services\Media\MediaService;
|
use App\Services\Media\MediaService;
|
||||||
use App\Support\Media\MediaPresenter;
|
use App\Support\Media\MediaPresenter;
|
||||||
use Illuminate\Http\UploadedFile;
|
use Illuminate\Http\UploadedFile;
|
||||||
|
|
||||||
class HomepageSettingService
|
class HomepageSettingService
|
||||||
{
|
{
|
||||||
|
use RunsInTransaction, SyncsPhotos;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly MediaService $mediaService,
|
private readonly MediaService $mediaService,
|
||||||
) {}
|
) {}
|
||||||
@ -31,30 +35,45 @@ public function homepageData(): array
|
|||||||
|
|
||||||
public function updateHomepage(array $validated): void
|
public function updateHomepage(array $validated): void
|
||||||
{
|
{
|
||||||
|
$this->runInTransaction(
|
||||||
|
function () use ($validated): void {
|
||||||
$configuration = HomepageConfiguration::instance();
|
$configuration = HomepageConfiguration::instance();
|
||||||
|
|
||||||
if (isset($validated['hero_image_s3_key'])) {
|
$this->syncPhotos(
|
||||||
$this->mediaService->replaceSingleS3Key($configuration, $validated['hero_image_s3_key'], 'hero_image', 'hero-image');
|
|
||||||
} elseif (isset($validated['hero_image']) && $validated['hero_image'] instanceof UploadedFile) {
|
|
||||||
$this->mediaService->replaceSingleFile($configuration, $validated['hero_image'], 'hero_image', 'hero-image');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($validated['about_image_s3_key'])) {
|
|
||||||
$this->mediaService->replaceSingleS3Key($configuration, $validated['about_image_s3_key'], 'about_image', 'about-image');
|
|
||||||
} elseif (isset($validated['about_image']) && $validated['about_image'] instanceof UploadedFile) {
|
|
||||||
$this->mediaService->replaceSingleFile($configuration, $validated['about_image'], 'about_image', 'about-image');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($validated['gallery_s3_keys']) || isset($validated['gallery_images_remove'])) {
|
|
||||||
$this->mediaService->syncCollection(
|
|
||||||
$configuration,
|
$configuration,
|
||||||
'gallery',
|
[
|
||||||
null,
|
'photos' => isset($validated['hero_image']) ? [$validated['hero_image']] : null,
|
||||||
$validated['gallery_images_remove'] ?? null,
|
's3_keys' => isset($validated['hero_image_s3_key']) ? [$validated['hero_image_s3_key']] : null,
|
||||||
10,
|
],
|
||||||
'gallery',
|
maxPhotos: 1,
|
||||||
s3Keys: $validated['gallery_s3_keys'] ?? null,
|
required: false,
|
||||||
|
collection: 'hero_image',
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->syncPhotos(
|
||||||
|
$configuration,
|
||||||
|
[
|
||||||
|
'photos' => isset($validated['about_image']) ? [$validated['about_image']] : null,
|
||||||
|
's3_keys' => isset($validated['about_image_s3_key']) ? [$validated['about_image_s3_key']] : null,
|
||||||
|
],
|
||||||
|
maxPhotos: 1,
|
||||||
|
required: false,
|
||||||
|
collection: 'about_image',
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->syncPhotos(
|
||||||
|
$configuration,
|
||||||
|
[
|
||||||
|
'photos' => $validated['gallery_images'] ?? null,
|
||||||
|
'remove_media_ids' => $validated['gallery_images_remove'] ?? null,
|
||||||
|
's3_keys' => $validated['gallery_s3_keys'] ?? null,
|
||||||
|
],
|
||||||
|
maxPhotos: 10,
|
||||||
|
required: false,
|
||||||
|
collection: 'gallery',
|
||||||
|
);
|
||||||
|
},
|
||||||
|
'Gagal memperbarui pengaturan homepage',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@
|
|||||||
use App\Enums\Permission;
|
use App\Enums\Permission;
|
||||||
use App\Models\OwnerVerificationRequest;
|
use App\Models\OwnerVerificationRequest;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
use App\Services\Concerns\RunsInTransaction;
|
||||||
use App\Services\System\PushNotificationService;
|
use App\Services\System\PushNotificationService;
|
||||||
use App\Settings\MarketplaceSettings;
|
use App\Settings\MarketplaceSettings;
|
||||||
use App\Support\Marketplace\MarketplaceFeeCalculator;
|
use App\Support\Marketplace\MarketplaceFeeCalculator;
|
||||||
@ -16,6 +17,8 @@
|
|||||||
|
|
||||||
class MarketplaceService
|
class MarketplaceService
|
||||||
{
|
{
|
||||||
|
use RunsInTransaction;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly PushNotificationService $pushNotificationService,
|
private readonly PushNotificationService $pushNotificationService,
|
||||||
) {}
|
) {}
|
||||||
@ -72,6 +75,8 @@ public function marketplaceData(): array
|
|||||||
|
|
||||||
public function updateMarketplace(array $validated, User $user): void
|
public function updateMarketplace(array $validated, User $user): void
|
||||||
{
|
{
|
||||||
|
$this->runInTransaction(
|
||||||
|
function () use ($validated, $user): void {
|
||||||
if ($user->can(Permission::OWNER_VERIFICATIONS_VERIFY->value)) {
|
if ($user->can(Permission::OWNER_VERIFICATIONS_VERIFY->value)) {
|
||||||
$this->saveSettings($validated);
|
$this->saveSettings($validated);
|
||||||
|
|
||||||
@ -128,6 +133,9 @@ public function updateMarketplace(array $validated, User $user): void
|
|||||||
$user->id,
|
$user->id,
|
||||||
route('admin.system.settings.index'),
|
route('admin.system.settings.index'),
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
'Gagal memperbarui pengaturan marketplace',
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function saveSettings(array $validated): void
|
public function saveSettings(array $validated): void
|
||||||
@ -147,8 +155,13 @@ public function saveSettings(array $validated): void
|
|||||||
|
|
||||||
public function applyVerificationRequest(OwnerVerificationRequest $request): void
|
public function applyVerificationRequest(OwnerVerificationRequest $request): void
|
||||||
{
|
{
|
||||||
|
$this->runInTransaction(
|
||||||
|
function () use ($request): void {
|
||||||
$newPayload = $request->payload['new'] ?? [];
|
$newPayload = $request->payload['new'] ?? [];
|
||||||
$this->saveSettings($newPayload);
|
$this->saveSettings($newPayload);
|
||||||
|
},
|
||||||
|
'Gagal menerapkan pengajuan verifikasi owner',
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildOrderSnapshot(OrderChannel $channel, int $totalAmount, array $lineItems, bool $isAffiliate = false): ?array
|
public function buildOrderSnapshot(OrderChannel $channel, int $totalAmount, array $lineItems, bool $isAffiliate = false): ?array
|
||||||
|
|||||||
@ -3,6 +3,8 @@
|
|||||||
namespace App\Services\System\Setting;
|
namespace App\Services\System\Setting;
|
||||||
|
|
||||||
use App\Models\SystemConfiguration;
|
use App\Models\SystemConfiguration;
|
||||||
|
use App\Services\Concerns\RunsInTransaction;
|
||||||
|
use App\Services\Concerns\SyncsPhotos;
|
||||||
use App\Services\Media\MediaService;
|
use App\Services\Media\MediaService;
|
||||||
use App\Settings\SystemSettings;
|
use App\Settings\SystemSettings;
|
||||||
use App\Support\Media\MediaPresenter;
|
use App\Support\Media\MediaPresenter;
|
||||||
@ -11,6 +13,8 @@
|
|||||||
|
|
||||||
class SystemService
|
class SystemService
|
||||||
{
|
{
|
||||||
|
use RunsInTransaction, SyncsPhotos;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly MediaService $mediaService,
|
private readonly MediaService $mediaService,
|
||||||
) {}
|
) {}
|
||||||
@ -39,6 +43,8 @@ public function systemData(): array
|
|||||||
|
|
||||||
public function updateSystem(array $validated): void
|
public function updateSystem(array $validated): void
|
||||||
{
|
{
|
||||||
|
$this->runInTransaction(
|
||||||
|
function () use ($validated): void {
|
||||||
$settings = app(SystemSettings::class);
|
$settings = app(SystemSettings::class);
|
||||||
$configuration = SystemConfiguration::instance();
|
$configuration = SystemConfiguration::instance();
|
||||||
|
|
||||||
@ -49,23 +55,38 @@ public function updateSystem(array $validated): void
|
|||||||
$settings->address = $validated['address'] ?? null;
|
$settings->address = $validated['address'] ?? null;
|
||||||
$settings->save();
|
$settings->save();
|
||||||
|
|
||||||
if (isset($validated['logo_s3_key'])) {
|
$this->syncPhotos(
|
||||||
$this->mediaService->replaceSingleS3Key($configuration, $validated['logo_s3_key'], 'logo', 'logo');
|
$configuration,
|
||||||
} elseif (isset($validated['logo']) && $validated['logo'] instanceof UploadedFile) {
|
[
|
||||||
$this->mediaService->replaceSingleFile($configuration, $validated['logo'], 'logo', 'logo');
|
'photos' => isset($validated['logo']) ? [$validated['logo']] : null,
|
||||||
}
|
's3_keys' => isset($validated['logo_s3_key']) ? [$validated['logo_s3_key']] : null,
|
||||||
|
],
|
||||||
|
maxPhotos: 1,
|
||||||
|
required: false,
|
||||||
|
collection: 'logo',
|
||||||
|
);
|
||||||
|
|
||||||
if (isset($validated['favicon_s3_key'])) {
|
$this->syncPhotos(
|
||||||
$this->mediaService->replaceSingleS3Key($configuration, $validated['favicon_s3_key'], 'favicon', 'favicon');
|
$configuration,
|
||||||
} elseif (isset($validated['favicon']) && $validated['favicon'] instanceof UploadedFile) {
|
[
|
||||||
$this->mediaService->replaceSingleFile($configuration, $validated['favicon'], 'favicon', 'favicon');
|
'photos' => isset($validated['favicon']) ? [$validated['favicon']] : null,
|
||||||
}
|
's3_keys' => isset($validated['favicon_s3_key']) ? [$validated['favicon_s3_key']] : null,
|
||||||
|
],
|
||||||
|
maxPhotos: 1,
|
||||||
|
required: false,
|
||||||
|
collection: 'favicon',
|
||||||
|
);
|
||||||
|
|
||||||
if (isset($validated['login_cover_s3_key'])) {
|
$this->syncPhotos(
|
||||||
$this->mediaService->replaceSingleS3Key($configuration, $validated['login_cover_s3_key'], 'login_cover', 'login-cover');
|
$configuration,
|
||||||
} elseif (isset($validated['login_cover']) && $validated['login_cover'] instanceof UploadedFile) {
|
[
|
||||||
$this->mediaService->replaceSingleFile($configuration, $validated['login_cover'], 'login_cover', 'login-cover');
|
'photos' => isset($validated['login_cover']) ? [$validated['login_cover']] : null,
|
||||||
}
|
's3_keys' => isset($validated['login_cover_s3_key']) ? [$validated['login_cover_s3_key']] : null,
|
||||||
|
],
|
||||||
|
maxPhotos: 1,
|
||||||
|
required: false,
|
||||||
|
collection: 'login_cover',
|
||||||
|
);
|
||||||
|
|
||||||
$errors = [];
|
$errors = [];
|
||||||
|
|
||||||
@ -84,5 +105,8 @@ public function updateSystem(array $validated): void
|
|||||||
if ($errors !== []) {
|
if ($errors !== []) {
|
||||||
throw ValidationException::withMessages($errors);
|
throw ValidationException::withMessages($errors);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
'Gagal memperbarui pengaturan sistem',
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,7 +24,7 @@ interface MenuItem {
|
|||||||
title: string;
|
title: string;
|
||||||
href: string;
|
href: string;
|
||||||
icon: any;
|
icon: any;
|
||||||
permission?: string;
|
permission?: string | string[];
|
||||||
badgeKey?: 'pendingLeaveRequests' | 'pendingEmployeeAdvances' | 'pendingCuttings';
|
badgeKey?: 'pendingLeaveRequests' | 'pendingEmployeeAdvances' | 'pendingCuttings';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,18 @@ const menuGroups: MenuGroup[] = [
|
|||||||
label: 'Sistem',
|
label: 'Sistem',
|
||||||
items: [
|
items: [
|
||||||
{ title: 'Role & Permission', href: admin.system.roles.index.url(), icon: Shield, permission: 'roles.view' },
|
{ title: 'Role & Permission', href: admin.system.roles.index.url(), icon: Shield, permission: 'roles.view' },
|
||||||
{ title: 'Pengaturan', href: admin.system.settings.index.url(), icon: Settings2, permission: 'settings.view' },
|
{
|
||||||
|
title: 'Pengaturan',
|
||||||
|
href: admin.system.settings.index.url(),
|
||||||
|
icon: Settings2,
|
||||||
|
permission: [
|
||||||
|
'settings.view_system',
|
||||||
|
'settings.view_social_media',
|
||||||
|
'settings.view_marketplace',
|
||||||
|
'settings.view_hr',
|
||||||
|
'settings.view_homepage',
|
||||||
|
],
|
||||||
|
},
|
||||||
{ title: 'Log Aktivitas', href: admin.system.activity_logs.index.url(), icon: History, permission: 'activity_logs.view' },
|
{ title: 'Log Aktivitas', href: admin.system.activity_logs.index.url(), icon: History, permission: 'activity_logs.view' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@ -7,7 +7,10 @@ export function useCan() {
|
|||||||
const permissions = computed(() => page.props.auth.user?.permissions ?? []);
|
const permissions = computed(() => page.props.auth.user?.permissions ?? []);
|
||||||
const roles = computed(() => page.props.auth.user?.roles ?? []);
|
const roles = computed(() => page.props.auth.user?.roles ?? []);
|
||||||
|
|
||||||
function can(permission: string): boolean {
|
function can(permission: string | string[]): boolean {
|
||||||
|
if (Array.isArray(permission)) {
|
||||||
|
return permission.some((p) => permissions.value.includes(p));
|
||||||
|
}
|
||||||
return permissions.value.includes(permission);
|
return permissions.value.includes(permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,11 @@ defineProps<{
|
|||||||
hr: HrSettingsData;
|
hr: HrSettingsData;
|
||||||
homepage: HomepageSettingsData;
|
homepage: HomepageSettingsData;
|
||||||
hasPendingMarketplaceVerification: boolean;
|
hasPendingMarketplaceVerification: boolean;
|
||||||
|
canUpdateSystem: boolean;
|
||||||
|
canUpdateSocialMedia: boolean;
|
||||||
|
canUpdateMarketplace: boolean;
|
||||||
|
canUpdateHr: boolean;
|
||||||
|
canUpdateHomepage: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const { hasRole } = useCan();
|
const { hasRole } = useCan();
|
||||||
@ -39,10 +44,10 @@ const activeSection = ref<SettingSection>(
|
|||||||
<Head title="Pengaturan" />
|
<Head title="Pengaturan" />
|
||||||
|
|
||||||
<SettingLayout v-model:section="activeSection">
|
<SettingLayout v-model:section="activeSection">
|
||||||
<SystemSection v-if="activeSection === SettingSectionConst.SYSTEM" :data="system" />
|
<SystemSection v-if="activeSection === SettingSectionConst.SYSTEM" :data="system" :can-update="canUpdateSystem" />
|
||||||
<HomepageSection v-else-if="activeSection === SettingSectionConst.HOMEPAGE" :data="homepage" />
|
<HomepageSection v-else-if="activeSection === SettingSectionConst.HOMEPAGE" :data="homepage" :can-update="canUpdateHomepage" />
|
||||||
<SocialMediaSection v-else-if="activeSection === SettingSectionConst.SOCIAL" :data="socialMedia" />
|
<SocialMediaSection v-else-if="activeSection === SettingSectionConst.SOCIAL" :data="socialMedia" :can-update="canUpdateSocialMedia" />
|
||||||
<MarketplaceSection v-else-if="activeSection === SettingSectionConst.MARKETPLACE" :data="marketplace" :has-pending-verification="hasPendingMarketplaceVerification" />
|
<MarketplaceSection v-else-if="activeSection === SettingSectionConst.MARKETPLACE" :data="marketplace" :has-pending-verification="hasPendingMarketplaceVerification" :can-update="canUpdateMarketplace" />
|
||||||
<HrSection v-else-if="activeSection === SettingSectionConst.HR" :data="hr" />
|
<HrSection v-else-if="activeSection === SettingSectionConst.HR" :data="hr" :can-update="canUpdateHr" />
|
||||||
</SettingLayout>
|
</SettingLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import type { HomepageSettingsData } from '@/types/setting';
|
|||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
data: HomepageSettingsData;
|
data: HomepageSettingsData;
|
||||||
|
canUpdate: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const heroImage = ref<MediaUploadState>(
|
const heroImage = ref<MediaUploadState>(
|
||||||
@ -107,7 +108,7 @@ function submit() {
|
|||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<div class="flex justify-end">
|
<div v-if="canUpdate" class="flex justify-end">
|
||||||
<Button type="submit" :disabled="isSubmitting || isUploading">
|
<Button type="submit" :disabled="isSubmitting || isUploading">
|
||||||
<Save class="size-4" />
|
<Save class="size-4" />
|
||||||
{{ isUploading ? 'Mengunggah...' : isSubmitting ? 'Menyimpan...' : 'Simpan' }}
|
{{ isUploading ? 'Mengunggah...' : isSubmitting ? 'Menyimpan...' : 'Simpan' }}
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import type { HrSettingsData } from '@/types/setting';
|
|||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
data: HrSettingsData;
|
data: HrSettingsData;
|
||||||
|
canUpdate: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm({
|
||||||
@ -82,7 +83,7 @@ function submit() {
|
|||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<div class="mt-6 flex justify-end">
|
<div v-if="canUpdate" class="mt-6 flex justify-end">
|
||||||
<Button type="submit" :disabled="form.processing">
|
<Button type="submit" :disabled="form.processing">
|
||||||
<Save class="size-4" />
|
<Save class="size-4" />
|
||||||
{{ form.processing ? 'Menyimpan...' : 'Simpan' }}
|
{{ form.processing ? 'Menyimpan...' : 'Simpan' }}
|
||||||
|
|||||||
@ -25,6 +25,7 @@ import MarketplaceFeeField from './MarketplaceFeeField.vue';
|
|||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
data: MarketplaceSettingsData;
|
data: MarketplaceSettingsData;
|
||||||
hasPendingVerification: boolean;
|
hasPendingVerification: boolean;
|
||||||
|
canUpdate: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const activePlatform = ref<MarketplacePlatform>(MarketplacePlatformConst.TIKTOK_SHOP);
|
const activePlatform = ref<MarketplacePlatform>(MarketplacePlatformConst.TIKTOK_SHOP);
|
||||||
@ -188,7 +189,7 @@ function submit() {
|
|||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<div class="flex justify-end">
|
<div v-if="canUpdate" class="flex justify-end">
|
||||||
<Button type="submit" :disabled="form.processing || props.hasPendingVerification">
|
<Button type="submit" :disabled="form.processing || props.hasPendingVerification">
|
||||||
<Save class="size-4" />
|
<Save class="size-4" />
|
||||||
{{ form.processing ? 'Menyimpan...' : 'Simpan' }}
|
{{ form.processing ? 'Menyimpan...' : 'Simpan' }}
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import type { SocialMediaSettingsData } from '@/types/setting';
|
|||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
data: SocialMediaSettingsData;
|
data: SocialMediaSettingsData;
|
||||||
|
canUpdate: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm({
|
||||||
@ -69,7 +70,7 @@ function submit() {
|
|||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<div class="mt-6 flex justify-end">
|
<div v-if="canUpdate" class="mt-6 flex justify-end">
|
||||||
<Button type="submit" :disabled="form.processing">
|
<Button type="submit" :disabled="form.processing">
|
||||||
<Save class="size-4" />
|
<Save class="size-4" />
|
||||||
{{ form.processing ? 'Menyimpan...' : 'Simpan' }}
|
{{ form.processing ? 'Menyimpan...' : 'Simpan' }}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import type { SystemSettingsData } from '@/types/setting';
|
|||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
data: SystemSettingsData;
|
data: SystemSettingsData;
|
||||||
|
canUpdate: boolean;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const form = useForm({
|
const form = useForm({
|
||||||
@ -143,7 +144,7 @@ function submit() {
|
|||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<div class="flex justify-end">
|
<div v-if="canUpdate" class="flex justify-end">
|
||||||
<Button type="submit" :disabled="form.processing || isUploading">
|
<Button type="submit" :disabled="form.processing || isUploading">
|
||||||
<Save class="size-4" />
|
<Save class="size-4" />
|
||||||
{{ isUploading ? 'Mengunggah...' : form.processing ? 'Menyimpan...' : 'Simpan' }}
|
{{ isUploading ? 'Mengunggah...' : form.processing ? 'Menyimpan...' : 'Simpan' }}
|
||||||
|
|||||||
@ -477,28 +477,28 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
Route::prefix('settings')->name('settings.')
|
Route::prefix('settings')->name('settings.')
|
||||||
->middleware('permission:'.Permission::SETTINGS_VIEW->value)
|
->middleware('permission:'.Permission::SETTINGS_VIEW_SYSTEM->value.'|'.Permission::SETTINGS_VIEW_SOCIAL_MEDIA->value.'|'.Permission::SETTINGS_VIEW_MARKETPLACE->value.'|'.Permission::SETTINGS_VIEW_HR->value.'|'.Permission::SETTINGS_VIEW_HOMEPAGE->value)
|
||||||
->group(function () {
|
->group(function () {
|
||||||
Route::get('/', [SettingController::class, 'index'])->name('index');
|
Route::get('/', [SettingController::class, 'index'])->name('index');
|
||||||
|
|
||||||
Route::put('system', [SettingController::class, 'updateSystem'])
|
Route::put('system', [SettingController::class, 'updateSystem'])
|
||||||
->middleware('permission:'.Permission::SETTINGS_UPDATE->value)
|
->middleware('permission:'.Permission::SETTINGS_UPDATE_SYSTEM->value)
|
||||||
->name('system.update');
|
->name('system.update');
|
||||||
|
|
||||||
Route::put('social-media', [SettingController::class, 'updateSocialMedia'])
|
Route::put('social-media', [SettingController::class, 'updateSocialMedia'])
|
||||||
->middleware('permission:'.Permission::SETTINGS_UPDATE->value)
|
->middleware('permission:'.Permission::SETTINGS_UPDATE_SOCIAL_MEDIA->value)
|
||||||
->name('social_media.update');
|
->name('social_media.update');
|
||||||
|
|
||||||
Route::put('marketplace', [SettingController::class, 'updateMarketplace'])
|
Route::put('marketplace', [SettingController::class, 'updateMarketplace'])
|
||||||
->middleware('permission:'.Permission::SETTINGS_UPDATE->value)
|
->middleware('permission:'.Permission::SETTINGS_UPDATE_MARKETPLACE->value)
|
||||||
->name('marketplace.update');
|
->name('marketplace.update');
|
||||||
|
|
||||||
Route::put('hr', [SettingController::class, 'updateHr'])
|
Route::put('hr', [SettingController::class, 'updateHr'])
|
||||||
->middleware('permission:'.Permission::SETTINGS_UPDATE->value)
|
->middleware('permission:'.Permission::SETTINGS_UPDATE_HR->value)
|
||||||
->name('hr.update');
|
->name('hr.update');
|
||||||
|
|
||||||
Route::put('homepage', [SettingController::class, 'updateHomepage'])
|
Route::put('homepage', [SettingController::class, 'updateHomepage'])
|
||||||
->middleware('permission:'.Permission::SETTINGS_UPDATE->value)
|
->middleware('permission:'.Permission::SETTINGS_UPDATE_HOMEPAGE->value)
|
||||||
->name('homepage.update');
|
->name('homepage.update');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -79,7 +79,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
|
|
||||||
describe('Setting Index', function () {
|
describe('Setting Index', function () {
|
||||||
test('authenticated user with permission can view settings page', function () {
|
test('authenticated user with permission can view settings page', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->get(route('admin.system.settings.index'))
|
->get(route('admin.system.settings.index'))
|
||||||
@ -104,7 +104,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
|
|
||||||
describe('Setting Update System', function () {
|
describe('Setting Update System', function () {
|
||||||
test('authenticated user with permission can update system settings', function () {
|
test('authenticated user with permission can update system settings', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['logo'] = UploadedFile::fake()->image('logo.jpg', 100, 100);
|
$payload['logo'] = UploadedFile::fake()->image('logo.jpg', 100, 100);
|
||||||
@ -127,7 +127,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('user without update permission is forbidden', function () {
|
test('user without update permission is forbidden', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.system.update'), validSystemPayload())
|
->put(route('admin.system.settings.system.update'), validSystemPayload())
|
||||||
@ -135,7 +135,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('app_name is required', function () {
|
test('app_name is required', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['app_name'] = '';
|
$payload['app_name'] = '';
|
||||||
@ -146,7 +146,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('app_name must not exceed 100 characters', function () {
|
test('app_name must not exceed 100 characters', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['app_name'] = str_repeat('a', 101);
|
$payload['app_name'] = str_repeat('a', 101);
|
||||||
@ -157,7 +157,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('email must be valid', function () {
|
test('email must be valid', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['email'] = 'not-an-email';
|
$payload['email'] = 'not-an-email';
|
||||||
@ -168,7 +168,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('email is required', function () {
|
test('email is required', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['email'] = '';
|
$payload['email'] = '';
|
||||||
@ -179,7 +179,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('phone must be valid phone number', function () {
|
test('phone must be valid phone number', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['phone'] = '123invalid';
|
$payload['phone'] = '123invalid';
|
||||||
@ -190,7 +190,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('phone is required', function () {
|
test('phone is required', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['phone'] = '';
|
$payload['phone'] = '';
|
||||||
@ -201,7 +201,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('about_app is required', function () {
|
test('about_app is required', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['about_app'] = '';
|
$payload['about_app'] = '';
|
||||||
@ -212,7 +212,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('address is required', function () {
|
test('address is required', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['address'] = '';
|
$payload['address'] = '';
|
||||||
@ -223,7 +223,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('logo must be an image when provided', function () {
|
test('logo must be an image when provided', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['logo'] = UploadedFile::fake()->create('document.pdf', 100);
|
$payload['logo'] = UploadedFile::fake()->create('document.pdf', 100);
|
||||||
@ -234,7 +234,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('favicon must be an image when provided', function () {
|
test('favicon must be an image when provided', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SYSTEM, PermissionEnum::SETTINGS_UPDATE_SYSTEM);
|
||||||
|
|
||||||
$payload = validSystemPayload();
|
$payload = validSystemPayload();
|
||||||
$payload['favicon'] = UploadedFile::fake()->create('document.pdf', 100);
|
$payload['favicon'] = UploadedFile::fake()->create('document.pdf', 100);
|
||||||
@ -249,7 +249,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
|
|
||||||
describe('Setting Update Social Media', function () {
|
describe('Setting Update Social Media', function () {
|
||||||
test('authenticated user can update social media settings', function () {
|
test('authenticated user can update social media settings', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SOCIAL_MEDIA, PermissionEnum::SETTINGS_UPDATE_SOCIAL_MEDIA);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.social_media.update'), [
|
->put(route('admin.system.settings.social_media.update'), [
|
||||||
@ -272,7 +272,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('user without update permission is forbidden', function () {
|
test('user without update permission is forbidden', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SOCIAL_MEDIA);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.social_media.update'), [
|
->put(route('admin.system.settings.social_media.update'), [
|
||||||
@ -282,7 +282,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('social media urls can be null', function () {
|
test('social media urls can be null', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SOCIAL_MEDIA, PermissionEnum::SETTINGS_UPDATE_SOCIAL_MEDIA);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.social_media.update'), [
|
->put(route('admin.system.settings.social_media.update'), [
|
||||||
@ -299,7 +299,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('instagram_url must be a valid url', function () {
|
test('instagram_url must be a valid url', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SOCIAL_MEDIA, PermissionEnum::SETTINGS_UPDATE_SOCIAL_MEDIA);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.social_media.update'), [
|
->put(route('admin.system.settings.social_media.update'), [
|
||||||
@ -309,7 +309,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('facebook_url must be a valid url', function () {
|
test('facebook_url must be a valid url', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SOCIAL_MEDIA, PermissionEnum::SETTINGS_UPDATE_SOCIAL_MEDIA);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.social_media.update'), [
|
->put(route('admin.system.settings.social_media.update'), [
|
||||||
@ -319,7 +319,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('tiktok_url must be a valid url', function () {
|
test('tiktok_url must be a valid url', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_SOCIAL_MEDIA, PermissionEnum::SETTINGS_UPDATE_SOCIAL_MEDIA);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.social_media.update'), [
|
->put(route('admin.system.settings.social_media.update'), [
|
||||||
@ -333,7 +333,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
|
|
||||||
describe('Setting Update Marketplace', function () {
|
describe('Setting Update Marketplace', function () {
|
||||||
test('authenticated user can update marketplace settings', function () {
|
test('authenticated user can update marketplace settings', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_MARKETPLACE, PermissionEnum::SETTINGS_UPDATE_MARKETPLACE);
|
||||||
|
|
||||||
$payload = allMarketplaceFeeFields();
|
$payload = allMarketplaceFeeFields();
|
||||||
|
|
||||||
@ -353,7 +353,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('user without update permission is forbidden', function () {
|
test('user without update permission is forbidden', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_MARKETPLACE);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.marketplace.update'), allMarketplaceFeeFields())
|
->put(route('admin.system.settings.marketplace.update'), allMarketplaceFeeFields())
|
||||||
@ -361,7 +361,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('marketplace fee scope must be valid enum', function () {
|
test('marketplace fee scope must be valid enum', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_MARKETPLACE, PermissionEnum::SETTINGS_UPDATE_MARKETPLACE);
|
||||||
|
|
||||||
$payload = allMarketplaceFeeFields();
|
$payload = allMarketplaceFeeFields();
|
||||||
$payload['tiktok_shop_platform_commission']['scope'] = 'invalid';
|
$payload['tiktok_shop_platform_commission']['scope'] = 'invalid';
|
||||||
@ -372,7 +372,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('marketplace fee value_type must be valid enum', function () {
|
test('marketplace fee value_type must be valid enum', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_MARKETPLACE, PermissionEnum::SETTINGS_UPDATE_MARKETPLACE);
|
||||||
|
|
||||||
$payload = allMarketplaceFeeFields();
|
$payload = allMarketplaceFeeFields();
|
||||||
$payload['tiktok_shop_platform_commission']['value_type'] = 'invalid';
|
$payload['tiktok_shop_platform_commission']['value_type'] = 'invalid';
|
||||||
@ -383,7 +383,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('marketplace fee value must be numeric', function () {
|
test('marketplace fee value must be numeric', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_MARKETPLACE, PermissionEnum::SETTINGS_UPDATE_MARKETPLACE);
|
||||||
|
|
||||||
$payload = allMarketplaceFeeFields();
|
$payload = allMarketplaceFeeFields();
|
||||||
$payload['tiktok_shop_platform_commission']['value'] = 'not-a-number';
|
$payload['tiktok_shop_platform_commission']['value'] = 'not-a-number';
|
||||||
@ -394,7 +394,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('marketplace fee percent value must not exceed 100', function () {
|
test('marketplace fee percent value must not exceed 100', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_MARKETPLACE, PermissionEnum::SETTINGS_UPDATE_MARKETPLACE);
|
||||||
|
|
||||||
$payload = allMarketplaceFeeFields();
|
$payload = allMarketplaceFeeFields();
|
||||||
$payload['tiktok_shop_platform_commission']['value_type'] = 'percent';
|
$payload['tiktok_shop_platform_commission']['value_type'] = 'percent';
|
||||||
@ -406,7 +406,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('marketplace flat fee must not have decimals', function () {
|
test('marketplace flat fee must not have decimals', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_MARKETPLACE, PermissionEnum::SETTINGS_UPDATE_MARKETPLACE);
|
||||||
|
|
||||||
$payload = allMarketplaceFeeFields();
|
$payload = allMarketplaceFeeFields();
|
||||||
$payload['shopee_admin_fee']['value_type'] = 'flat';
|
$payload['shopee_admin_fee']['value_type'] = 'flat';
|
||||||
@ -422,7 +422,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
|
|
||||||
describe('Setting Update HR', function () {
|
describe('Setting Update HR', function () {
|
||||||
test('authenticated user can update HR settings', function () {
|
test('authenticated user can update HR settings', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR, PermissionEnum::SETTINGS_UPDATE_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -454,7 +454,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('user without update permission is forbidden', function () {
|
test('user without update permission is forbidden', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -467,7 +467,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('scheduled_check_in_time is required', function () {
|
test('scheduled_check_in_time is required', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR, PermissionEnum::SETTINGS_UPDATE_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -480,7 +480,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('scheduled_check_in_time must match HH:MM format', function () {
|
test('scheduled_check_in_time must match HH:MM format', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR, PermissionEnum::SETTINGS_UPDATE_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -493,7 +493,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('scheduled_check_out_time is required', function () {
|
test('scheduled_check_out_time is required', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR, PermissionEnum::SETTINGS_UPDATE_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -506,7 +506,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('late_penalty_amount must be integer', function () {
|
test('late_penalty_amount must be integer', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR, PermissionEnum::SETTINGS_UPDATE_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -519,7 +519,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('late_penalty_amount must not be negative', function () {
|
test('late_penalty_amount must not be negative', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR, PermissionEnum::SETTINGS_UPDATE_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -532,7 +532,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('absent_penalty_amount must be integer', function () {
|
test('absent_penalty_amount must be integer', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HR, PermissionEnum::SETTINGS_UPDATE_HR);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.hr.update'), [
|
->put(route('admin.system.settings.hr.update'), [
|
||||||
@ -549,7 +549,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
|
|
||||||
describe('Setting Update Homepage', function () {
|
describe('Setting Update Homepage', function () {
|
||||||
test('authenticated user can update homepage settings', function () {
|
test('authenticated user can update homepage settings', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HOMEPAGE, PermissionEnum::SETTINGS_UPDATE_HOMEPAGE);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.homepage.update'), [])
|
->put(route('admin.system.settings.homepage.update'), [])
|
||||||
@ -562,7 +562,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('user without update permission is forbidden', function () {
|
test('user without update permission is forbidden', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HOMEPAGE);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.homepage.update'), [])
|
->put(route('admin.system.settings.homepage.update'), [])
|
||||||
@ -570,7 +570,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('hero_image must be an image when provided', function () {
|
test('hero_image must be an image when provided', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HOMEPAGE, PermissionEnum::SETTINGS_UPDATE_HOMEPAGE);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.homepage.update'), [
|
->put(route('admin.system.settings.homepage.update'), [
|
||||||
@ -580,7 +580,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('about_image must be an image when provided', function () {
|
test('about_image must be an image when provided', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HOMEPAGE, PermissionEnum::SETTINGS_UPDATE_HOMEPAGE);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.homepage.update'), [
|
->put(route('admin.system.settings.homepage.update'), [
|
||||||
@ -590,7 +590,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('gallery_images must be an array of images', function () {
|
test('gallery_images must be an array of images', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HOMEPAGE, PermissionEnum::SETTINGS_UPDATE_HOMEPAGE);
|
||||||
|
|
||||||
$this->actingAs($user)
|
$this->actingAs($user)
|
||||||
->put(route('admin.system.settings.homepage.update'), [
|
->put(route('admin.system.settings.homepage.update'), [
|
||||||
@ -600,7 +600,7 @@ function allMarketplaceFeeFields(): array
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('gallery_images must not exceed 10 items', function () {
|
test('gallery_images must not exceed 10 items', function () {
|
||||||
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW, PermissionEnum::SETTINGS_UPDATE);
|
$user = createSettingUserWithPermission(PermissionEnum::SETTINGS_VIEW_HOMEPAGE, PermissionEnum::SETTINGS_UPDATE_HOMEPAGE);
|
||||||
|
|
||||||
$images = [];
|
$images = [];
|
||||||
for ($i = 0; $i < 11; $i++) {
|
for ($i = 0; $i < 11; $i++) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user