<?php

namespace Tests\Browser;

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

use Tests\Browser\Pages\Login;
use Tests\Browser\Components\AddContentElement;
use Tests\Browser\Components\Editor;

use App\Models\Page;
use App\Models\User;
use App\Models\ContentElement;

class ScriptTest extends DuskTestCase
{
    use WithFaker;

    public function test_javascript_cannot_be_executed_when_placed_in_the_editor()
    {
        $this->browse(function ($browser) {
            $page = Page::factory()->create();
            $user = User::factory()->create();
            $user->createPermission('publish', $page);

            $browser->visit(new Login())
                    ->loginAndEditPage($page, $user)
                    ->waitFor('@page-editor')
                    ->waitFor('@add-content-element-last')
                    ->with(new AddContentElement(), function ($browser) {
                        $browser->create('photo-block');
                    })
                    ->pause(1500);

            $content_element = ContentElement::all()->last();

            $header = $this->faker->words(3, true);
            $body = '<script >alert(‘FOOBAR’)</script>';

            $browser->with('@content-element-'.$content_element->id, function ($browser) use ($header, $body, $content_element) {
                $browser->click('@toggle-text')
                    ->waitFor('@header')
                    ->type('@header', $header)
                    ->within(new Editor('body', $content_element->id), function ($browser) use ($body) {
                        $browser->typeInEditor($body);
                    });
            })
            ->pause(1500)
            ->click('@preview-page');

            $old_tab = collect($browser->driver->getWindowHandles())->first();
            $new_tab = collect($browser->driver->getWindowHandles())->last();
            $browser->driver->switchTo()->window($new_tab);

            $browser->click('@content-element-'.$content_element->id);

            $browser->driver->switchTo()->window($old_tab);

            $browser->click('@publish-page')
                ->acceptDialog()
                ->clickAndWaitForReload('@editing-button')
                ->waitFor('@content-element-'.$content_element->id)
                ->click('@content-element-'.$content_element->id);
        });
    }
}
