diff options
Diffstat (limited to 'plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php')
-rw-r--r-- | plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php b/plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php new file mode 100644 index 0000000000..d4ee8932c9 --- /dev/null +++ b/plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php @@ -0,0 +1,121 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +namespace Piwik\Plugins\CoreUpdater\tests; + +use Piwik\Config; +use Piwik\Option; +use Piwik\Plugins\CoreUpdater\UpdateCommunication; +use Piwik\UpdateCheck; +use Piwik\Version; + +/** + * Class Plugins_CoreUpdater_UpdateCommunicationTest + * + * @group Plugins + */ +class UpdateCommunicationTest extends \IntegrationTestCase +{ + public function setUp() + { + parent::setUp(); + } + + public function test_isEnabled() + { + $updateCommunication = new UpdateCommunication(); + + $this->assertTrue($updateCommunication->isEnabled()); + + Config::getInstance()->General['enable_update_communication'] = 0; + $this->assertFalse($updateCommunication->isEnabled()); + + Config::getInstance()->General['enable_update_communication'] = 1; + $this->assertTrue($updateCommunication->isEnabled()); + } + + /** + * @dataProvider provideSendNotificationData + */ + public function test_sendNotificationIfUpdateAvailable($latestVersion, $lastSentVersion, $expects, $expectedLastSentVersion) + { + $this->setLatestVersion($latestVersion); + $this->setLastSentVersion($lastSentVersion); + + $mock = $this->getCommunicationMock(array('sendNotifications')); + $mock->expects($expects)->method('sendNotifications'); + $mock->sendNotificationIfUpdateAvailable(); + + $this->assertEquals($expectedLastSentVersion, $this->getLastSentVersion()); + } + + public function provideSendNotificationData() + { + return array( + array(Version::VERSION, false, $this->never(), false), // shouldNotSend_IfNoUpdateAvailable + array('33.0.0', '33.0.0', $this->never(), '33.0.0'), // shouldNotSend_IfAlreadyNotified + array('31.0.0', '33.0.0', $this->never(), '33.0.0'), // shouldNotSend_IfAlreadyNotifiedAboutLaterRelease + array('3333.3333.3333-beta10', '31.0.0', $this->never(), '31.0.0'), // shouldNotSend_IfLatestVersionIsNotVersionLike, + array('33.0.0', false, $this->once(), '33.0.0'), // shouldSend_IfUpdateAvailableAndNeverSentAnyBefore + array('33.0.0', '31.0.0', $this->once(), '33.0.0'), // shouldSend_IfUpdateAvailable + ); + } + + public function test_sendNotifications_shouldSentCorrectEmail() + { + $this->setLatestVersion('33.0.0'); + + $subject = 'CoreUpdater_NotificationSubjectAvailableCoreUpdate'; + $message = 'ScheduledReports_EmailHello + +CoreUpdater_ThereIsNewVersionAvailableForUpdate + +CoreUpdater_YouCanUpgradeAutomaticallyOrDownloadPackage + +index.php?module=CoreUpdater&action=newVersionAvailable + +CoreUpdater_FeedbackRequest +http://piwik.org/contact/'; + + $mock = $this->getCommunicationMock(array('sendEmailNotification')); + $mock->expects($this->once()) + ->method('sendEmailNotification') + ->with($this->equalTo($subject), $this->equalTo($message)); + $mock->sendNotificationIfUpdateAvailable(); + } + + private function setLastSentVersion($value) + { + Option::set('last_update_communication_sent_core', $value); + } + + private function getLastSentVersion() + { + return Option::get('last_update_communication_sent_core'); + } + + private function setLatestVersion($value) + { + $this->preventVersionIsOverwrittenByActualVersionCheck(); + Option::set(UpdateCheck::LATEST_VERSION, $value); + } + + private function preventVersionIsOverwrittenByActualVersionCheck() + { + Config::getInstance()->General['enable_auto_update'] = false; + } + + /** + * @param array $methodsToOverwrite + * @return UpdateCommunication + */ + private function getCommunicationMock($methodsToOverwrite) + { + return $this->getMock('\Piwik\Plugins\CoreUpdater\UpdateCommunication', $methodsToOverwrite); + } +} |