<?php

namespace Tests\Browser;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

use App\Models\User;

use Tests\Browser\Components\Feedback;

class LoginTest extends DuskTestCase
{
    public function test_a_user_can_login()
    {
        $this->browse(function ($browser) {
            $user = User::factory()->create([
                'password' => bcrypt('password'),
            ]);

            $browser->visit('/community')
                    //->click('@menu')
                    //->pause(500)
                    ->waitFor('@login')
                    ->pause(500)
                    ->click('@login')
                    ->waitFor('@submit-login-button')
                    ->assertPathIs('/login')
                    ->assertTitleContains('Login')
                    ->assertGuest()
                    ->waitFor('@submit-login-button')
                    ->press('@submit-login-button')
                    ->within(new Feedback(), function ($browser) {
                        $browser->assertFeedbackContains('The email field is required')
                            ->assertFeedbackContains('The password field is required');
                    })
                    ->type('@login-email', $user->email)
                    ->type('@login-password', 'password')
                    ->press('@submit-login-button')
                    ->waitFor('@user-menu')
                    ->within(new Feedback(), function ($browser) {
                        $browser->assertFeedbackContains('Login Successful');
                    })
                    ->assertAuthenticatedAs($user)
                    ->waitFor('@user-menu')
                    ->pause(500)
                    ->click('@user-menu')
                    ->pause(500)
                    ->waitFor('@logout-button')
                    ->click('@logout-button')
                    ->within(new Feedback(), function ($browser) {
                        $browser->assertFeedbackContains('Logout Complete');
                    })
                    ->assertGuest();
        });
    }
}
