DEV Community

Discussion on: Do devs really need to test?

Collapse
 
suckup_de profile image
Lars Moelleken • Edited

Hi, Acceptance-Tests is what you are looking for. :)

  • add some helper css-classes into your dom (test-, js-, ...)
  • and run the tests in headless-chrome in you CI server

e.g. via codeception.com/

<?php

final class UserTemplateAcceptanceCest {

    /**
     * @return array
     */
    protected function userTemplateProvider()
    {
        return [
            ['kunde_id' => 45127002, 'templateName' => 'Foo' . uniqid('Foo', true)],
            ['kunde_id' => 45127003, 'templateName' => ''],
            ['kunde_id' => -1, 'templateName' => 0],
            ['kunde_id' => 0, 'templateName' => 'FooBar' . uniqid('Foo', true)],
        ];
    }

    /**
     * @dataProvider userTemplateProvider
     *
     * @param \AcceptanceTester    $I
     * @param \Codeception\Example $userTemplateData
     *
     * @return void
     */
    public function testCreateTemplate(\AcceptanceTester $I, \Codeception\Example $userTemplateData): void
    {
        $I->wantTo('Create new user-template.');
        $I->amOnUrl($I, UserTemplateDetailsView::getUrl(['element_id' => 'new']));

        $I->waitForElementVisible('.test-PageTitle');

        $I->fillField(['name' => 'templatename'], $userTemplateData['templateName']);
        $I->selectOption('kunde_id', ['value' => $userTemplateData['kunde_id']]);
        // ...
        $I->clickWithLeftButton('.test-HtmlFormExtendedSubmitButton');

        $I->canSee($userTemplateData['templateName'], '.test-HtmlTableContent');
    }

    /**
     * @depends      testCreateTemplate
     *
     * @dataProvider userTemplateProvider
     *
     * @param \AcceptanceTester    $I
     * @param \Codeception\Example $userTemplateData
     *
     * @return void
     */
    public function testDeleteTemplate(\AcceptanceTester $I, \Codeception\Example $userTemplateData): void
    {
        $I->wantTo('Delete created User-Template.');

        $I->waitForElementVisible('.test-PageTitle');

        $I->fillField(['name' => 'usertemplate_id'], $userTemplateData['templateName']);
        $I->clickWithLeftButton('.test-ButtonIconSearch');
        $I->waitForAjaxWithSpinner();

        $I->clickWithLeftButton('.test-SelectAllElements');
        $I->clickWithLeftButton('test-Act' . StammdatenUserTemplateListChangeListDeleteAct::class);

        $I->clickWithLeftButton('.test-ButtonExecute');
        $I->acceptPopup();

        $I->cantSee($userTemplateData['templateName'], '.test-HtmlTableContent');
    }

}