HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/farmfun/reserveren.farmfun.be/tests/Browser/AuthorisationTest.php
<?php declare(strict_types=1);


namespace Tests\Browser;


use App\Komma\Kms\QualityAssurance\ExtraDuskTools;
use App\Komma\Users\Models\KmsUserRole;
use App\Komma\Users\Models\KmsUser;
use Laravel\Dusk\Browser;
use Tests\Browser\Pages\KmsUsersSectionTestPage;
use Tests\DuskTestCase;

class AuthorisationTest extends DuskTestCase
{
    /**
     * @test
     * @group Authorisation
     * @throws \Throwable
     * @see ExtraDuskTools
     */
    public function testUserSectionAuthorisationForAdmins()
    {
        $newUser = factory(KmsUser::class)->make();

        $adminUser = KmsUser::where('email', '=', \KmsUserTableSeeder::getAdminDefaultCredentials()['email'])->first();

        //Get the roles that should be available for admins, and roles that should not
        [$availableAdminRoles, $unavailableAdminRoles] = collect(KmsUserRole::getAsArray())->partition(function (
            int $role
        ) use ($adminUser) {
            return $adminUser->isAtLeast($role);
        });

        //Test that the Admin user can create another user.
        $this->browse(function (Browser $browser) use (
            $adminUser,
            $newUser,
            $availableAdminRoles,
            $unavailableAdminRoles
        ) {
            $browser->loginAs($adminUser, 'kms')
                ->visit(new KmsUsersSectionTestPage())//When the user visits this page it means that is Authorized to view it. See App\Komma\Base\Policy::index(). Triggered by the controller's index method.
                ->assertVisible('@add_button')//When the users sees this button it means that he is Authorized to see it. See App\Komma\Base\Policy::index(). Triggered by the call in entities/index.blade.php
                ->click('@add_button')
                ->assertVisible('@save_button')
                ->type('@TextField-first_name', $newUser->first_name)
                ->type('@TextField-last_name', $newUser->last_name)
                ->type('@TextField-email', $newUser->email)
                ->type('@Password-password-1', 'Test123')
                ->type('@Password-password-2', 'Test123')
                ->click('@save_button')
                ->assertSee(__('kms/global.saved'));

            $newUser = KmsUser::where('email', '=', $newUser->email)->first();
            $this->assertEquals(KmsUserRole::Admin, $newUser->role); //The new user must be an admin at this point

            $browser->assertSee(__('kms/kms_users.section.title'))
                ->type('@entity_search_input', $newUser->first_name . ' ' . $newUser->last_name)
                ->assertSeeIn('@search-result-counter',
                    '1'); //The adminUser which we used to login must now see the just created other admin user. Because the list must show users that have the same role level or lower.
        });
    }
}