From aefe55a70d6f6bae7825f3a1a6b61046c8ec2cc3 Mon Sep 17 00:00:00 2001 From: Harald Eilertsen Date: Sat, 11 Sep 2021 11:56:36 +0200 Subject: tests: Make an actual test for ConcertsTable There's a bit of setup to make this work as it should, we need to ensure that the current user and current screen is set to proper values so that the WordPress api's `is_admin()` and `current_user_can()` work as they should. This first test just tests that all the expected forms are being rendered for the admin user accessing the table through the site admin interface. --- includes/admin/views/_concerts_table.php | 6 +++--- tests/ConcertsTableTest.php | 29 ++++++++++++++++++++++++----- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/includes/admin/views/_concerts_table.php b/includes/admin/views/_concerts_table.php index 25bbef7..9c895de 100644 --- a/includes/admin/views/_concerts_table.php +++ b/includes/admin/views/_concerts_table.php @@ -157,7 +157,7 @@ if (!class_exists("GiglogAdmin_ConcertsTable")) private function adminactions( GiglogAdmin_Concert $concert ) : string { return - '
' + '' . '' . \EternalTerror\ViewHelpers\select_field( 'selectstatus', @@ -193,7 +193,7 @@ if (!class_exists("GiglogAdmin_ConcertsTable")) //first check if current slot is taken by current user if ( $assigned_user == $this->username ) { - $f = '' + $f = '' . ' ' . ' ' . ' ' @@ -208,7 +208,7 @@ if (!class_exists("GiglogAdmin_ConcertsTable")) $f = '-'; } else { //not taken by anyone - $f = '' + $f = '' . ' ' . ' ' . ' ' diff --git a/tests/ConcertsTableTest.php b/tests/ConcertsTableTest.php index 73852c8..ad0e65f 100644 --- a/tests/ConcertsTableTest.php +++ b/tests/ConcertsTableTest.php @@ -75,20 +75,39 @@ class ConcertsTableTest extends WP_UnitTestCase } function testShowAllControlsToAdminOnAdminPage() { + global $current_screen; + global $current_user; + + $current_user = $this->factory()->user->create_and_get(['role' => 'administrator']); + $this->assertTrue( current_user_can( 'administrator' ) ); + + $oldscreen = $current_screen; + $current_screen = WP_Screen::get( 'admin_init' ); + $this->assertTrue(is_admin()); + $c = new GiglogAdmin_ConcertsTable(); $html = $c->render(); - //$this->assertEquals('balle', $html); + + $current_screen = $oldscreen; $doc = DOMDocument::loadHTML($html); $forms = $doc->getElementsByTagName('form'); - $count = 0; + + $assignit_count = 0; + $adminactions_count = 0; + foreach ($forms as $form) { $cls = $form->attributes->getNamedItem('class')->nodeValue; - if ($cls == 'assignit' || $cls == 'unassignit') { - $count++; + if ($cls == 'assign_concert' || $cls == 'unassign_concert') { + $assignit_count++; + } + + if ($cls == 'adminactions') { + $adminactions_count++; } } - $this->assertEquals($count, 64); + $this->assertEquals(64, $assignit_count); // four for each gig + $this->assertEquals(16, $adminactions_count); // once for each gig } } -- cgit v1.2.3