<?php

class ContentReviewCMSPageEditControllerTest extends FunctionalTest {
	
	public static $fixture_file = 'contentreview/tests/ContentReviewTest.yml';
	
	public function testReviewedThrowsExceptionWithNoRecordID() {
		$this->setExpectedException('SS_HTTPResponse_Exception', 'No record ID', 404);
		$controller = new CMSPageEditController();
		$dummyForm = new CMSForm($controller, 'EditForm', new FieldList(), new FieldList());
		$controller->reviewed(array('ID'=>null, 'Message' => null), $dummyForm);
	}
	
	public function testReviewedThrowsExceptionWithWrongRecordID() {
		$this->setExpectedException('SS_HTTPResponse_Exception', 'Bad record ID #FAIL', 404);
		$controller = new CMSPageEditController();
		$dummyForm = new CMSForm($controller, 'EditForm', new FieldList(), new FieldList());
		$controller->reviewed(array('ID'=>'FAIL', 'Message' => null), $dummyForm);
	}
	
	public function testReviewedThrowsExceptionWithWrongAccess() {
		$visitor = $this->objFromFixture('Member', 'visitor');
		$this->loginAs($visitor);		
		$page = $this->objFromFixture('Page', 'home');
		$data = array(
			'action_reviewed' => 1
		);
		$response = $this->post('admin/pages/edit/EditForm', $data);
		$this->assertEquals(403, $response->getStatusCode());
	}
	
	public function testReviewedWithAuthor() {
		$author = $this->objFromFixture('Member', 'author');
		$this->loginAs($author);		
		$page = $this->objFromFixture('Page', 'home');
		
		$data = array(
			'action_reviewed' => 1,
			'ID' => $page->ID
		);
		
		$response = $this->post('admin/pages/edit/EditForm', $data);
		$this->assertEquals('OK', $response->getStatusDescription());
		$this->assertEquals(200, $response->getStatusCode());
	}
	
	public function testSaveReview() {
		$author = $this->objFromFixture('Member', 'author');
		$this->loginAs($author);		
		$page = $this->objFromFixture('Page', 'home');
		
		$data = array(
			'action_save_review' => 1,
			'ID' => $page->ID,
			'ReviewNotes' => 'This is the best page ever'
		);
		
		$response = $this->post('admin/pages/edit/EditForm', $data);
		
		$this->assertEquals('OK', $response->getStatusDescription());
		$this->assertEquals(200, $response->getStatusCode());
		
		$this->assertEquals(1, $page->ReviewLogs()->count());
		$reviewLog = $page->ReviewLogs()->first();
		
		$this->assertEquals($data['ReviewNotes'], $reviewLog->Note);
	}
	
}