summaryrefslogtreecommitdiffstats
path: root/tests/ConcertsTableTest.php
blob: ad0e65f3ff2a688ecb81e09eeabec753d25fa297 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php declare(strict_types=1);
// SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com>
// SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

class ConcertsTableTest extends WP_UnitTestCase
{
    const VENUES = [
        [ "Rockefeller Music Hall", "Oslo" ],
        [ "Sentrum Scene", "Oslo" ],
        [ "Revolver", "Oslo" ],
        [ "Meieriet", "Sogndal" ],
    ];

    const CONCERTS = [
        [ "Concert at Rockefeller #", 0, 2 ],
        [ "Concert at Sentrum Scene #", 1, 4 ],
        [ "Concert at Revolver #", 2, 5 ],
        [ "Concert at Meieriet #", 3, 5 ],
    ];

    private static $concerts = [];

    /* This function runs _once_ before all the test cases.
     *
     * Use it to set up a common state that all test cases can
     * use
     */
    static function wpSetUpBeforeClass() : void
    {
        $created_venues = [];
        foreach (self::VENUES as $venue) {
            $created_venues[] = GiglogAdmin_Venue::find_or_create($venue[0], $venue[1]);
        }

        $today = date("Y-m-d");

        foreach (self::CONCERTS as $concert) {
            for ($i = 0; $i < $concert[2]; $i++) {
                if ($concert[2] > 1) {
                    $concert_name = $concert[0] . ($i + 1);
                }
                else {
                    $concert_name = $concert[0];
                }

                self::$concerts[] = GiglogAdmin_Concert::create(
                    $concert_name,
                    $created_venues[$concert[1]]->id(),
                    $today,
                    "https://example.com/tickets/42",
                    "https://example.com/events/93");
            }
        }
    }

    /* This function runs _once_ after all the test cases in this class.
     *
     * It is needed to clean up changes in the database that we don't want
     * to disturb any other tests.
     */
    static function wpTearDownAfterClass() : void
    {
        global $wpdb;

        $tables = [
            "wpg_concerts",
            "wpg_venues",
        ];

        foreach( $tables as $table ) {
            $wpdb->query("DELETE FROM {$table}");
        }
    }

    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();

        $current_screen = $oldscreen;

        $doc = DOMDocument::loadHTML($html);
        $forms = $doc->getElementsByTagName('form');

        $assignit_count = 0;
        $adminactions_count = 0;

        foreach ($forms as $form) {
            $cls = $form->attributes->getNamedItem('class')->nodeValue;
            if ($cls == 'assign_concert' || $cls == 'unassign_concert') {
                $assignit_count++;
            }

            if ($cls == 'adminactions') {
                $adminactions_count++;
            }
        }

        $this->assertEquals(64, $assignit_count);       // four for each gig
        $this->assertEquals(16, $adminactions_count);   // once for each gig
    }
}