Files
ppeasy_vg12/tests/Feature/Web/Settings/NotificationsSettingsTest.php
T
2026-10-09 08:21:06 +02:00

87 lines
3.0 KiB
PHP

<?php
use App\Events\Settings\Updated as SettingsUpdated;
use Facades\Tests\Setup\RoleFactory;
use Facades\Tests\Setup\UserFactory;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Event;
use Inertia\Testing\AssertableInertia as Assert;
uses(RefreshDatabase::class);
beforeEach(function () {
$this->artisan('db:seed');
});
test('notifications settings page is displayed', function () {
Setting::set('notifications_signup_email', 1);
$this->actingAsAdmin()
->get('/settings/notifications')
->assertOk()
->assertInertia(fn (Assert $page) => $page
->component('settings/Notifications')
->where('values.notifications_signup_email', 1)
);
});
test('update notifications settings', function () {
Setting::set('notifications_signup_email', 0);
$this->actingAsAdmin()
->from('/settings/notifications')
->post('/settings/notifications', ['notifications_signup_email' => 1])
->assertRedirect('/settings/notifications');
$this->assertEquals(1, Setting::get('notifications_signup_email'));
});
test('updating notifications settings dispatches the settings updated event', function () {
Event::fake([SettingsUpdated::class]);
$this->actingAsAdmin()
->from('/settings/notifications')
->post('/settings/notifications', ['notifications_signup_email' => 1])
->assertRedirect('/settings/notifications');
Event::assertDispatched(SettingsUpdated::class);
});
test('only users with appropriate permission can view notifications settings', function () {
$userA = UserFactory::role(RoleFactory::create())->create();
$userB = UserFactory::role(RoleFactory::withPermissions('settings.notifications')->create())->create();
$this->actingAs($userA)->get('/settings/notifications')->assertStatus(403);
$this->actingAs($userB)->get('/settings/notifications')->assertOk();
});
test('only users with appropriate permission can update notifications settings', function () {
Setting::set('notifications_signup_email', 0);
$roleA = RoleFactory::create();
$roleB = RoleFactory::withPermissions('settings.notifications')->create();
$userA = UserFactory::role($roleA)->create();
$userB = UserFactory::role($roleB)->create();
$this->actingAs($userA)
->from('/settings/notifications')
->post('/settings/notifications', ['notifications_signup_email' => 1])
->assertStatus(403);
$this->assertEquals(0, Setting::get('notifications_signup_email'));
$this->actingAs($userB)
->from('/settings/notifications')
->post('/settings/notifications', ['notifications_signup_email' => 1])
->assertRedirect('/settings/notifications');
$this->assertEquals(1, Setting::get('notifications_signup_email'));
});
test('notifications settings are unavailable to guests', function () {
$this->get('/settings/notifications')->assertRedirect('login');
$this->post('/settings/notifications', ['notifications_signup_email' => 1])->assertRedirect('login');
});