xref: /dokuwiki/_test/tests/test/edit_and_save.test.php (revision 9f236ef28b069f14b4bd71cac7b91de7296dcf18)
1572dc222SLarsDW223<?php
2572dc222SLarsDW223
3572dc222SLarsDW223/**
4572dc222SLarsDW223 * @group integration
5572dc222SLarsDW223 */
6572dc222SLarsDW223class EditAndSaveTest extends DokuWikiTest {
7572dc222SLarsDW223
8572dc222SLarsDW223    /**
9572dc222SLarsDW223     * Execute the following requests:
10572dc222SLarsDW223     * - Section edit a page (headline 2, first occurrence)
11572dc222SLarsDW223     * - Save a page
12572dc222SLarsDW223     * - Redirect
13572dc222SLarsDW223     * Check if the header id is transmitted and if the final redirect
14572dc222SLarsDW223     * points to the correct header.
15572dc222SLarsDW223     */
16572dc222SLarsDW223    function testEditSaveRedirect_Headline2_A() {
17572dc222SLarsDW223        $request = new TestRequest();
18572dc222SLarsDW223
19572dc222SLarsDW223        $input = array(
20*9f236ef2SAndreas Gohr            'id'     => 'int:editandsavetest'
21572dc222SLarsDW223        );
22572dc222SLarsDW223
23572dc222SLarsDW223        // Show page
24572dc222SLarsDW223        $response = $request->post($input);
25572dc222SLarsDW223        $content = $response->getContent();
26572dc222SLarsDW223        $this->assertTrue(!empty($content));
27572dc222SLarsDW223
28572dc222SLarsDW223        // If the test page has got the right content for our test it should have
29572dc222SLarsDW223        // two headlines with the title "Headline2"
30572dc222SLarsDW223        preg_match_all('#<h1[^>]*>Headline2</h1[^>]*>#', $content, $matches, PREG_SET_ORDER);
31572dc222SLarsDW223        $this->assertEquals(2, count($matches));
32572dc222SLarsDW223
33572dc222SLarsDW223        // Get the header ids
34572dc222SLarsDW223        $result = preg_match('/id="(.*)"/', $matches [0][0], $idA);
35572dc222SLarsDW223        $this->assertEquals(1, $result);
36572dc222SLarsDW223        $result = preg_match('/id="(.*)"/', $matches [1][0], $idB);
37572dc222SLarsDW223        $this->assertEquals(1, $result);
38572dc222SLarsDW223        $this->assertTrue($idA != $idB);
39572dc222SLarsDW223
40572dc222SLarsDW223        // Search the section edit form/button for the second id
41572dc222SLarsDW223        $pattern  = '/<form class="button btn_secedit".*>.*';
42572dc222SLarsDW223        $pattern .= '<input type="hidden" name="hid" value="';
43572dc222SLarsDW223        $pattern .= $idA[1];
44572dc222SLarsDW223        $pattern .= '" \/>.*<\/form>/';
45572dc222SLarsDW223        $result = preg_match($pattern, $content, $formA);
46572dc222SLarsDW223        $this->assertEquals(1, $result);
47572dc222SLarsDW223
48572dc222SLarsDW223        // Extract all inputs from the form
49572dc222SLarsDW223        $result = preg_match_all('/<input type="hidden" name="([^"]*)" value="([^"]*)" \/>/', $formA[0], $matches, PREG_SET_ORDER);
50572dc222SLarsDW223        $input = array();
51572dc222SLarsDW223        foreach ($matches as $match) {
52572dc222SLarsDW223            $input[$match[1]] = $match[2];
53572dc222SLarsDW223        }
54572dc222SLarsDW223        $this->assertEquals($input['hid'], $idA[1]);
55572dc222SLarsDW223
56572dc222SLarsDW223        // Post the input fields (= do a section edit)
57572dc222SLarsDW223        $response = $request->post($input, '/doku.php');
58572dc222SLarsDW223        $content = $response->getContent();
59572dc222SLarsDW223
60572dc222SLarsDW223        // Our header id should have been sent back to us in the edit
61572dc222SLarsDW223        // form as an hidden input field
62572dc222SLarsDW223        $content = str_replace("\n", " ", $content);
63572dc222SLarsDW223        $pattern  = '/<form id="dw__editform"[^>]*>.*';
64572dc222SLarsDW223        $pattern .= '<input type="hidden" name="hid" value="';
65572dc222SLarsDW223        $pattern .= $idA[1];
66572dc222SLarsDW223        $pattern .= '" \/>.*<\/form>/';
67572dc222SLarsDW223        $result = preg_match($pattern, $content, $editForm);
68572dc222SLarsDW223        $this->assertEquals(1, $result);
69572dc222SLarsDW223
70572dc222SLarsDW223        // Extract all inputs from the edit form
71572dc222SLarsDW223        $result = preg_match_all('/<input type="hidden" name="([^"]*)" value="([^"]*)" \/>/', $editForm[0], $matches, PREG_SET_ORDER);
72572dc222SLarsDW223        $input = array();
73572dc222SLarsDW223        foreach ($matches as $match) {
74572dc222SLarsDW223            $input[$match[1]] = $match[2];
75572dc222SLarsDW223        }
76572dc222SLarsDW223        $this->assertEquals($input['hid'], $idA[1]);
77572dc222SLarsDW223        $input['do'] = 'save';
78572dc222SLarsDW223
79572dc222SLarsDW223        // Post the input fields (= save page)
80572dc222SLarsDW223        $response = $request->post($input, '/doku.php');
81572dc222SLarsDW223
82572dc222SLarsDW223        // The response should carry a notification that a redirect
83572dc222SLarsDW223        // was executed to our header ID
84572dc222SLarsDW223        $found = null;
85572dc222SLarsDW223        $notifications = $response->getNotifications();
86572dc222SLarsDW223        foreach ($notifications as $notification) {
87572dc222SLarsDW223            if ($notification['name'] == 'send_redirect') {
88572dc222SLarsDW223                $found = &$notification;
89572dc222SLarsDW223            }
90572dc222SLarsDW223        }
91572dc222SLarsDW223        $this->assertTrue($found !== null);
92572dc222SLarsDW223        $hash = strpos($found['url'], '#');
93572dc222SLarsDW223        $headerID = substr($found['url'], $hash);
94572dc222SLarsDW223        $this->assertEquals($headerID, '#'.$idA[1]);
95572dc222SLarsDW223    }
96572dc222SLarsDW223
97572dc222SLarsDW223    /**
98572dc222SLarsDW223     * Execute the following requests:
99572dc222SLarsDW223     * - Section edit a page (headline 2, second occurrence)
100572dc222SLarsDW223     * - Save a page
101572dc222SLarsDW223     * - Redirect
102572dc222SLarsDW223     * Check if the header id is transmitted and if the final redirect
103572dc222SLarsDW223     * points to the correct header.
104572dc222SLarsDW223     */
105572dc222SLarsDW223    function testEditSaveRedirect_Headline2_B() {
106572dc222SLarsDW223        $request = new TestRequest();
107572dc222SLarsDW223
108572dc222SLarsDW223        $input = array(
109*9f236ef2SAndreas Gohr            'id'     => 'int:editandsavetest'
110572dc222SLarsDW223        );
111572dc222SLarsDW223
112572dc222SLarsDW223        // Show page
113572dc222SLarsDW223        $response = $request->post($input);
114572dc222SLarsDW223        $content = $response->getContent();
115572dc222SLarsDW223        $this->assertTrue(!empty($content));
116572dc222SLarsDW223
117572dc222SLarsDW223        // If the test page has got the right content for our test it should have
118572dc222SLarsDW223        // two headlines with the title "Headline2"
119572dc222SLarsDW223        preg_match_all('#<h1[^>]*>Headline2</h1[^>]*>#', $content, $matches, PREG_SET_ORDER);
120572dc222SLarsDW223        $this->assertEquals(2, count($matches));
121572dc222SLarsDW223
122572dc222SLarsDW223        // Get the header ids
123572dc222SLarsDW223        $result = preg_match('/id="(.*)"/', $matches [0][0], $idA);
124572dc222SLarsDW223        $this->assertEquals(1, $result);
125572dc222SLarsDW223        $result = preg_match('/id="(.*)"/', $matches [1][0], $idB);
126572dc222SLarsDW223        $this->assertEquals(1, $result);
127572dc222SLarsDW223        $this->assertTrue($idA != $idB);
128572dc222SLarsDW223
129572dc222SLarsDW223        // Search the section edit form/button for the second id
130572dc222SLarsDW223        $pattern  = '/<form class="button btn_secedit".*>.*';
131572dc222SLarsDW223        $pattern .= '<input type="hidden" name="hid" value="';
132572dc222SLarsDW223        $pattern .= $idB[1];
133572dc222SLarsDW223        $pattern .= '" \/>.*<\/form>/';
134572dc222SLarsDW223        $result = preg_match($pattern, $content, $formB);
135572dc222SLarsDW223        $this->assertEquals(1, $result);
136572dc222SLarsDW223
137572dc222SLarsDW223        // Extract all inputs from the form
138572dc222SLarsDW223        $result = preg_match_all('/<input type="hidden" name="([^"]*)" value="([^"]*)" \/>/', $formB[0], $matches, PREG_SET_ORDER);
139572dc222SLarsDW223        $input = array();
140572dc222SLarsDW223        foreach ($matches as $match) {
141572dc222SLarsDW223            $input[$match[1]] = $match[2];
142572dc222SLarsDW223        }
143572dc222SLarsDW223        $this->assertEquals($input['hid'], $idB[1]);
144572dc222SLarsDW223
145572dc222SLarsDW223        // Post the input fields (= do a section edit)
146572dc222SLarsDW223        $response = $request->post($input, '/doku.php');
147572dc222SLarsDW223        $content = $response->getContent();
148572dc222SLarsDW223
149572dc222SLarsDW223        // Our header id should have been sent back to us in the edit
150572dc222SLarsDW223        // form as an hidden input field
151572dc222SLarsDW223        $content = str_replace("\n", " ", $content);
152572dc222SLarsDW223        $pattern  = '/<form id="dw__editform"[^>]*>.*';
153572dc222SLarsDW223        $pattern .= '<input type="hidden" name="hid" value="';
154572dc222SLarsDW223        $pattern .= $idB[1];
155572dc222SLarsDW223        $pattern .= '" \/>.*<\/form>/';
156572dc222SLarsDW223        $result = preg_match($pattern, $content, $editForm);
157572dc222SLarsDW223        $this->assertEquals(1, $result);
158572dc222SLarsDW223
159572dc222SLarsDW223        // Extract all inputs from the edit form
160572dc222SLarsDW223        $result = preg_match_all('/<input type="hidden" name="([^"]*)" value="([^"]*)" \/>/', $editForm[0], $matches, PREG_SET_ORDER);
161572dc222SLarsDW223        $input = array();
162572dc222SLarsDW223        foreach ($matches as $match) {
163572dc222SLarsDW223            $input[$match[1]] = $match[2];
164572dc222SLarsDW223        }
165572dc222SLarsDW223        $this->assertEquals($input['hid'], $idB[1]);
166572dc222SLarsDW223        $input['do'] = 'save';
167572dc222SLarsDW223
168572dc222SLarsDW223        // Post the input fields (= save page)
169572dc222SLarsDW223        $response = $request->post($input, '/doku.php');
170572dc222SLarsDW223
171572dc222SLarsDW223        // The response should carry a notification that a redirect
172572dc222SLarsDW223        // was executed to our header ID
173572dc222SLarsDW223        $found = null;
174572dc222SLarsDW223        $notifications = $response->getNotifications();
175572dc222SLarsDW223        foreach ($notifications as $notification) {
176572dc222SLarsDW223            if ($notification['name'] == 'send_redirect') {
177572dc222SLarsDW223                $found = &$notification;
178572dc222SLarsDW223            }
179572dc222SLarsDW223        }
180572dc222SLarsDW223        $this->assertTrue($found !== null);
181572dc222SLarsDW223        $hash = strpos($found['url'], '#');
182572dc222SLarsDW223        $headerID = substr($found['url'], $hash);
183572dc222SLarsDW223        $this->assertEquals($headerID, '#'.$idB[1]);
184572dc222SLarsDW223    }
185572dc222SLarsDW223}
186