message = array(); $this->mailDelivered = true; $this->mockProject = $this->getMock( '\PHPCI\Model\Project', array('getTitle'), array(), "mockProject", false ); $this->mockProject->expects($this->any()) ->method('getTitle') ->will($this->returnValue("Test-Project")); $this->mockBuild = $this->getMock( '\PHPCI\Model\Build', array('getLog', 'getStatus', 'getProject', 'getCommitterEmail'), array(), "mockBuild", false ); $this->mockBuild->expects($this->any()) ->method('getLog') ->will($this->returnValue("Build Log")); $this->mockBuild->expects($this->any()) ->method('getStatus') ->will($this->returnCallback(function () { return $this->buildStatus; })); $this->mockBuild->expects($this->any()) ->method('getProject') ->will($this->returnValue($this->mockProject)); $this->mockBuild->expects($this->any()) ->method('getCommitterEmail') ->will($this->returnValue('committer-email@example.com')); $this->mockCiBuilder = $this->getMock( '\PHPCI\Builder', array( 'getSystemConfig', 'getBuild', 'log' ), array(), "mockBuilder_email", false ); $this->mockCiBuilder->buildPath = "/"; $this->mockCiBuilder->expects($this->any()) ->method('getSystemConfig') ->with('phpci') ->will( $this->returnValue( array( 'email_settings' => array( 'from_address' => "test-from-address@example.com" ) ) ) ); } protected function loadEmailPluginWithOptions($arrOptions = array(), $buildStatus = null, $mailDelivered = true) { $this->mailDelivered = $mailDelivered; if (is_null($buildStatus)) { $this->buildStatus = Build::STATUS_SUCCESS; } else { $this->buildStatus = $buildStatus; } // Reset current message. $this->message = array(); $this->testedEmailPlugin = $this->getMock( '\PHPCI\Plugin\Email', array('sendEmail'), array( $this->mockCiBuilder, $this->mockBuild, $arrOptions ) ); $this->testedEmailPlugin->expects($this->any()) ->method('sendEmail') ->will($this->returnCallback(function ($to, $cc, $subject, $body) { $this->message['to'][] = $to; $this->message['cc'] = $cc; $this->message['subject'] = $subject; $this->message['body'] = $body; return $this->mailDelivered; }) ); } /** * @covers PHPUnit::execute */ public function testExecute_ReturnsFalseWithoutArgs() { $this->loadEmailPluginWithOptions(); $returnValue = $this->testedEmailPlugin->execute(); // As no addresses will have been mailed as non are configured. $expectedReturn = false; $this->assertEquals($expectedReturn, $returnValue); } /** * @covers PHPUnit::execute */ public function testExecute_BuildsBasicEmails() { $this->loadEmailPluginWithOptions( array( 'addresses' => array('test-receiver@example.com') ), Build::STATUS_SUCCESS ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertContains('test-receiver@example.com', $this->message['to']); } /** * @covers PHPUnit::execute */ public function testExecute_BuildsDefaultEmails() { $this->loadEmailPluginWithOptions( array( 'default_mailto_address' => 'default-mailto-address@example.com' ), Build::STATUS_SUCCESS ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertContains('default-mailto-address@example.com', $this->message['to']); } /** * @covers PHPUnit::execute */ public function testExecute_CcDefaultEmails() { $this->loadEmailPluginWithOptions( array( 'default_mailto_address' => 'default-mailto-address@example.com', 'cc' => array( 'cc-email-1@example.com', 'cc-email-2@example.com', 'cc-email-3@example.com', ), ), Build::STATUS_SUCCESS ); $this->testedEmailPlugin->execute(); $this->assertEquals( array( 'cc-email-1@example.com', 'cc-email-2@example.com', 'cc-email-3@example.com', ), $this->message['cc'] ); } /** * @covers PHPUnit::execute */ public function testExecute_BuildsCommitterEmails() { $this->loadEmailPluginWithOptions( array( 'committer' => true ), Build::STATUS_SUCCESS ); $this->testedEmailPlugin->execute(); $this->assertContains('committer-email@example.com', $this->message['to']); } /** * @covers PHPUnit::execute */ public function testExecute_MailSuccessfulBuildHaveProjectName() { $this->loadEmailPluginWithOptions( array( 'addresses' => array('test-receiver@example.com') ), Build::STATUS_SUCCESS ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertContains('Test-Project', $this->message['subject']); $this->assertContains('Test-Project', $this->message['body']); } /** * @covers PHPUnit::execute */ public function testExecute_MailFailingBuildHaveProjectName() { $this->loadEmailPluginWithOptions( array( 'addresses' => array('test-receiver@example.com') ), Build::STATUS_FAILED ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertContains('Test-Project', $this->message['subject']); $this->assertContains('Test-Project', $this->message['body']); } /** * @covers PHPUnit::execute */ public function testExecute_MailSuccessfulBuildHaveStatus() { $this->loadEmailPluginWithOptions( array( 'addresses' => array('test-receiver@example.com') ), Build::STATUS_SUCCESS ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertContains('Passing', $this->message['subject']); $this->assertContains('successfull', $this->message['body']); } /** * @covers PHPUnit::execute */ public function testExecute_MailFailingBuildHaveStatus() { $this->loadEmailPluginWithOptions( array( 'addresses' => array('test-receiver@example.com') ), Build::STATUS_FAILED ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertContains('Failing', $this->message['subject']); $this->assertContains('failed', $this->message['body']); } /** * @covers PHPUnit::execute */ public function testExecute_MailDeliverySuccess() { $this->loadEmailPluginWithOptions( array( 'addresses' => array('test-receiver@example.com') ), Build::STATUS_FAILED, true ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertEquals(true, $returnValue); } /** * @covers PHPUnit::execute */ public function testExecute_MailDeliveryFail() { $this->loadEmailPluginWithOptions( array( 'addresses' => array('test-receiver@example.com') ), Build::STATUS_FAILED, false ); $returnValue = $this->testedEmailPlugin->execute(); $this->assertEquals(false, $returnValue); } }