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