testCanViewStage()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 41
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 27
nc 2
nop 0
dl 0
loc 41
rs 9.488
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\CMS\Tests\Controllers;
4
5
use SilverStripe\Versioned\Versioned;
6
use SilverStripe\Control\HTTPResponse_Exception;
7
use SilverStripe\Core\Config\Config;
8
use SilverStripe\Dev\FunctionalTest;
9
use SilverStripe\CMS\Model\SiteTree;
10
11
class ContentControllerPermissionsTest extends FunctionalTest
12
{
13
    protected $usesDatabase = true;
14
15
    protected $autoFollowRedirection = false;
16
17
    public function testCanViewStage()
18
    {
19
        // Create a new page
20
        $page = SiteTree::create();
21
        $page->URLSegment = 'testpage';
22
        $page->write();
23
        $page->copyVersionToStage(Versioned::DRAFT, Versioned::LIVE);
24
25
        // Add a stage-only version
26
        $page->Content = "Version2";
27
        $page->write();
28
29
        $response = $this->get('/testpage');
30
        $this->assertEquals($response->getStatusCode(), 200, "Doesn't require login for implicit live stage");
31
32
        $response = $this->get('/testpage/?stage=Live');
33
        $this->assertEquals($response->getStatusCode(), 200, "Doesn't require login for explicit live stage");
34
35
        try {
36
            $response = $this->get('/testpage/?stage=Stage');
37
        } catch (HTTPResponse_Exception $responseException) {
38
            $response = $responseException->getResponse();
39
        }
40
        // should redirect to login
41
        $this->assertEquals(
42
            $response->getStatusCode(),
43
            302,
44
            'Redirects to login page when not logged in for draft stage'
45
        );
46
        $this->assertStringContainsString(
47
            Config::inst()->get('SilverStripe\\Security\\Security', 'login_url'),
48
            $response->getHeader('Location')
49
        );
50
51
        $this->logInWithPermission('CMS_ACCESS_CMSMain');
52
53
        $response = $this->get('/testpage/?stage=Stage');
54
        $this->assertEquals(
55
            $response->getStatusCode(),
56
            200,
57
            'Doesnt redirect to login, but shows page for authenticated user'
58
        );
59
    }
60
}
61