xref: /dokuwiki/_test/tests/test/edit_and_save.test.php (revision 27c0c399d7aed392e6da16e65d1057ab52256386)
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(
209f236ef2SAndreas 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
84*27c0c399SAndreas Gohr        $found = $response->getData('send_redirect');
85*27c0c399SAndreas Gohr        $this->assertCount(1, $found);
86*27c0c399SAndreas Gohr        $hash = strpos($found[0], '#');
87*27c0c399SAndreas Gohr        $headerID = substr($found[0], $hash);
88572dc222SLarsDW223        $this->assertEquals($headerID, '#'.$idA[1]);
89572dc222SLarsDW223    }
90572dc222SLarsDW223
91572dc222SLarsDW223    /**
92572dc222SLarsDW223     * Execute the following requests:
93572dc222SLarsDW223     * - Section edit a page (headline 2, second occurrence)
94572dc222SLarsDW223     * - Save a page
95572dc222SLarsDW223     * - Redirect
96572dc222SLarsDW223     * Check if the header id is transmitted and if the final redirect
97572dc222SLarsDW223     * points to the correct header.
98572dc222SLarsDW223     */
99572dc222SLarsDW223    function testEditSaveRedirect_Headline2_B() {
100572dc222SLarsDW223        $request = new TestRequest();
101572dc222SLarsDW223
102572dc222SLarsDW223        $input = array(
1039f236ef2SAndreas Gohr            'id'     => 'int:editandsavetest'
104572dc222SLarsDW223        );
105572dc222SLarsDW223
106572dc222SLarsDW223        // Show page
107572dc222SLarsDW223        $response = $request->post($input);
108572dc222SLarsDW223        $content = $response->getContent();
109572dc222SLarsDW223        $this->assertTrue(!empty($content));
110572dc222SLarsDW223
111572dc222SLarsDW223        // If the test page has got the right content for our test it should have
112572dc222SLarsDW223        // two headlines with the title "Headline2"
113572dc222SLarsDW223        preg_match_all('#<h1[^>]*>Headline2</h1[^>]*>#', $content, $matches, PREG_SET_ORDER);
114572dc222SLarsDW223        $this->assertEquals(2, count($matches));
115572dc222SLarsDW223
116572dc222SLarsDW223        // Get the header ids
117572dc222SLarsDW223        $result = preg_match('/id="(.*)"/', $matches [0][0], $idA);
118572dc222SLarsDW223        $this->assertEquals(1, $result);
119572dc222SLarsDW223        $result = preg_match('/id="(.*)"/', $matches [1][0], $idB);
120572dc222SLarsDW223        $this->assertEquals(1, $result);
121572dc222SLarsDW223        $this->assertTrue($idA != $idB);
122572dc222SLarsDW223
123572dc222SLarsDW223        // Search the section edit form/button for the second id
124572dc222SLarsDW223        $pattern  = '/<form class="button btn_secedit".*>.*';
125572dc222SLarsDW223        $pattern .= '<input type="hidden" name="hid" value="';
126572dc222SLarsDW223        $pattern .= $idB[1];
127572dc222SLarsDW223        $pattern .= '" \/>.*<\/form>/';
128572dc222SLarsDW223        $result = preg_match($pattern, $content, $formB);
129572dc222SLarsDW223        $this->assertEquals(1, $result);
130572dc222SLarsDW223
131572dc222SLarsDW223        // Extract all inputs from the form
132572dc222SLarsDW223        $result = preg_match_all('/<input type="hidden" name="([^"]*)" value="([^"]*)" \/>/', $formB[0], $matches, PREG_SET_ORDER);
133572dc222SLarsDW223        $input = array();
134572dc222SLarsDW223        foreach ($matches as $match) {
135572dc222SLarsDW223            $input[$match[1]] = $match[2];
136572dc222SLarsDW223        }
137572dc222SLarsDW223        $this->assertEquals($input['hid'], $idB[1]);
138572dc222SLarsDW223
139572dc222SLarsDW223        // Post the input fields (= do a section edit)
140572dc222SLarsDW223        $response = $request->post($input, '/doku.php');
141572dc222SLarsDW223        $content = $response->getContent();
142572dc222SLarsDW223
143572dc222SLarsDW223        // Our header id should have been sent back to us in the edit
144572dc222SLarsDW223        // form as an hidden input field
145572dc222SLarsDW223        $content = str_replace("\n", " ", $content);
146572dc222SLarsDW223        $pattern  = '/<form id="dw__editform"[^>]*>.*';
147572dc222SLarsDW223        $pattern .= '<input type="hidden" name="hid" value="';
148572dc222SLarsDW223        $pattern .= $idB[1];
149572dc222SLarsDW223        $pattern .= '" \/>.*<\/form>/';
150572dc222SLarsDW223        $result = preg_match($pattern, $content, $editForm);
151572dc222SLarsDW223        $this->assertEquals(1, $result);
152572dc222SLarsDW223
153572dc222SLarsDW223        // Extract all inputs from the edit form
154572dc222SLarsDW223        $result = preg_match_all('/<input type="hidden" name="([^"]*)" value="([^"]*)" \/>/', $editForm[0], $matches, PREG_SET_ORDER);
155572dc222SLarsDW223        $input = array();
156572dc222SLarsDW223        foreach ($matches as $match) {
157572dc222SLarsDW223            $input[$match[1]] = $match[2];
158572dc222SLarsDW223        }
159572dc222SLarsDW223        $this->assertEquals($input['hid'], $idB[1]);
160572dc222SLarsDW223        $input['do'] = 'save';
161572dc222SLarsDW223
162572dc222SLarsDW223        // Post the input fields (= save page)
163572dc222SLarsDW223        $response = $request->post($input, '/doku.php');
164572dc222SLarsDW223
165572dc222SLarsDW223        // The response should carry a notification that a redirect
166572dc222SLarsDW223        // was executed to our header ID
167*27c0c399SAndreas Gohr        $found = $response->getData('send_redirect');
168*27c0c399SAndreas Gohr        $this->assertCount(1, $found);
169*27c0c399SAndreas Gohr        $hash = strpos($found[0], '#');
170*27c0c399SAndreas Gohr        $headerID = substr($found[0], $hash);
171572dc222SLarsDW223        $this->assertEquals($headerID, '#'.$idB[1]);
172572dc222SLarsDW223    }
173572dc222SLarsDW223}
174