PHP Classes

File: tests/ScanServiceTest.php

Recommend this page to a friend!
  Classes of Johnny Mast   Redbox PHP Scandir Filter   tests/ScanServiceTest.php   Download  
File: tests/ScanServiceTest.php
Role: Unit test script
Content type: text/plain
Description: Unit test script
Class: Redbox PHP Scandir Filter
Scan files for new or modified files
Author: By
Last change:
Date: 8 years ago
Size: 6,228 bytes
 

Contents

Class file image Download
<?php
namespace Redbox\Scan\Tests;
use
Redbox\Scan\Exception;
use
Redbox\Scan;

/**
 * This class will run tests against the ScanService class.
 *
 * @coversDefaultClass \Redbox\Scan\ScanService
 * @package Redbox\Scan\Tests
 */
class ScanServiceTest extends \PHPUnit_Framework_TestCase
{

   
/**
     * Return a scan service instance. This instance will be used in the tests
     * below.
     *
     * @param Scan\Adapter\AdapterInterface|NULL $adapter
     * @return Scan\ScanService
     */
   
private function getNewService(Scan\Adapter\AdapterInterface $adapter = NULL)
    {
        return new
Scan\ScanService($adapter);
    }

   
/**
     * Test if the Adapter set by the constructor gets set properly. We can do this by calling
     * ScanService::getAdapter().
     */
   
public function test_construct_should_set_the_adapter_correct()
    {
       
$adapter = new Scan\Adapter\Filesystem(dirname(__FILE__).'/Assets/tmp/scan.yml');
       
$service = $this->getNewService($adapter);
       
$this->assertEquals($adapter, $service->getAdapter());
    }

   
/**
     * This test will make sure that an RuntimeException is thrown if there was no Adapter
     * set via either the constructor or via the index method.
     *
     * @expectedException \Redbox\Scan\Exception\RuntimeException
     * @expectedExceptionMessage An Adapter must been set before calling index()
     */
   
public function test_index_should_throw_runtime_exception()
    {
       
$service = $this->getNewService();
       
$service->index("/", 'Basic scan', date("Y-m-d H:i:s"));
    }

   
/**
     * This test will make sure that an RuntimeException is thrown if there was no Adapter
     * set via either the constructor or via the ScanService::scan() method.
     *
     * @expectedException \Redbox\Scan\Exception\RuntimeException
     * @expectedExceptionMessage An Adapter must been set before calling scan()
     */
   
public function test_scan_should_throw_runtime_exception()
    {
       
$service = $this->getNewService();
       
$service->scan();
    }

   
/**
     * This test will make sure that an PHPUnit_Framework_Error is thrown if there was no Adapter
     * set via either the constructor or via the ScanService::scan() method. In the case of PHP >= 7.0 it will throw
     * and tests to catch a TypeError.
     */
   
public function test_service_scan_should_throw_exception_on_no_adapter()
    {
        if (
phpversion() < 7.0) {
           
$this->setExpectedException('PHPUnit_Framework_Error');

        } elseif (
phpversion() >= 7.0) {
           
$this->setExpectedException('TypeError');
        }
       
$service = $this->getNewService(new Assets\Adapter\WithoutInterface());
       
$service->scan("/");
    }

   
/**
     * Tests that if we call ScanService::scan() we should get a false return
     * if there as an error reading the adapter.
     */
   
public function test_service_scan_returns_false_if_reading_the_adapter_fails()
    {
       
$service = $this->getNewService(new Scan\Adapter\Filesystem('I do not exist'));
       
$this->assertFalse($service->scan());
    }

   
/**
     * If all goes well ScanService::index() should return the report that was generated.
     */
   
public function test_service_index_returns_a_report()
    {
       
$service = $this->getNewService(new Scan\Adapter\Filesystem(dirname(__FILE__).'/Assets/tmp/scan.yml'));
       
$report = $service->index(dirname(__FILE__), 'Basic scan', date("Y-m-d H:i:s"));
       
$this->assertInstanceOf('Redbox\Scan\Report\Report', $report);
    }

   
/**
     * Test that if an adapter fails to write its report ScanService::index() returns false instead of
     * a report.
     */
   
public function test_service_index_returns_false_on_failing_adapter()
    {
       
$service = $this->getNewService(new Scan\Adapter\Filesystem('/i_cant_be_written_to.yml'));
       
$return_value = $service->index(dirname(__FILE__), 'Basic scan', date("Y-m-d H:i:s"));
       
$this->assertFalse($return_value);
    }

   
/**
     * Test that ScanService::scan() returns a report if all goes well.
     */
   
public function test_service_scan_returns_a_report()
    {
       
$service = $this->getNewService(new Scan\Adapter\Filesystem(dirname(__FILE__).'/Assets/tmp/scan.yml'));
       
$report = $service->scan();
       
$this->assertInstanceOf('Redbox\Scan\Report\Report', $report);
    }

   
/**
     * Tests that if we call ScanService::index() we should get a false return
     * if there as an error writing to the adapter.
     */
   
public function test_service_scan_returns_false_if_writing_the_adapter_fails()
    {
       
$service = $this->getNewService();
       
$this->assertFalse(@$service->index(dirname(__FILE__).'/Assets', 'Basic scan', date("Y-m-d H:i:s"), new Scan\Adapter\Filesystem('I do not exist \'s invalid _ @()))@903 file / \ ')));
    }

   
/**
     * Tests that the scan routine will pickup on new files.
     */
   
public function test_service_scan_will_detect_newfiles()
    {
       
$filesystem = new Scan\Adapter\Filesystem(dirname(__FILE__).'/Assets/tmp/scan.yml');
       
$service = $this->getNewService($filesystem);

       
$service->index(dirname(__FILE__).'/Assets/tmp/');


       
file_put_contents(dirname(__FILE__).'/Assets/tmp/new.txt', time());

       
$report = $service->scan();
       
$this->assertTrue(count($report->getNewfiles()) > 0);

       
/* Unlink the tmp file */
       
unlink(dirname(__FILE__).'/Assets/tmp/new.txt');
    }

   
/**
     * Tests that the scan routine will pickup on file changes.
     */
   
public function test_service_scan_will_detect_modified_files()
    {
       
$filesystem = new Scan\Adapter\Filesystem(dirname(__FILE__).'/Assets/tmp/scan.yml');
       
$service = $this->getNewService($filesystem);

       
file_put_contents(dirname(__FILE__).'/Assets/tmp/tmp.txt', '');

       
$service->index(dirname(__FILE__).'/Assets/tmp/');


       
file_put_contents(dirname(__FILE__).'/Assets/tmp/tmp.txt', time());

       
$report = $service->scan();
       
$this->assertTrue(count($report->getModifiedFiles()) > 0);

       
/* Unlink the tmp file */
       
unlink(dirname(__FILE__).'/Assets/tmp/tmp.txt');
    }
}