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/Eurotools/euro-tools.nl/app/KommaApp/Shop/Tests/Browser/ProductCompositeTest.php
<?php

namespace App\KommaApp\Shop\Tests\Browser;

use App\KommaApp\Shop\Products\Product\Product;
use App\KommaApp\Shop\Products\ProductGroup\ProductGroup;
use App\KommaApp\Shop\Products\ProductGroupBehaviour\ProductGroupBehaviour;
use App\KommaApp\Shop\Tests\Browser\Pages\ProductCompositeSectionTestPage;
use App\KommaApp\Shop\Tests\DuskTestCase;
use App\KommaApp\Users\Models\User;
use Laravel\Dusk\Browser;

class ProductCompositeTest extends DuskTestCase
{
//    use DatabaseTransactions; //Automatically rolls back database actions after tests

    private function getAdminUser(): User
    {
        return User::where('role_id', '=', '1')->first();
    }

    /**
     * @group ProductCompositeSection
     * @test
     */
    public function testProductsGroupMenuItem()
    {
        $this->browse(function (Browser $browser) {
            $browser->loginAs($this->getAdminUser())
                ->visit(new ProductCompositeSectionTestPage())
                ->screenshot($this->getName(false));
        });
    }

    /**
     * @group ProductCompositeSection
     * @test
     */
    public function testNewProductGroupScreen()
    {
        $this->browse(function (Browser $browser) {
            $browser->loginAs($this->getAdminUser())
                ->visit(new ProductCompositeSectionTestPage())
                ->click('@addButton')
                ->assertSee('Nieuwe samengestelde product groep')
                ->screenshot($this->getName(false));
        });
    }

    /**
     * @group ProductCompositeSection
     * @test
     */
    public function testAddingOfEmptyProductGroupFailure()
    {
        $this->browse(function (Browser $browser) {
            $browser->loginAs($this->getAdminUser())
                ->visit(new ProductCompositeSectionTestPage())
                ->click('@addButton')
                ->assertSee('Nieuwe samengestelde product groep')
                ->click('@saveButton')
                ->assertSee('titel is verplicht.')
                ->screenshot($this->getName(false));
        });
    }


    /**
     * @group ProductCompositeSection
     * @test
     */
    public function testAddingProductCompositeCorrectlyAndDeletingIt()
    {
        $productCompositeName = 'Dusk test composite group ' . mt_rand(0, 99999);

        //Create 1 product that we add to the groups for testing purposes
        /** @var Product $product */
        $product = factory(Product::class)->create();
        $product->save();

        $behaviourOr = factory(ProductGroupBehaviour::class)->create();
        $behaviourOr->save();

        /** @var ProductGroup $productGroup */
        $productGroup = factory(ProductGroup::class)->make();
        $productGroup->productGroupBehaviour()->associate($behaviourOr);
        $productGroup->save();
        $productGroup->products()->attach($product);
        /** @var ProductGroup $productGroup2 */
        $productGroup2 = factory(ProductGroup::class)->make();
        $productGroup2->productGroupBehaviour()->associate($behaviourOr);
        $productGroup2->save();
        $productGroup2->products()->attach($product);

        $counter = 0;
        $this->browse(function (Browser $browser) use ($productCompositeName, $counter, $productGroup, $productGroup2) {
            $browser->loginAs($this->getAdminUser())
                ->visit(new ProductCompositeSectionTestPage())
                ->click('@addButton')
                ->assertSee('Nieuwe samengestelde product groep')
                ->type('TextField-title', $productCompositeName)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->type('#AutocompleteInput-groups-fake', $productGroup->title)->pause(350)
                ->keys('#AutocompleteInput-groups-fake', '{down}')->pause(350)
                ->keys('#AutocompleteInput-groups-fake', '{enter}')->pause(350)
                ->assertSee($productGroup->title)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->type('#AutocompleteInput-groups-fake', $productGroup2->title)->pause(350)
                ->keys('#AutocompleteInput-groups-fake', '{down}')->pause(350)
                ->keys('#AutocompleteInput-groups-fake', '{enter}')->pause(350)
                ->assertSee($productGroup2->title)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->click('@saveButton')
                ->assertSeeIn('#main-entities-list > ul', $productCompositeName)
                ->screenshot($this->getName(false));
        });


        $counter = 0;
        $this->browse(function (Browser $browser) use ($productCompositeName, $counter) {
            $browser->visit(new ProductCompositeSectionTestPage())
                ->type('@searchInput', $productCompositeName)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->assertSeeIn('#search-result-counter', '1')
                ->click('#productcomposites-searchlist > li.entities-list-item.active > a')
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->assertSeeIn('#entity > div.entity-header > div.entity-header-attributes > h2', $productCompositeName)
                ->click('@deleteButton')
                ->assertSee(__('kms/global.removed'))
                ->screenshot($this->getName(false) . '-' . ++$counter);
        });

        $productGroup->delete();
        $productGroup2->delete();
        $behaviourOr->delete();
        $product->delete();
    }
}