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/SBogers10/stafa.komma.pro/app/Komma/Shop/Tests/Browser/ProductGroupTest.php
<?php

namespace App\Komma\Shop\Tests\Browser;

use App\Komma\Globalization\Languages\Models\Language;
use App\Komma\Shop\Categories\Models\Category;
use App\Komma\Shop\Categories\Models\CategoryTranslation;
use App\Komma\Shop\Products\Product\Product;
use App\Komma\Shop\Products\Product\ProductTranslation;
use App\Komma\Shop\Tests\Browser\Pages\ProductGroupSectionTestPage;
use App\Komma\Shop\Tests\DuskTestCase;
use App\Komma\Users\Models\KmsUser;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Laravel\Dusk\Browser;

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

    /**
     * @group ProductGroupSection
     * @test
     * @throws \Throwable
     */
    public function testProductsGroupMenuItem()
    {
        $this->browse(function (Browser $browser) {
            $browser->loginAs(KmsUser::find(1), 'kms')
                ->visit(new ProductGroupSectionTestPage())
                ->screenshot($this->getName(false));
        });
    }

    /**
     * @group ProductGroupSection
     * @test
     * @throws \Throwable
     */
    public function testNewProductGroupScreen()
    {
        $this->browse(function (Browser $browser) {
            $browser->loginAs(KmsUser::find(1), 'kms')
                ->visit(new ProductGroupSectionTestPage())
                ->click('@add_button')
                ->assertSee('Nieuwe product groep')
                ->screenshot($this->getName(false));
        });
    }

    /**
     * @group ProductGroupSection
     * @test
     * @throws \Throwable
     */
    public function testAddingOfEmptyProductGroupFailure()
    {
        $this->browse(function (Browser $browser) {
            $browser->loginAs(KmsUser::find(1), 'kms')
                ->visit(new ProductGroupSectionTestPage())
                ->click('@add_button')
                ->assertSee('Nieuwe product groep')
                ->click('@save_button')
                ->assertSee(__('validation.required', ['attribute' => __('kms/global.title')])) //titel is verplicht
                ->screenshot($this->getName(false));
        });
    }


    /**
     * @group ProductGroupSection
     * @test
     * @throws \Throwable
     */
    public function testAddingProductGroupCorrectlyAndDeletingIt()
    {
        $productGroupName = 'Dusk test product group ' . mt_rand(10000, 99999);

        //Create 2 products that we add to the group for testing purposes
        /** @var ProductTranslation $productTranslation */
        $productTranslation = factory(ProductTranslation::class)->create();
        $product = $productTranslation->translatable();
        $productTranslationTwo = factory(ProductTranslation::class)->create();
        $product2 = $productTranslationTwo->translatable();

        //Add
        $counter = 0;
        $this->browse(function (Browser $browser) use ($productGroupName, $counter, $product, $product2, $productTranslation, $productTranslationTwo) {
            $browser->loginAs(KmsUser::find(1), 'kms')
                ->visit(new ProductGroupSectionTestPage())
                ->click('@add_button')
                ->assertSee('Nieuwe product groep')
                ->click('@entity_tab_nl')
                ->type('TextField-name-nl', $productGroupName)
                ->click('@entity_tab_de')
                ->type('TextField-name-de', $productGroupName)
                ->click('@entity_tab_en')
                ->type('TextField-name-en', $productGroupName)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->click('@entity_tab_algemeen')
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->type('@MultiSelect-products-fake', $productTranslation->name)->pause(350)
                ->keys('@MultiSelect-products-fake', '{down}')->pause(350)
                ->keys('@MultiSelect-products-fake', '{enter}')->pause(350)
                ->assertSee($productTranslation->name)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->type('@MultiSelect-products-fake', $productTranslationTwo->name)->pause(350)
                ->keys('@MultiSelect-products-fake', '{down}')->pause(350)
                ->keys('@MultiSelect-products-fake', '{enter}')->pause(350)
                ->assertSee($productTranslationTwo->name)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->click('@save_button')
                ->assertSeeIn('@regular_list', $productGroupName)
                ->screenshot($this->getName(false));
        });

        //Delete product group
        $counter = 0;
        $this->browse(function (Browser $browser) use ($productGroupName, $counter) {
            $browser->visit(new ProductGroupSectionTestPage())
                ->type('@entity_search_input', $productGroupName)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->assertSeeIn('@search-result-counter', '1')
                ->click('@found_search_item')
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->assertSeeIn('@entity_header', $productGroupName)
                ->click('@delete_button')
                ->assertSee(__('kms/global.confirm_deletion'))
                ->click('@confirmation_confirm')
                ->assertSee(__('kms/global.removed'))
                ->screenshot($this->getName(false) . '-' . ++$counter);
        });
    }

    /**
     * @group ProductGroupSection
     * @test
     * @throws \Throwable
     */
    public function testAddingProductGroupToSomeCategoriesAndDeletingIt()
    {
        //Create 2 sample categories to add the product to
        $language = Language::find(104);
        $this->assertInstanceOf(Language::class, $language);

        $categoryName = 'Dusk test Category 1 ' . mt_rand(0, 99999);
        $categoryName2 = 'Dusk test Category 2 ' . mt_rand(0, 99999);

        $rootCategory = Category::find(1);
        $this->assertInstanceOf(Category::class, $rootCategory);

        /** @var Category $category1 */
        $category1 = factory(Category::class)->make();
        $category1->makeLastChildOf($rootCategory);

        /** @var Category $category2 */
        $category2 = factory(Category::class)->make();
        $category2->makeLastChildOf($rootCategory);

        $translation = new CategoryTranslation(['name' => $categoryName, 'meta_title' => $categoryName, 'slug' => str_slug($categoryName)]);
        $translation->language()->associate($language);
        $category1->translations()->save($translation);

        $translation2 = new CategoryTranslation(['name' => $categoryName2, 'meta_title' => $categoryName2, 'slug' => str_slug($categoryName2)]);
        $translation2->language()->associate($language);
        $category2->translations()->save($translation2);

        $productGroupName = 'Dusk test group' . mt_rand(0, 99999);

        //Add
        $counter = 0;
        $this->browse(function (Browser $browser) use ($productGroupName, $categoryName, $categoryName2, $counter, $category1, $category2) {
            $browser->loginAs(KmsUser::find(1), 'kms')
                ->visit(new ProductGroupSectionTestPage())
                ->click('@add_button')
                ->assertSee('Nieuwe product groep')
                ->click('@entity_tab_nl')
                ->type('TextField-name-nl', $productGroupName)
                ->click('@entity_tab_de')
                ->type('TextField-name-de', $productGroupName)
                ->click('@entity_tab_en')
                ->type('TextField-name-en', $productGroupName)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->click('@entity_tab_algemeen')
                ->type('@MultiSelect-category_id-fake', $categoryName)->pause(350)
                ->keys('@MultiSelect-category_id-fake', '{down}')->pause(350)
                ->keys('@MultiSelect-category_id-fake', '{enter}')->pause(350)
                ->assertSee($categoryName)
                ->screenshot($this->getName(false) . '-' . ++$counter)->pause(500)
                ->type('@MultiSelect-category_id-fake', $categoryName2)->pause(350)
                ->keys('@MultiSelect-category_id-fake', '{down}')->pause(350)
                ->keys('@MultiSelect-category_id-fake', '{enter}')->pause(350)
                ->assertSee($categoryName2)
                ->screenshot($this->getName(false) . '-' . ++$counter)
                ->click('@save_button')
                ->assertSeeIn('@regular_list', $productGroupName)
                ->screenshot($this->getName(false));
        });

        //Delete product group
        $counter = 0;
        $this->browse(function (Browser $browser) use ($productGroupName, $counter) {
            $browser->visit(new ProductGroupSectionTestPage())
                ->type('@entity_search_input', $productGroupName)
                ->assertSeeIn('@search-result-counter', '1')
                ->click('@found_search_item')
                ->assertSeeIn('@entity_header', $productGroupName)
                ->click('@delete_button')
                ->assertSee(__('kms/global.confirm_deletion'))
                ->click('@confirmation_confirm')
                ->assertSee(__('kms/global.removed'));
        });

        $category1->delete();
        $category2->delete();
    }
}