getMockBuilder(ContentReviewCMSExtension::class) ->onlyMethods(['getReviewContentForm']) ->getMock(); $mock->expects($this->once())->method('getReviewContentForm')->with(123)->willReturn(true); $request = new HTTPRequest('GET', '/', [], ['ID' => 123]); $result = $mock->ReviewContentForm($request); $this->assertTrue($result); } public function testGetReviewContentFormThrowsExceptionWhenPageNotFound() { $this->expectException(HTTPResponse_Exception::class); $this->expectExceptionMessage('Bad record ID #1234'); (new ContentReviewCMSExtension)->getReviewContentForm(1234); } public function testGetReviewContentFormThrowsExceptionWhenObjectCannotBeReviewed() { $this->expectException(HTTPResponse_Exception::class); $this->expectExceptionMessage('It seems you don\'t have the necessary permissions to review this content'); $this->logOut(); $mock = $this->getMockBuilder(ContentReviewCMSExtension::class) ->onlyMethods(['findRecord']) ->getMock(); $mock->setOwner(new Controller); // Return a DataObject without the content review extension applied $mock->expects($this->once())->method('findRecord')->with(['ID' => 123])->willReturn(new SiteTree); $mock->getReviewContentForm(123); } /** * Ensure that savereview() calls the ReviewContentHandler and passes the data to it */ public function testSaveReviewCallsHandler() { $mock = $this->getMockBuilder(ContentReviewCMSExtension::class) ->onlyMethods(['findRecord', 'getReviewContentHandler']) ->getMock(); $mock->setOwner(new Controller); $mockPage = (object) ['ID' => 123]; $mock->expects($this->once())->method('findRecord')->willReturn($mockPage); $mockHandler = $this->getMockBuilder(ReviewContentHandler::class) ->onlyMethods(['submitReview']) ->getMock(); $mockHandler->expects($this->once()) ->method('submitReview') ->with($mockPage, ['foo']) ->willReturn('Success'); $mock->expects($this->once())->method('getReviewContentHandler')->willReturn($mockHandler); $form = $this->getMockBuilder(Form::class) ->disableOriginalConstructor() ->getMock(); $result = $mock->savereview(['foo'], $form); $this->assertSame('Success', $result); } }