87 lines
3.0 KiB
PHP
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');
|
|
});
|