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