Esempio n. 1
2
 function generatePDF()
 {
     // tempfolder
     $tmpBaseFolder = TEMP_FOLDER . '/shopsystem';
     $tmpFolder = project() ? "{$tmpBaseFolder}/" . project() : "{$tmpBaseFolder}/site";
     if (is_dir($tmpFolder)) {
         Filesystem::removeFolder($tmpFolder);
     }
     if (!file_exists($tmpFolder)) {
         Filesystem::makeFolder($tmpFolder);
     }
     $baseFolderName = basename($tmpFolder);
     //Get site
     Requirements::clear();
     $link = Director::absoluteURL($this->pdfLink() . "/?view=1");
     $response = Director::test($link);
     $content = $response->getBody();
     $content = utf8_decode($content);
     $contentfile = "{$tmpFolder}/" . $this->PublicURL . ".html";
     if (!file_exists($contentfile)) {
         // Write to file
         if ($fh = fopen($contentfile, 'w')) {
             fwrite($fh, $content);
             fclose($fh);
         }
     }
     return $contentfile;
 }
 public function testRenderTemplatePlaceholder()
 {
     // Create page object
     $page = $this->objFromFixture('Page', 'page1');
     $templateTitle = 'template1';
     $templatePlaceHolder = '{{' . $templateTitle . '}}';
     // Assert: render page
     $this->assertContains($templatePlaceHolder, $page->Content());
     // Create template
     $template = $this->objFromFixture('ViewTemplate', $templateTitle);
     $templatePlaceHolder = '{{' . $template->Title . '}}';
     // Page disable template view
     $page->EnableViewTemplate = false;
     // Assert: render page without view template
     $this->assertContains($templatePlaceHolder, $page->Content());
     // Page enable template view
     $page->EnableViewTemplate = true;
     // Assert: render page with view template
     $this->assertNotContains($templatePlaceHolder, $page->Content());
     // Login admin
     $this->logInWithPermission('ADMIN');
     // Assert: Publish page
     $published = $page->doPublish();
     $this->assertTrue($published);
     // Assert: page visible to public with render view template
     Member::currentUser()->logOut();
     $response = Director::test(Director::makeRelative($page->Link()));
     $this->assertNotContains($templatePlaceHolder, $response->getBody());
     $this->assertContains($template->ViewTemplate, $response->getBody());
 }
 /**
  *
  */
 function testBasicView()
 {
     // Confirm that this URL gets you the entire page, with the edit form loaded
     $response = Director::test('great-show');
     $this->assertTrue(strpos($response->getBody(), '<head') !== false);
     $this->assertTrue(strpos($response->getBody(), 'First Episode') !== false);
 }
Esempio n. 4
0
 /**
  * When an error page is published, create a static HTML page with its
  * content, so the page can be shown even when SilverStripe is not
  * functioning correctly before publishing this page normally.
  * @param string|int $fromStage Place to copy from. Can be either a stage name or a version number.
  * @param string $toStage Place to copy to. Must be a stage name.
  * @param boolean $createNewVersion Set this to true to create a new version number.  By default, the existing version number will be copied over.
  */
 function doPublish()
 {
     parent::doPublish();
     // Run the page (reset the theme, it might've been disabled by LeftAndMain::init())
     $oldTheme = SSViewer::current_theme();
     SSViewer::set_theme(SSViewer::current_custom_theme());
     $response = Director::test(Director::makeRelative($this->Link()));
     SSViewer::set_theme($oldTheme);
     $errorContent = $response->getBody();
     // Make the base tag dynamic.
     // $errorContent = preg_replace('/<base[^>]+href="' . str_replace('/','\\/', Director::absoluteBaseURL()) . '"[^>]*>/i', '<base href="$BaseURL" />', $errorContent);
     // Check we have an assets base directory, creating if it we don't
     if (!file_exists(ASSETS_PATH)) {
         mkdir(ASSETS_PATH, 02775);
     }
     // if the page is published in a language other than default language,
     // write a specific language version of the HTML page
     $filePath = self::get_filepath_for_errorcode($this->ErrorCode, $this->Locale);
     if ($fh = fopen($filePath, "w")) {
         fwrite($fh, $errorContent);
         fclose($fh);
     } else {
         $fileErrorText = sprintf(_t("ErrorPage.ERRORFILEPROBLEM", "Error opening file \"%s\" for writing. Please check file permissions."), $errorFile);
         FormResponse::status_message($fileErrorText, 'bad');
         FormResponse::respond();
         return;
     }
 }
 /**
  * Perform an api request with the given options
  *
  * @param string $path the request path; can consist of resource name, identifier and GET params
  * @param array $options
  *  * string `body` the data
  *  * int `code` the expected response code
  *  * string `method` the http method
  *  * ApiSession `session` the test session
  * @return array
  * @throws SS_HTTPResponse_Exception
  */
 public function makeApiRequest($path, $options = [])
 {
     $settings = array_merge(['session' => null, 'token' => null, 'method' => 'GET', 'body' => null, 'code' => 200], $options);
     $response = Director::test(Controller::join_links($this->namespace, $path), null, $settings['session'], $settings['method'], $settings['body'], ['Authorization' => $settings['token'], 'Accept' => 'application/json']);
     $this->assertEquals($settings['code'], $response->getStatusCode(), "Wrong status code: {$response->getBody()}");
     return json_decode($response->getBody(), true);
 }
Esempio n. 6
0
 /**
  * @todo Test the results of a publication better
  */
 function testPublish()
 {
     $page1 = $this->objFromFixture('Page', "page1");
     $page2 = $this->objFromFixture('Page', "page2");
     $this->session()->inst_set('loggedInAs', $this->idFromFixture('Member', 'admin'));
     $response = $this->get("admin/cms/publishall?confirm=1");
     $this->assertContains(sprintf(_t('CMSMain.PUBPAGES', "Done: Published %d pages"), 30), $response->getBody());
     // Some modules (e.g., cmsworkflow) will remove this action
     if (isset(CMSBatchActionHandler::$batch_actions['publish'])) {
         $response = Director::test("admin/cms/batchactions/publish", array('csvIDs' => implode(',', array($page1->ID, $page2->ID)), 'ajax' => 1), $this->session());
         $responseData = Convert::json2array($response->getBody());
         $this->assertTrue(property_exists($responseData['modified'], $page1->ID));
         $this->assertTrue(property_exists($responseData['modified'], $page2->ID));
     }
     // Get the latest version of the redirector page
     $pageID = $this->idFromFixture('RedirectorPage', 'page5');
     $latestID = DB::query('select max("Version") from "RedirectorPage_versions" where "RecordID"=' . $pageID)->value();
     $dsCount = DB::query('select count("Version") from "RedirectorPage_versions" where "RecordID"=' . $pageID . ' and "Version"=' . $latestID)->value();
     $this->assertEquals(1, $dsCount, "Published page has no duplicate version records: it has " . $dsCount . " for version " . $latestID);
     $this->session()->clear('loggedInAs');
     //$this->assertRegexp('/Done: Published 4 pages/', $response->getBody())
     /*
     $response = Director::test("admin/publishitems", array(
     	'ID' => ''
     	'Title' => ''
     	'action_publish' => 'Save and publish',
     ), $session);
     $this->assertRegexp('/Done: Published 4 pages/', $response->getBody())
     */
 }
 /**
  * Create an {@link ErrorPage} for status code 503
  * 
  * @see UnderConstruction_Extension::onBeforeInit()
  * @see DataObjectDecorator::requireDefaultRecords()
  * @return Void
  */
 function requireDefaultRecords()
 {
     // Ensure that an assets path exists before we do any error page creation
     if (!file_exists(ASSETS_PATH)) {
         mkdir(ASSETS_PATH);
     }
     $pageUnderConstructionErrorPage = DataObject::get_one('ErrorPage', "\"ErrorCode\" = '503'");
     $pageUnderConstructionErrorPageExists = $pageUnderConstructionErrorPage && $pageUnderConstructionErrorPage->exists() ? true : false;
     $pageUnderConstructionErrorPagePath = ErrorPage::get_filepath_for_errorcode(503);
     if (!($pageUnderConstructionErrorPageExists && file_exists($pageUnderConstructionErrorPagePath))) {
         if (!$pageUnderConstructionErrorPageExists) {
             $pageUnderConstructionErrorPage = new ErrorPage();
             $pageUnderConstructionErrorPage->ErrorCode = 503;
             $pageUnderConstructionErrorPage->Title = _t('UnderConstruction.TITLE', 'Under Construction');
             $pageUnderConstructionErrorPage->Content = _t('UnderConstruction.CONTENT', '<p>Sorry, this site is currently under construction.</p>');
             $pageUnderConstructionErrorPage->Status = 'New page';
             $pageUnderConstructionErrorPage->write();
             $pageUnderConstructionErrorPage->publish('Stage', 'Live');
         }
         // Ensure a static error page is created from latest error page content
         $response = Director::test(Director::makeRelative($pageUnderConstructionErrorPage->Link()));
         if ($fh = fopen($pageUnderConstructionErrorPagePath, 'w')) {
             $written = fwrite($fh, $response->getBody());
             fclose($fh);
         }
         if ($written) {
             DB::alteration_message('503 error page created', 'created');
         } else {
             DB::alteration_message(sprintf('503 error page could not be created at %s. Please check permissions', $pageUnderConstructionErrorPagePath), 'error');
         }
     }
 }
Esempio n. 8
0
	/**
	 * Submit a post request
	 * @uses Director::test()
	 */
	function post($url, $data, $headers = null, $session = null, $body = null, $cookies = null) {
		$headers = (array) $headers;
		if($this->lastUrl) $headers['Referer'] = $this->lastUrl;
		$this->lastResponse = Director::test($url, $data, $session ? $session : $this->session, null, $body, $headers, $cookies);
		$this->lastUrl = $url;
		if(!$this->lastResponse) user_error("Director::test($url) returned null", E_USER_WARNING);
		return $this->lastResponse;
	}
Esempio n. 9
0
 /**
  * Submit a post request
  * @uses Director::test()
  */
 function post($url, $data, $headers = null)
 {
     $headers = $this->lastUrl ? array('Referer' => $this->lastUrl) : null;
     $this->lastResponse = Director::test($url, $data, $this->session, null, null, $headers);
     $this->lastUrl = $url;
     if (!$this->lastResponse) {
         user_error("Director::test({$url}) returned null", E_USER_WARNING);
     }
     return $this->lastResponse;
 }
Esempio n. 10
0
	function testAllowedActions() {
		$response = Director::test("ControllerTest_SecuredController/methodaction");
		$this->assertEquals(200, $response->getStatusCode());
		
		$response = Director::test("ControllerTest_SecuredController/stringaction");
		$this->assertEquals(403, $response->getStatusCode());

		$response = Director::test("ControllerTest_SecuredController/adminonly");
		$this->assertEquals(403, $response->getStatusCode());
	}
 /**
  * Perform an api request with the given options
  *
  * @param string $path the request path; can consist of resource name, identifier and GET params
  * @param array $options
  *  * string `body` the data
  *  * int `code` the expected response code
  *  * string `method` the http method
  *  * ApiSession `session` the test session
  *  * string `token` the auth token
  *  * array `postVars` the post data, eg. multi form or files
  * @return array
  * @throws \SS_HTTPResponse_Exception
  */
 protected function makeApiRequest($path, $options = [])
 {
     $settings = array_merge(['session' => null, 'token' => null, 'method' => 'GET', 'body' => null, 'postVars' => null, 'code' => 200], $options);
     $headers = ['Accept' => 'application/json'];
     if ($settings['token']) {
         $headers['Authorization'] = "Bearer {$settings['token']}";
     }
     $response = \Director::test(\Controller::join_links($this->namespace, $path), $settings['postVars'], $settings['session'], $settings['method'], $settings['body'], $headers);
     $this->assertEquals($settings['code'], $response->getStatusCode(), "Wrong status code: {$response->getBody()}");
     return json_decode($response->getBody(), true);
 }
 function testLinksent()
 {
     $url1 = 'unsubscribe/linksent?SendEmail=normann1@silverstripe.com';
     $url2 = 'unsubscribe/linksent?SendError=normann1@silverstripe.com';
     $body1 = Director::test($url1)->getBody();
     $body2 = Director::test($url2)->getBody();
     $message1 = sprintf(_t('Unsubscribe.LINKSENTTO', "The unsubscribe link has been sent to %s"), '*****@*****.**');
     $message2 = sprintf(_t('Unsubscribe.LINKSENDERR', "Sorry, currently we have internal error, and can't send the unsubscribe link to %s"), '*****@*****.**');
     $this->AssertContains($message1, $body1);
     $this->AssertContains($message2, $body2);
 }
Esempio n. 13
0
 function testDeleteComment()
 {
     $firstPage = $this->objFromFixture('Page', 'first');
     $this->autoFollowRedirection = false;
     $this->logInAs('commentadmin');
     $firstComment = $this->objFromFixture('Comment', 'firstComA');
     $firstCommentID = $firstComment->ID;
     Director::test($firstPage->RelativeLink(), null, $this->session());
     $delete = $this->get('CommentingController/delete/' . $firstComment->ID);
     $this->assertFalse(DataObject::get_by_id('Comment', $firstCommentID));
 }
 /**
  * Test generation of the view
  */
 function testBasicView()
 {
     Subsite::$write_hostmap = false;
     $subsite1ID = $this->objFromFixture('Subsite', 'domaintest1')->ID;
     // Open the admin area logged in as admin
     $response1 = Director::test('admin/subsites/', null, $this->adminLoggedInSession());
     // Confirm that this URL gets you the entire page, with the edit form loaded
     $response2 = Director::test("admin/subsites/Subsite/{$subsite1ID}/edit", null, $this->adminLoggedInSession());
     $this->assertTrue(strpos($response2->getBody(), 'id="Form_EditForm_ID"') !== false, "Testing Form_EditForm_ID exists");
     $this->assertTrue(strpos($response2->getBody(), '<head') !== false, "Testing <head> exists");
 }
Esempio n. 15
0
 /**
  * Get that visiting the field's URL returns the content of the field.
  * This capability is used by ajax
  */
 function testAjaxRefreshing()
 {
     $controller = new TableListFieldTest_TestController();
     $table = $controller->TestForm()->Fields()->First();
     $ajaxResponse = Director::test($table->Link())->getBody();
     // Check that the column headings have been rendered
     $this->assertRegExp('/<th[^>]*>\\s*Col A\\s*<\\/th>/', $ajaxResponse);
     $this->assertRegExp('/<th[^>]*>\\s*Col B\\s*<\\/th>/', $ajaxResponse);
     $this->assertRegExp('/<th[^>]*>\\s*Col C\\s*<\\/th>/', $ajaxResponse);
     $this->assertRegExp('/<th[^>]*>\\s*Col D\\s*<\\/th>/', $ajaxResponse);
     $this->assertRegExp('/<th[^>]*>\\s*Col E\\s*<\\/th>/', $ajaxResponse);
 }
Esempio n. 16
0
 function testAllowedActions()
 {
     $response = Director::test("ControllerTest_SecuredController/methodaction");
     $this->assertEquals(200, $response->getStatusCode());
     $response = Director::test("ControllerTest_SecuredController/stringaction");
     $this->assertEquals(403, $response->getStatusCode());
     $response = Director::test("ControllerTest_SecuredController/adminonly");
     $this->assertEquals(403, $response->getStatusCode());
     // test that a controller without a specified allowed_actions allows actions through
     $response = Director::test('ControllerTest_UnsecuredController/stringaction');
     $this->assertEquals(200, $response->getStatusCode());
 }
 public function testOnsitePayment()
 {
     $stubGateway = $this->buildPaymentGatewayStub(true, 'test-' . $this->order->ID, false);
     Injector::inst()->registerService($this->stubGatewayFactory($stubGateway), 'Omnipay\\Common\\GatewayFactory');
     $ctrl = ModelAsController::controller_for($this->checkoutPage);
     $response = Director::test($ctrl->Link('ActionsForm'), array('action_dopayment' => true, 'OrderID' => $this->order->ID, 'PaymentMethod' => 'Dummy', 'type' => 'visa', 'name' => 'Tester Mc. Testerson', 'number' => '4242424242424242', 'expiryMonth' => 10, 'expiryYear' => date('Y') + 1, 'cvv' => 123), $this->session());
     // There should be a new payment
     $this->assertEquals(1, $this->order->Payments()->count());
     // The status of the payment should be Captured
     $this->assertEquals('Captured', $this->order->Payments()->first()->Status);
     // The response we get from submitting the form should be a redirect to the paid order
     $this->assertEquals($ctrl->Link('order/' . $this->order->ID), $response->getHeader('Location'));
 }
 /**
  * @inheritdoc
  *
  * @return array
  *
  * @throws SS_HTTPResponse_Exception
  */
 function check()
 {
     $response = Director::test($this->url);
     if ($response->getStatusCode() != 200) {
         return array(EnvironmentCheck::ERROR, sprintf('Error retrieving "%s" (Code: %d)', $this->url, $response->getStatusCode()));
     } else {
         if ($this->testString && strpos($response->getBody(), $this->testString) === false) {
             return array(EnvironmentCheck::WARNING, sprintf('Success retrieving "%s", but string "%s" not found', $this->url, $this->testString));
         } else {
             return array(EnvironmentCheck::OK, sprintf('Success retrieving "%s"', $this->url));
         }
     }
 }
 function export()
 {
     // specify custom baseurl for publishing to other webroot
     if (isset($_REQUEST['baseurl'])) {
         $base = $_REQUEST['baseurl'];
         if (substr($base, -1) != '/') {
             $base .= '/';
         }
         Director::setBaseURL($base);
     }
     // setup temporary folders
     $tmpBaseFolder = TEMP_FOLDER . '/static-export';
     $tmpFolder = project() ? "{$tmpBaseFolder}/" . project() : "{$tmpBaseFolder}/site";
     if (!file_exists($tmpFolder)) {
         Filesystem::makeFolder($tmpFolder);
     }
     $baseFolderName = basename($tmpFolder);
     // symlink /assets
     $f1 = ASSETS_PATH;
     $f2 = Director::baseFolder() . '/' . project();
     `cd {$tmpFolder}; ln -s {$f1}; ln -s {$f2}`;
     // iterate through all instances of SiteTree
     $pages = DataObject::get("SiteTree");
     foreach ($pages as $page) {
         $subfolder = "{$tmpFolder}/" . trim($page->RelativeLink(null, true), '/');
         $contentfile = "{$tmpFolder}/" . trim($page->RelativeLink(null, true), '/') . '/index.html';
         // Make the folder
         if (!file_exists($subfolder)) {
             Filesystem::makeFolder($subfolder);
         }
         // Run the page
         Requirements::clear();
         $link = Director::makeRelative($page->Link());
         $response = Director::test($link);
         // Write to file
         if ($fh = fopen($contentfile, 'w')) {
             fwrite($fh, $response->getBody());
             fclose($fh);
         }
     }
     // copy homepage (URLSegment: "home") to webroot
     copy("{$tmpFolder}/home/index.html", "{$tmpFolder}/index.html");
     // archive all generated files
     `cd {$tmpBaseFolder}; tar -czhf {$baseFolderName}.tar.gz {$baseFolderName}`;
     $archiveContent = file_get_contents("{$tmpBaseFolder}/{$baseFolderName}.tar.gz");
     // remove temporary files and folder
     Filesystem::removeFolder($tmpBaseFolder);
     // return as download to the client
     $response = SS_HTTPRequest::send_file($archiveContent, "{$baseFolderName}.tar.gz", 'application/x-tar-gz');
     echo $response->output();
 }
 /**
  * Test if the API gets a list of presentations
  */
 public function testItGetsAllPresentations()
 {
     $page = $this->objFromFixture('SummitVideoApp', 'App');
     $page->publish("Stage", "Live");
     $response = Director::test($page->Link('api/videos'));
     $this->assertEquals(200, $response->getStatusCode());
     $this->assertNotEmpty($response->getBody());
     $data = Convert::json2array($response->getBody());
     $this->assertNull($data['summit']);
     $this->assertNull($data['speaker']);
     $this->assertCount(12, $data['results']);
     $this->assertEquals($this->objFromFixture('PresentationVideo', 'Video1')->ID, $data['results'][0]['id']);
     $this->assertEquals($this->objFromFixture('PresentationVideo', 'HighlightVideo1')->ID, $data['results'][3]['id']);
 }
 /**
  * Some static helpers for api specific requests and data tramsforming
  */
 static function request($method, $url, $data = null, $accessToken = null)
 {
     $body = null;
     if (is_array($data)) {
         $body = json_encode($data);
         if (!$body) {
             user_error('Could not encode json from $data');
         }
     }
     $headers = ["Content-Type" => "application/json"];
     if ($accessToken) {
         $headers['X-Accesstoken'] = $accessToken;
     }
     return Director::test($url, $postVars = null, $session = null, $httpMethod = $method, $body, $headers);
 }
 /**
  * Renders the contents of a silverstripe URL into a PDF
  *
  * @param String $url A relative URL that silverstripe can execute
  * @param String $outputTo
  */
 public function renderUrl($url, $outputTo = null, $outname = '')
 {
     if (strpos($url, '/') === 0) {
         // fix it
         $url = Director::makeRelative($url);
     }
     // convert the URL to content and 'test' the request, ensure the current session remains active
     $response = Director::test($url, null, new Session($_SESSION));
     if ($response->getStatusCode() == 200) {
         $content = $response->getBody();
         return $this->render($content, $outputTo, $outname);
     } else {
         throw new Exception("Failed rendering URL {$url}: " . $response->getStatusCode() . " - " . $response->getStatusDescription());
     }
 }
 public function updateNewsletterEmail(NewsletterEmail $email)
 {
     $newsletter = $email->Newsletter();
     if ($newsletter->ContentSource != 'page' || !$newsletter->SourcePageID) {
         return;
     }
     $page = $newsletter->SourcePage();
     $response = Director::test($page->RelativeLink());
     $body = $this->emogrify($response->getBody());
     $body = str_replace('xmlns="http://www.w3.org/1999/xhtml"', '', HTTP::absoluteURLs($body));
     $re = '/\\.src\\s*=' . str_replace('/', '\\/', Director::absoluteBaseURL()) . '/';
     $body = preg_replace($re, '.src =', $body);
     // undo the fudging that happens to keywords
     $body = preg_replace('/"[^"]*%7B%24(\\w+)%7D/', '"{\\$$1}', $body);
     $email->setBody(DBField::create('HTMLText', $body));
 }
 public function testPaymentIncomplete()
 {
     $this->processor->capture($this->data);
     //Test redirect to the gateway
     $response = Controller::curr()->getResponse();
     $gatewayURL = $this->processor->gateway->gatewayURL;
     $queryString = http_build_query(array('Amount' => $this->data['Amount'], 'Currency' => $this->data['Currency'], 'ReturnURL' => $this->processor->gateway->returnURL));
     $this->assertEquals($response->getHeader('Location'), '/dummy/external/pay?' . $queryString);
     //Test payment completion after redirect from gateway
     $queryString = http_build_query(array('Status' => 'Incomplete', 'ErrorMessage' => 'Awaiting Payment Confirmation', 'ErrorCode' => '54321'));
     Director::test($this->processor->gateway->returnURL . "?{$queryString}");
     $payment = $payment = Payment::get()->byID($this->processor->payment->ID);
     $this->assertEquals($payment->Status, Payment::INCOMPLETE);
     $error = $payment->Errors()->first();
     $this->assertEquals($error->ErrorMessage, 'Awaiting Payment Confirmation');
     $this->assertEquals($error->ErrorCode, '54321');
 }
 public function testDisabledOption()
 {
     // Enable module to error pages only
     Config::inst()->remove('Templater', 'enabled_for_pagetypes');
     Config::inst()->update('Templater', 'enabled_for_pagetypes', ['ErrorPage']);
     $page = $this->createPage('blue');
     $fields = $page->getCMSFields();
     $this->assertEmpty($fields->dataFieldByName('Theme'));
     $this->assertEmpty($fields->dataFieldByName('PageTemplate'));
     // Assert page content
     $response = Director::test(Director::makeRelative($page->Link()));
     $this->assertContains('Theme Blue page content', $response->getBody());
     $this->assertNotContains('I\'m in the Blue Theme', $response->getBody());
     // Enable module to all pages
     Config::inst()->remove('Templater', 'enabled_for_pagetypes');
     Config::inst()->update('Templater', 'enabled_for_pagetypes', 'all');
 }
Esempio n. 26
0
 function testDeleteAllCommentsOnPage()
 {
     $second = $this->objFromFixture('Page', 'second');
     $this->autoFollowRedirection = false;
     $this->logInAs('commentadmin');
     Director::test('second-page', null, $this->session());
     Director::test('PageComment/deleteallcomments?pageid=' . $second->ID, null, $this->session());
     Director::test('second-page', null, $this->session());
     $secondComments = DataObject::get('PageComment', '"ParentID" = ' . $second->ID);
     $this->assertNull($secondComments);
     $first = $this->objFromFixture('Page', 'first');
     $firstComments = DataObject::get('PageComment', '"ParentID" = ' . $first->ID);
     $this->assertNotNull($firstComments);
     $third = $this->objFromFixture('Page', 'third');
     $thirdComments = DataObject::get('PageComment', '"ParentID" = ' . $third->ID);
     $this->assertEquals($thirdComments->Count(), 3);
 }
Esempio n. 27
0
 function testBasicAuthEnabledWithoutPermission()
 {
     $origUser = @$_SERVER['PHP_AUTH_USER'];
     $origPw = @$_SERVER['PHP_AUTH_PW'];
     $_SERVER['PHP_AUTH_USER'] = '******';
     $_SERVER['PHP_AUTH_PW'] = 'wrongpassword';
     $response = Director::test('BasicAuthTest_ControllerSecuredWithoutPermission');
     $this->assertEquals(401, $response->getStatusCode(), 'Invalid users dont have access');
     $_SERVER['PHP_AUTH_USER'] = '******';
     $_SERVER['PHP_AUTH_PW'] = 'test';
     $response = Director::test('BasicAuthTest_ControllerSecuredWithoutPermission');
     $this->assertEquals(200, $response->getStatusCode(), 'All valid users have access');
     $_SERVER['PHP_AUTH_USER'] = '******';
     $_SERVER['PHP_AUTH_PW'] = 'test';
     $response = Director::test('BasicAuthTest_ControllerSecuredWithoutPermission');
     $this->assertEquals(200, $response->getStatusCode(), 'All valid users have access');
     $_SERVER['PHP_AUTH_USER'] = $origUser;
     $_SERVER['PHP_AUTH_PW'] = $origPw;
 }
Esempio n. 28
0
	function test404ErrorPage() {
		$errorPage = DataObject::get_one('ErrorPage', "ErrorCode = '404'");

		/* We have an ErrorPage object to use */
		$this->assertTrue($errorPage instanceof ErrorPage);
		
		/* Test the URL of the error page out to get a response */
		$response = Director::test(Director::makeRelative($errorPage->Link()));
		
		/* We have an HTTPResponse object for the error page */
		$this->assertTrue($response instanceof HTTPResponse);
		
		/* We have body text from the error page */
		$this->assertTrue($response->getBody() != null);

		/* Status code of the HTTPResponse for error page is "404" */
		$this->assertTrue($response->getStatusCode() == '404');
		
		/* Status message of the HTTPResponse for error page is "Not Found" */
		$this->assertTrue($response->getStatusDescription() == 'Not Found');
	}
Esempio n. 29
0
 /**
  * Test publication of one of every page type
  */
 function testPublishOneOfEachKindOfPage()
 {
     return;
     $classes = ClassInfo::subclassesFor("SiteTree");
     array_shift($classes);
     unset($classes['GhostPage']);
     //Ghost Pages aren't used anymore
     foreach ($classes as $class) {
         $page = new $class();
         if ($class instanceof TestOnly) {
             continue;
         }
         $page->Title = "Test {$class} page";
         $page->write();
         $this->assertEquals("Test {$class} page", DB::query("SELECT Title FROM SiteTree WHERE ID = {$page->ID}")->value());
         $page->doPublish();
         $this->assertEquals("Test {$class} page", DB::query("SELECT Title FROM SiteTree_Live WHERE ID = {$page->ID}")->value());
         // Check that you can visit the page
         Director::test($page->Link());
     }
 }
Esempio n. 30
0
 /**
  * When an error page is published, create a static HTML page with its
  * content, so the page can be shown even when SilverStripe is not
  * functioning correctly before publishing this page normally.
  * @param string|int $fromStage Place to copy from. Can be either a stage name or a version number.
  * @param string $toStage Place to copy to. Must be a stage name.
  * @param boolean $createNewVersion Set this to true to create a new version number.  By default, the existing version number will be copied over.
  */
 function doPublish()
 {
     parent::doPublish();
     // Run the page
     $response = Director::test(Director::makeRelative($this->Link()));
     $errorContent = $response->getBody();
     // Check we have an assets base directory, creating if it we don't
     if (!file_exists(ASSETS_PATH)) {
         mkdir(ASSETS_PATH, 02775);
     }
     // if the page is published in a language other than default language,
     // write a specific language version of the HTML page
     $filePath = self::get_filepath_for_errorcode($this->ErrorCode, $this->Locale);
     if ($fh = fopen($filePath, "w")) {
         fwrite($fh, $errorContent);
         fclose($fh);
     } else {
         $fileErrorText = sprintf(_t("ErrorPage.ERRORFILEPROBLEM", "Error opening file \"%s\" for writing. Please check file permissions."), $errorFile);
         FormResponse::status_message($fileErrorText, 'bad');
         FormResponse::respond();
         return;
     }
 }