Plugin Directory

Changeset 1545834


Ignore:
Timestamp:
12/05/2016 12:13:06 PM (9 years ago)
Author:
argonius
Message:

Added General Settings tests

Location:
ag-custom-admin/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • ag-custom-admin/trunk/readme.txt

    r1545084 r1545834  
    55Requires at least: 3.0
    66Tested up to: 4.7
    7 Stable tag: 5.7
     7Stable tag: 5.7.1
    88License: GPLv3 or later
    99License URI: https://www.gnu.org/licenses/gpl.txt
     
    153153== Change Log ==
    154154
     155= 5.7.1 =
     156* Added General Options tests
     157
    155158= 5.7 =
    156159* Added Save button on top
     
    521524== Upgrade Notice ==
    522525
     526= 5.7.1 =
     527* Added tests.
     528
    523529= 5.7 =
    524530* Bug fixes. Ready for WordPress 4.7.
  • ag-custom-admin/trunk/tests/_bootstrap.php

    r1545084 r1545834  
    33define('AGCA_SITE_USERNAME','admin');
    44define('AGCA_SITE_PASSWORD','admin');
     5define('AGCA_SITE_SUBSCRIBER_USERNAME','subscriber');
     6define('AGCA_SITE_SUBSCRIBER_PASSWORD','subscriber');
     7define('AGCA_SITE_EDITOR_USERNAME','editor');
     8define('AGCA_SITE_EDITOR_PASSWORD','editor');
  • ag-custom-admin/trunk/tests/_support/AcceptanceTester.php

    r1545828 r1545834  
    1616 *
    1717 * @SuppressWarnings(PHPMD)
    18 */
     18 */
    1919class AcceptanceTester extends \Codeception\Actor
    2020{
    2121    use _generated\AcceptanceTesterActions;
    2222
    23     public function login()
     23    private function login($username = AGCA_SITE_USERNAME, $password = AGCA_SITE_PASSWORD)
    2424    {
    2525        $I = $this;
    2626        $I->amOnPage('/wp-login.php');
    2727        $I->see('Username or Email Address');
     28
    2829        $I->submitForm('#loginform', [
    29             'log' => AGCA_SITE_USERNAME,
    30             'pwd' => AGCA_SITE_PASSWORD
     30            'log' => $username,
     31            'pwd' => $password
    3132        ]);
    3233
     
    4041    }
    4142
    42     public function checkAgcaOption($name){
    43         try{
    44             $this->click("#agca_form input.agca-checkbox[name=$name]:not(:checked) + div");
    45         }catch (Exception $e){}
     43    public function loginAsAdmin()
     44    {
     45        $this->login();
     46        return $this;
    4647    }
    4748
    48     public function isAgcaOptionChecked($name){
    49         return (bool) $this->executeJS(
    50             'return jQuery("#agca_form input.agca-checkbox[name='.$name.']:checked").size()'
     49    public function loginAsSubscriber()
     50    {
     51        $this->login(
     52            AGCA_SITE_SUBSCRIBER_USERNAME,
     53            AGCA_SITE_SUBSCRIBER_PASSWORD
     54        );
     55        return $this;
     56    }
     57
     58    public function loginAsEditor()
     59    {
     60        $this->login(
     61            AGCA_SITE_EDITOR_USERNAME,
     62            AGCA_SITE_EDITOR_PASSWORD
     63        );
     64        return $this;
     65    }
     66
     67    public function logOut(){
     68        $logOutLink = $this->executeJS('return jQuery("#wp-admin-bar-logout a").attr("href");');
     69        $this->amOnUrl($logOutLink);
     70        return $this;
     71    }
     72
     73    public function checkAgcaOption($name)
     74    {
     75        try {
     76            if(!$this->isAgcaOptionChecked($name)){
     77                $this->click("#agca_form input.agca-checkbox[name=$name]:not(:checked) + div");
     78            }
     79        } catch (Exception $e) {
     80        }
     81    }
     82
     83    public function isAgcaOptionChecked($name)
     84    {
     85        return (bool)$this->executeJS(
     86            'return jQuery("#agca_form input.agca-checkbox[name=' . $name . ']:checked").size()'
    5187        );
    5288    }
    5389
    54     public function uncheckAgcaOption($name){
    55         try{
    56             $this->click("#agca_form input.agca-checkbox[name=$name]:checked + div");
    57         }catch (Exception $e){}
     90    public function uncheckAgcaOption($name)
     91    {
     92        try {
     93            if($this->isAgcaOptionChecked($name)){
     94                $this->click("#agca_form input.agca-checkbox[name=$name]:checked + div");
     95            }
     96        } catch (Exception $e) {
     97        }
    5898    }
    5999
    60     public function getAGCAOptionLabel($name){
     100    public function getAGCAOptionLabel($name)
     101    {
    61102        return $this->executeJS("return jQuery(\"label[for=$name]\").text();");
    62103    }
    63104
    64     public function changeAgcaSelectOption($selector, $value){
     105    public function changeAgcaSelectOption($selector, $value)
     106    {
    65107        $this->executeJS("jQuery(\"#agca_form $selector\").val('$value');");
    66108    }
  • ag-custom-admin/trunk/tests/_support/Page/AGCAPage.php

    r1545828 r1545834  
    88    // include url of current page
    99    public static $URL = '/wp-admin/tools.php?page=ag-custom-admin/plugin.php#general-settings';
     10    public static $PAGE_TITLE = 'General Settings';
    1011
    1112    /**
     
    3940    public function seeMenu($text){
    4041        $this->I->see($text, '#ag_main_menu li.normal a');
     42        return $this;
    4143    }
    4244
    4345    public function selectedMenu($text){
    4446        $this->I->see($text, '#ag_main_menu li.selected a');
     47        return $this;
    4548    }
    4649
    47     public function amOnGeneralPage(){
     50    public function visit(){
    4851        $this->I->amOnPage($this::$URL);
    49         $this->I->see('General Settings');
     52        $this->I->see($this::$PAGE_TITLE);
     53        return $this;
    5054    }
    5155
    5256    public function seeArea($text){
    5357        $this->I->see($text, '#agca_form .ag_table_heading h3');
     58        return $this;
    5459    }
    5560
    5661    public function saveSettings(){
    5762        $this->I->submitForm('#agca_form', []);
     63        return $this;
    5864    }
    5965
     
    6571        return $this->I->executeJS("return jQuery(\"#agca_form $selector\").val();");
    6672    }
     73
     74    /**
     75     * Prepares options before testing and persists them in database
     76     * @param array $options
     77     */
     78    public function prepareAgcaOptions($options = []){
     79        $I = $this->I;
     80
     81        foreach($options as $key=>$option){
     82            if(is_array($option)){ //selectbox or something else
     83                switch($option['type']){
     84                    case 'select':
     85                        $I->changeAgcaSelectOption($key, $option['value']);
     86                    default:;
     87                }
     88            }else if(is_bool($option)){ //checkbox
     89                if($option){
     90                    $I->checkAgcaOption($key);
     91                }else{
     92                    $I->uncheckAgcaOption($key);
     93                }
     94            }else{ //text
     95                //TODO: Implement text options
     96            }
     97        }
     98
     99        $this->saveSettings()->visit();
     100
     101        //Check if options are persisted correctly
     102        foreach($options as $key=>$option){
     103            if(is_array($option)){ //select or something else
     104                switch($option['type']){
     105                    case 'select':
     106                        $I->assertEquals(
     107                            $option['value'],
     108                            $this->getAgcaSelectedOption($key)
     109                        );
     110                    default:;
     111                }
     112            }else if(is_bool($option)){ //checkbox
     113                $isOptionChecked = $I->isAgcaOptionChecked($key);
     114                if($option){
     115                    $I->assertTrue($isOptionChecked);
     116                }else{
     117                    $I->assertFalse($isOptionChecked);
     118                }
     119            }else{ //text
     120                //TODO: Implement text options
     121            }
     122        }
     123    }
    67124}
  • ag-custom-admin/trunk/tests/_support/Page/GeneralPage.php

    r1545828 r1545834  
    44class GeneralPage extends AGCAPage
    55{
     6    public static $helpMenuOption = 'agca_help_menu';
     7    public static $helpMenuOptionLabel = '"Help" menu';
     8
     9    public static $screenOption = 'agca_screen_options_menu';
     10    public static $screenOptionLabel = '"Screen Options" menu';
     11
    612    public static $capabilityField = 'select#agca_admin_capability';
    713    public static $capabilityLabel = 'AGCA admin capability:';
     14    public static $capabilityEditDashboard = 'edit_dashboard';
     15    public static $capabilityCreateUsers = 'create_users';
     16    public static $capabilityEditPosts = 'edit_posts';
     17
     18    public static $excludeAdministratorOption = 'agca_role_allbutadmin';
     19    public static $excludeAdministratorOptionLabel = 'Exclude AGCA admin from customizations';
    820}
  • ag-custom-admin/trunk/tests/_support/Page/WPDashboardPage.php

    r1545828 r1545834  
    3434    }
    3535
    36     public function amOnDashboardPage(){
     36    public function visit(){
    3737        $this->I->amOnPage($this::$URL);
    3838        $this->I->see('Dashboard', 'body h1:nth-child(1)');
     39        return $this;
    3940    }
    4041
  • ag-custom-admin/trunk/tests/acceptance/GeneralSettingsCest.php

    r1545828 r1545834  
    66class GeneralSettingsCest
    77{
     8    /**
     9     * @var GeneralPage
     10     */
     11    private $generalPage;
     12
    813    public function _before(AcceptanceTester $I)
    914    {
    10         $I->login();
     15        $I->loginAsAdmin();
     16        $this->generalPage = new GeneralPage($I);
    1117    }
    1218
     
    1824    public function test_general_settings_shows_up(AcceptanceTester $I)
    1925    {
    20         (new GeneralPage($I))->amOnGeneralPage();
    21     }
    22 
    23     public function test_main_menu(AcceptanceTester $I){
    24         $page = new GeneralPage($I);
    25         $page->amOnGeneralPage();
    26 
    27         $page->selectedMenu('General');
    28         $page->seeMenu('Admin Bar');
    29         $page->seeMenu('Footer');
    30         $page->seeMenu('Dashboard');
    31         $page->seeMenu('Login Page');
    32         $page->seeMenu('Admin Menu');
    33         $page->seeMenu('Colorizer');
    34         $page->seeMenu('Advanced');
    35         $page->seeMenu('Themes');
    36         $page->seeMenu('Upgrade');
    37     }
    38 
    39     public function test_areas(AcceptanceTester $I){
    40         $page = new GeneralPage($I);
    41         $page->amOnGeneralPage();
    42         $page->seeArea('Pages');
    43         $page->seeArea('Security');
    44         $page->seeArea('Feedback and Support');
    45     }
    46 
    47     public function test_feedback_and_support(AcceptanceTester $I){
    48         (new GeneralPage($I))->amOnGeneralPage();
     26        $this->generalPage->visit();
     27    }
     28
     29    public function test_main_menu(AcceptanceTester $I)
     30    {
     31        // Initialization -----------------------------------------
     32
     33        $page = $this->generalPage->visit();
     34
     35        // Assertions ------------------------------------------------
     36
     37        $page
     38            ->selectedMenu('General')
     39            ->seeMenu('Admin Bar')
     40            ->seeMenu('Footer')
     41            ->seeMenu('Dashboard')
     42            ->seeMenu('Login Page')
     43            ->seeMenu('Admin Menu')
     44            ->seeMenu('Colorizer')
     45            ->seeMenu('Advanced')
     46            ->seeMenu('Themes')
     47            ->seeMenu('Upgrade');
     48    }
     49
     50    public function test_areas(AcceptanceTester $I)
     51    {
     52        // Initialization -----------------------------------------
     53
     54        $page = $this->generalPage->visit();
     55
     56        // Assertions ------------------------------------------------
     57
     58        $page
     59            ->seeArea('Pages')
     60            ->seeArea('Security')
     61            ->seeArea('Feedback and Support');
     62    }
     63
     64    public function test_feedback_and_support(AcceptanceTester $I)
     65    {
     66        // Initialization -----------------------------------------
     67
     68        $this->generalPage->visit();
     69
     70        // Assertions ------------------------------------------------
    4971
    5072        $I->see('Idea for improvement');
     
    5981    }
    6082
    61     public function test_capability_field(AcceptanceTester $I){
    62         $page = new GeneralPage($I);
    63         $page->amOnGeneralPage();
    64 
    65         $editDashboardOption = 'edit_dashboard';
    66         $createUsersOption = 'create_users';
    67 
    68         //set new value
    69         $I->changeAgcaSelectOption(GeneralPage::$capabilityField, $createUsersOption);
    70         $I->assertEquals($createUsersOption, $page->getAgcaSelectedOption(GeneralPage::$capabilityField));
    71         $page->saveSettings();
    72         $page->amOnGeneralPage();
    73         $I->assertEquals($createUsersOption, $page->getAgcaSelectedOption(GeneralPage::$capabilityField));
    74 
    75         //Return to default
    76         $I->changeAgcaSelectOption(GeneralPage::$capabilityField, $editDashboardOption);
    77         $I->assertEquals($editDashboardOption, $page->getAgcaSelectedOption(GeneralPage::$capabilityField));
    78         $page->saveSettings();
    79         $page->amOnGeneralPage();
    80         $I->assertEquals($editDashboardOption, $page->getAgcaSelectedOption(GeneralPage::$capabilityField));
    81 
    82         //TODO: Test if this actually affects user that does not have that capability. Login with subscriber
    83     }
    84 
    85     public function test_help_menu(AcceptanceTester $I)
    86     {
    87         $page = new GeneralPage($I);
    88         $page->amOnGeneralPage();
    89 
    90         $option = 'agca_help_menu';
    91         $label = '"Help" menu';
     83    public function test_capability_field(AcceptanceTester $I)
     84    {
     85        // Initialization -----------------------------------------
     86
     87        $dashboardPage = new WPDashboardPage($I);
     88        $page = $this->generalPage->visit();
     89
     90        // Prerequisites -------------------------------------------
     91
     92        $page->prepareAgcaOptions([
     93            GeneralPage::$helpMenuOption => true,
     94            GeneralPage::$excludeAdministratorOption =>true,
     95            GeneralPage::$capabilityField => [
     96                'type' => 'select',
     97                'value' => GeneralPage::$capabilityEditPosts
     98            ]
     99        ]);
     100
     101        // Assertions ------------------------------------------------
     102
     103        //EDITOR SHOULD NOT SEE THE CHANGES
     104        $I->logOut()->loginAsEditor();
     105        $dashboardPage->visit()->canSeeHelpOptions();
     106
     107        //SUBSCRIBER SHOULD SEE THE CHANGES
     108        $I->logOut()->loginAsSubscriber();
     109        $dashboardPage->visit()->canSeeHelpOptions(false);
     110
     111
     112        $I->logOut()->loginAsAdmin();
     113
     114        $page->visit();
     115
     116        //Return to default capability value
     117        $page->prepareAgcaOptions([
     118            GeneralPage::$capabilityField => [
     119                'type' => 'select',
     120                'value' => GeneralPage::$capabilityEditDashboard
     121            ]
     122        ]);
     123    }
     124
     125    public function test_exclude_administrator(AcceptanceTester $I)
     126    {
     127        // Initialization -----------------------------------------
     128
     129        $dashboardPage = new WPDashboardPage($I);
     130        $page = $this->generalPage->visit();
     131
     132        $option = GeneralPage::$excludeAdministratorOption;
     133        $label = GeneralPage::$excludeAdministratorOptionLabel;
     134
     135
     136        // Prerequisites -------------------------------------------
     137
     138        $page->prepareAgcaOptions([
     139            GeneralPage::$helpMenuOption => true,
     140            GeneralPage::$capabilityField => [
     141                'type' => 'select',
     142                'value' => GeneralPage::$capabilityEditDashboard
     143            ]
     144        ]);
     145
     146        // Assertions ------------------------------------------------
    92147
    93148        //Assert label is correct
    94149        $I->assertEquals($label, $I->getAGCAOptionLabel($option));
    95150
    96         //Toggle hiding OFF
    97         $I->uncheckAgcaOption($option);
    98         $page->saveSettings();
    99 
    100         $page->amOnGeneralPage();
    101         $I->assertFalse($I->isAgcaOptionChecked($option));
    102 
    103         $dashboardPage = new WPDashboardPage($I);
    104         $dashboardPage->amOnDashboardPage();
    105         $dashboardPage->canSeeHelpOptions();
    106 
    107         //Toggle hiding ON;
    108         $page->amOnGeneralPage();
    109         $I->checkAgcaOption($option);
    110         $page->saveSettings();
    111         $page->amOnGeneralPage();
    112         $I->assertTrue($I->isAgcaOptionChecked($option));
    113 
    114         $dashboardPage->amOnDashboardPage();
    115         $dashboardPage->canSeeHelpOptions(false);
    116     }
    117 
    118     public function test_screen_options(AcceptanceTester $I){
    119         $page = new GeneralPage($I);
    120         $page->amOnGeneralPage();
    121 
    122         $option = 'agca_screen_options_menu';
    123         $label = '"Screen Options" menu';
     151        //Toggle OFF: Administrator is not excluded, he should see customizations
     152        $page->prepareAgcaOptions([ $option => false ]);
     153        $dashboardPage->visit()->canSeeHelpOptions(false);
     154
     155        $page->visit();
     156
     157        //Toggle ON: Administrator is excluded, customizations should not affect him
     158        $page->prepareAgcaOptions([ $option => true ]);
     159        $dashboardPage->visit()->canSeeHelpOptions();
     160
     161        //Revert back this option to defaults:
     162        $page->visit();
     163        $page->prepareAgcaOptions([ $option => false ]);
     164    }
     165
     166    public function test_help_menu(AcceptanceTester $I)
     167    {
     168        // Initialization -----------------------------------------
     169
     170        $dashboardPage = new WPDashboardPage($I);
     171        $page = $this->generalPage->visit();
     172
     173        $option = GeneralPage::$helpMenuOption;
     174        $label = GeneralPage::$helpMenuOptionLabel;
     175
     176        // Assertions ------------------------------------------------
    124177
    125178        //Assert label is correct
    126179        $I->assertEquals($label, $I->getAGCAOptionLabel($option));
    127180
     181        //Toggle  OFF
     182        $page->prepareAgcaOptions([ $option => false ]);
     183        $dashboardPage->visit()->canSeeHelpOptions();
     184
     185        //Toggle ON;
     186        $page->visit();
     187
     188        $page->prepareAgcaOptions([ $option => true ]);
     189        $dashboardPage->visit()->canSeeHelpOptions(false);
     190    }
     191
     192    public function test_screen_options(AcceptanceTester $I)
     193    {
     194        // Initialization -----------------------------------------
     195
     196        $dashboardPage = new WPDashboardPage($I);
     197        $page = $this->generalPage->visit();
     198
     199        $option = GeneralPage::$screenOption;
     200        $label = GeneralPage::$screenOptionLabel;
     201
     202        // Assertions ------------------------------------------------
     203
     204        //Assert label is correct
     205        $I->assertEquals($label, $I->getAGCAOptionLabel($option));
     206
    128207        //Toggle hiding OFF
    129         $I->uncheckAgcaOption($option);
    130         $page->saveSettings();
    131 
    132         $page->amOnGeneralPage();
    133         $I->assertFalse($I->isAgcaOptionChecked($option));
    134 
    135         $dashboardPage = new WPDashboardPage($I);
    136         $dashboardPage->amOnDashboardPage();
    137         $dashboardPage->canSeeScreenOptions();
     208        $page->prepareAgcaOptions([ $option => false ]);
     209        $dashboardPage->visit()->canSeeScreenOptions();
     210
     211        $page->visit();
    138212
    139213        //Toggle hiding ON;
    140         $page->amOnGeneralPage();
    141         $I->checkAgcaOption($option);
    142         $page->saveSettings();
    143         $page->amOnGeneralPage();
    144         $I->assertTrue($I->isAgcaOptionChecked($option));
    145 
    146         $dashboardPage->amOnDashboardPage();
    147         $dashboardPage->canSeeScreenOptions(false);
     214        $page->prepareAgcaOptions([ $option => true ]);
     215        $dashboardPage->visit()->canSeeScreenOptions(false);
    148216    }
    149217}
Note: See TracChangeset for help on using the changeset viewer.