diff options
Diffstat (limited to 'tests/lib')
-rw-r--r-- | tests/lib/repair.php | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/tests/lib/repair.php b/tests/lib/repair.php new file mode 100644 index 00000000000..121f41dedd9 --- /dev/null +++ b/tests/lib/repair.php @@ -0,0 +1,159 @@ +<?php +/** + * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +use OC\Hooks\BasicEmitter; + +class TestRepairStep extends BasicEmitter implements \OC\RepairStep{ + private $warning; + + public function __construct($warning = false) { + $this->warning = $warning; + } + + public function getName() { + return 'Test Name'; + } + + public function run() { + if ($this->warning) { + $this->emit('\OC\Repair', 'warning', array('Simulated warning')); + } + else { + $this->emit('\OC\Repair', 'info', array('Simulated info')); + } + } +} + +class Test_Repair extends PHPUnit_Framework_TestCase { + public function testRunRepairStep() { + $output = array(); + + $repair = new \OC\Repair(); + $repair->addStep(new TestRepairStep(false)); + + $repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) { + $output[] = 'warning: ' . $description; + }); + $repair->listen('\OC\Repair', 'info', function ($description) use (&$output) { + $output[] = 'info: ' . $description; + }); + $repair->listen('\OC\Repair', 'step', function ($description) use (&$output) { + $output[] = 'step: ' . $description; + }); + + $repair->run(); + + $this->assertEquals( + array( + 'step: Test Name', + 'info: Simulated info', + ), + $output + ); + } + + public function testRunRepairStepThatFail() { + $output = array(); + + $repair = new \OC\Repair(); + $repair->addStep(new TestRepairStep(true)); + + $repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) { + $output[] = 'warning: ' . $description; + }); + $repair->listen('\OC\Repair', 'info', function ($description) use (&$output) { + $output[] = 'info: ' . $description; + }); + $repair->listen('\OC\Repair', 'step', function ($description) use (&$output) { + $output[] = 'step: ' . $description; + }); + + $repair->run(); + + $this->assertEquals( + array( + 'step: Test Name', + 'warning: Simulated warning', + ), + $output + ); + } + + public function testRunRepairStepsWithException() { + $output = array(); + + $mock = $this->getMock('TestRepairStep'); + $mock->expects($this->any()) + ->method('run') + ->will($this->throwException(new Exception)); + $mock->expects($this->any()) + ->method('getName') + ->will($this->returnValue('Exception Test')); + + $repair = new \OC\Repair(); + $repair->addStep($mock); + $repair->addStep(new TestRepairStep(false)); + + $repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) { + $output[] = 'warning: ' . $description; + }); + $repair->listen('\OC\Repair', 'info', function ($description) use (&$output) { + $output[] = 'info: ' . $description; + }); + $repair->listen('\OC\Repair', 'step', function ($description) use (&$output) { + $output[] = 'step: ' . $description; + }); + + $thrown = false; + try { + $repair->run(); + } + catch (Exception $e) { + $thrown = true; + } + + $this->assertTrue($thrown); + // jump out after exception + $this->assertEquals( + array( + 'step: Exception Test', + ), + $output + ); + } + + public function testRunRepairStepsContinueAfterWarning() { + $output = array(); + + $repair = new \OC\Repair(); + $repair->addStep(new TestRepairStep(true)); + $repair->addStep(new TestRepairStep(false)); + + $repair->listen('\OC\Repair', 'warning', function ($description) use (&$output) { + $output[] = 'warning: ' . $description; + }); + $repair->listen('\OC\Repair', 'info', function ($description) use (&$output) { + $output[] = 'info: ' . $description; + }); + $repair->listen('\OC\Repair', 'step', function ($description) use (&$output) { + $output[] = 'step: ' . $description; + }); + + $repair->run(); + + $this->assertEquals( + array( + 'step: Test Name', + 'warning: Simulated warning', + 'step: Test Name', + 'info: Simulated info', + ), + $output + ); + } +} |