helper = new AtomTestHelper(); } function setUp() { $this->setMaximumRedirects(0); if(!$this->removeAll()) return; for($i = 0; $i < 63; $i++) { $contents = << <![CDATA[Hello world!! No. $i]]> EOD; $this->post($this->helper->get_posts_url(), $contents); $this->assertResponse(201); $this->assertHeader('Location'); $location = $this->helper->get_header($this->getBrowser()->getHeaders(), 'Location'); $this->get($location); $this->assertResponse(200); $this->assertHeader('Content-Type',$this->helper->get_atom_content_type()); $this->assertEntry(); } } function tearDown() { $this->removeAll(); } function removeAll() { $prev_feed = null; while(true) { $this->get($this->helper->get_posts_url()); $this->assertResponse(array(401,200)); if($this->getBrowser()->getResponseCode() == 401) { $this->authenticate($this->helper->get_user(), $this->helper->get_password()); $this->assertResponse(200); } $this->assertHeader('Content-Type',$this->helper->get_atom_content_type()); $this->assertFeed(); $feed = $this->get_feed(); if(count($feed->entries) == 0) return true; if($prev_feed == $feed) { $this->fail('possible infinite loop, returning same exact feed twice after remove all'); return false; } $prev_feed = $feed; foreach($feed->entries as $entry) { foreach($entry->links as $link) { if(isset($link['rel']) && $link['rel'] == 'edit') { if(isset($link['type']) && $link['type'] != $this->helper->get_atom_content_type()) { $this->fail('collection link must be of type ' . $this->helper->get_atom_content_type()); return false; } $edit_link = $link['href']; // make sure we actually have a link $this->assertNotEqual(strlen($edit_link), 0); $this->delete($edit_link); $this->assertResponse(200); } } } } return false; } function testPaging() { $next = $this->helper->get_posts_url(); $index = 1; $seen = array($next => $index++); $first = false; $last = false; // forward do { $this->get($next); $next = false; $this->assertResponse(array(401,200)); if($this->getBrowser()->getResponseCode() == 401) { $this->authenticate($this->helper->get_user(), $this->helper->get_password()); $this->assertResponse(200); } $this->assertHeader('Content-Type',$this->helper->get_atom_content_type()); $this->assertFeed(); $feed = $this->get_feed(); foreach($feed->links as $link) { if(isset($link['rel']) && $link['rel'] == 'next') { if(isset($link['type']) && $link['type'] != $this->helper->get_atom_content_type()) { $this->fail('collection link must be of type ' . $this->helper->get_atom_content_type()); return; } $next = $link['href']; // make sure we actually have a link $this->assertNotEqual(strlen($next), 0); // test for possible infinite loop if(array_key_exists($next, $seen)) { $this->fail('possible infinite loop in next links'); return; } else { $seen[$next] = $index++; } } // get first first and last if(!$first) { if(isset($link['rel']) && $link['rel'] == 'first') { if(isset($link['type']) && $link['type'] != $this->helper->get_atom_content_type()) { $this->fail('collection link must be of type ' . $this->helper->get_atom_content_type()); return; } $first = $link['href']; // make sure we actually have a link $this->assertNotEqual(strlen($first), 0); } } if(!$last) { if(isset($link['rel']) && $link['rel'] == 'last') { if(isset($link['type']) && $link['type'] != $this->helper->get_atom_content_type()) { $this->fail('collection link must be of type ' . $this->helper->get_atom_content_type()); return; } $last = $link['href']; // make sure we actually have a link $this->assertNotEqual(strlen($last), 0); } } } } while($next); if(!$last) { $this->fail('collection missing last link'); return; } $previous = $last; $index = 1; $seen = array($previous => $index++); // backward do { $this->get($previous); $previous = false; $this->assertResponse(array(401,200)); if($this->getBrowser()->getResponseCode() == 401) { $this->authenticate($this->helper->get_user(), $this->helper->get_password()); $this->assertResponse(200); } $this->assertHeader('Content-Type',$this->helper->get_atom_content_type()); $this->assertFeed(); $feed = $this->get_feed(); foreach($feed->links as $link) { if(isset($link['rel']) && $link['rel'] == 'previous') { if(isset($link['type']) && $link['type'] != $this->helper->get_atom_content_type()) { $this->fail('collection link must be of type ' . $this->helper->get_atom_content_type()); return; } $previous = $link['href']; // make sure we actually have a link $this->assertNotEqual(strlen($previous), 0); // test for possible infinite loop if(array_key_exists($previous, $seen)) { $this->fail('possible infinite loop in previous links'); return; } else { $seen[$previous] = $index++; } } } } while($previous); } } ?>