File: D:/HostingSpaces/Neopoints/momsecurity.be/app/Komma/Shop/Tests/Browser/ProductGroupTest.php
<?php
namespace App\Komma\Shop\Tests\Browser;
use App\Komma\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\User;
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
*/
public function testProductsGroupMenuItem()
{
$this->browse(function (Browser $browser) {
$browser->loginAs(User::find(1))
->visit(new ProductGroupSectionTestPage())
->screenshot($this->getName(false));
});
}
/**
* @group ProductGroupSection
* @test
*/
public function testNewProductGroupScreen()
{
$this->browse(function (Browser $browser) {
$browser->loginAs(User::find(1))
->visit(new ProductGroupSectionTestPage())
->click('@addButton')
->assertSee('Nieuwe product groep')
->screenshot($this->getName(false));
});
}
/**
* @group ProductGroupSection
* @test
*/
public function testAddingOfEmptyProductGroupFailure()
{
$this->browse(function (Browser $browser) {
$browser->loginAs(User::find(1))
->visit(new ProductGroupSectionTestPage())
->click('@addButton')
->assertSee('Nieuwe product groep')
->click('@saveButton')
->assertSee('titel is verplicht.')
->screenshot($this->getName(false));
});
}
/**
* @group ProductGroupSection
* @test
*/
public function testAddingProductGroupCorrectlyAndDeletingIt()
{
$productGroupName = 'Dusk test product group ' . mt_rand(0, 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(User::find(1))
->visit(new ProductGroupSectionTestPage())
->click('@addButton')
->assertSee('Nieuwe product groep')
->click('@nlTab')
->type('TextField-name-nl', $productGroupName)
->click('@deTab')
->type('TextField-name-de', $productGroupName)
->click('@enTab')
->type('TextField-name-en', $productGroupName)
->screenshot($this->getName(false) . '-' . ++$counter)
->click('@generalTab')
->screenshot($this->getName(false) . '-' . ++$counter)
->type('@productSelector', $productTranslation->name)->pause(350)
->keys('@productSelector', '{down}')->pause(350)
->keys('@productSelector', '{enter}')->pause(350)
->assertSee($productTranslation->name)
->screenshot($this->getName(false) . '-' . ++$counter)
->type('@productSelector', $productTranslationTwo->name)->pause(350)
->keys('@productSelector', '{down}')->pause(350)
->keys('@productSelector', '{enter}')->pause(350)
->assertSee($productTranslationTwo->name)
->screenshot($this->getName(false) . '-' . ++$counter)
->click('@saveButton')
->assertSeeIn('#main-entities-list > ul', $productGroupName)
->screenshot($this->getName(false));
});
//Delete product group
$counter = 0;
$this->browse(function (Browser $browser) use ($productGroupName, $counter) {
$browser->visit(new ProductGroupSectionTestPage())
->type('@searchInput', $productGroupName)
->screenshot($this->getName(false) . '-' . ++$counter)
->assertSeeIn('#search-result-counter', '1')
->click('#productgroups-searchlist > li.entities-list-item.active > a')
->screenshot($this->getName(false) . '-' . ++$counter)
->assertSeeIn('#entity > div.entity-header > div.entity-header-attributes > h2', $productGroupName)
->click('@deleteButton')
->assertSee(__('kms/global.confirm_deletion'))
->click('@confirmYes')
->assertSee(__('kms/global.removed'))
->screenshot($this->getName(false) . '-' . ++$counter);
});
}
/**
* @group ProductGroupSection
* @test
*/
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(User::find(1))
->visit(new ProductGroupSectionTestPage())
->click('@addButton')
->assertSee('Nieuwe product groep')
->click('@nlTab')
->type('TextField-name-nl', $productGroupName)
->click('@deTab')
->type('TextField-name-de', $productGroupName)
->click('@enTab')
->type('TextField-name-en', $productGroupName)
->screenshot($this->getName(false) . '-' . ++$counter)
->click('@generalTab')
->type('@categorySelector', $categoryName)->pause(350)
->keys('@categorySelector', '{down}')->pause(350)
->keys('@categorySelector', '{enter}')->pause(350)
->assertSee($categoryName)
->screenshot($this->getName(false) . '-' . ++$counter)->pause(500)
->type('@categorySelector', $categoryName2)->pause(350)
->keys('@categorySelector', '{down}')->pause(350)
->keys('@categorySelector', '{enter}')->pause(350)
->assertSee($categoryName2)
->screenshot($this->getName(false) . '-' . ++$counter)
->click('@saveButton')
->assertSeeIn('#main-entities-list > ul', $productGroupName)
->screenshot($this->getName(false));
});
//Delete product group
$counter = 0;
$this->browse(function (Browser $browser) use ($productGroupName, $counter) {
$browser->visit(new ProductGroupSectionTestPage())
->type('@searchInput', $productGroupName)
->assertSeeIn('#search-result-counter', '1')
->click('#productgroups-searchlist > li.entities-list-item.active > a')
->assertSeeIn('#entity > div.entity-header > div.entity-header-attributes > h2', $productGroupName)
->click('@deleteButton')
->assertSee(__('kms/global.confirm_deletion'))
->click('@confirmYes')
->assertSee(__('kms/global.removed'));
});
$category1->delete();
$category2->delete();
}
}