testExceptionThrownWhenSubmittingReviewForInvalidObject()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace SilverStripe\ContentReview\Tests\Forms;
4
5
use Page;
6
use SilverStripe\CMS\Model\SiteTree;
7
use SilverStripe\Control\Controller;
8
use SilverStripe\Control\HTTPRequest;
9
use SilverStripe\Control\HTTPResponse;
10
use SilverStripe\ContentReview\Forms\ReviewContentHandler;
11
use SilverStripe\Core\Injector\Injector;
12
use SilverStripe\Dev\SapphireTest;
13
use SilverStripe\Forms\Form;
14
use SilverStripe\Forms\HiddenField;
15
use SilverStripe\Forms\TextareaField;
16
use SilverStripe\Security\Member;
17
18
class ReviewContentHandlerTest extends SapphireTest
19
{
20
    public function testForm()
21
    {
22
        $page = Page::create();
23
        $page->Title = 'Test';
24
        $page->write();
25
26
        $form = ReviewContentHandler::create()->Form($page);
27
28
        $this->assertInstanceOf(Form::class, $form);
29
        $this->assertSame('ReviewContentForm', $form->getName());
30
31
        $this->assertInstanceOf(HiddenField::class, $form->Fields()->fieldByName('ID'));
32
        $this->assertInstanceOf(HiddenField::class, $form->Fields()->fieldByName('ClassName'));
33
        $this->assertInstanceOf(TextareaField::class, $form->Fields()->fieldByName('Review'));
34
35
        $saveAction = $form->Actions()->first();
36
        $this->assertNotNull($saveAction);
37
        $this->assertTrue($saveAction->hasClass('review-content__action'));
38
    }
39
40
    /**
41
     * @expectedException SilverStripe\ORM\ValidationException
42
     * @expectedExceptionMessage It seems you don't have the necessary permissions to submit a content review
43
     */
44
    public function testExceptionThrownWhenSubmittingReviewForInvalidObject()
45
    {
46
        ReviewContentHandler::create()->submitReview(new Member, ['foo' => 'bar']);
47
    }
48
49
    public function testAddReviewNoteCalledWhenSubmittingReview()
50
    {
51
        $this->logInWithPermission('ADMIN');
52
53
        $controller = new Controller;
54
        $request = new HTTPRequest('GET', '/');
55
        $controller->setRequest($request);
56
        Injector::inst()->registerservice($request);
57
58
        $mock = $this->getMockBuilder(ReviewContentHandler::class)
59
            ->setConstructorArgs([$controller])
60
            ->setMethods(['canSubmitReview'])
61
            ->getMock();
62
63
        $mock->expects($this->exactly(3))->method('canSubmitReview')->willReturn(true);
64
65
        // Via CMS
66
        $request->addHeader('X-Formschema-Request', true);
0 ignored issues
show
Documentation introduced by
true is of type boolean, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
67
        $result = $mock->submitReview(new SiteTree, ['Review' => 'testing']);
68
        $this->assertSame('Review successfully added', $result);
69
        $request->removeHeader('X-Formschema-Request');
70
71
        // Via AJAX
72
        $request->addHeader('X-Requested-With', 'XMLHttpRequest');
73
        $result = $mock->submitReview(new SiteTree, ['Review' => 'testing']);
74
        $this->assertInstanceOf(HTTPResponse::class, $result);
75
        $this->assertSame(200, $result->getStatusCode());
76
        $this->assertSame('Review successfully added', $result->getBody());
77
        $request->removeHeader('X-Requested-With');
78
79
        // Default
80
        $result = $mock->submitReview(new SiteTree, ['Review' => 'testing']);
81
        $this->assertInstanceOf(HTTPResponse::class, $result);
82
        $this->assertSame(302, $result->getStatusCode());
83
    }
84
}
85