85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Filter;
 | 
						|
 | 
						|
use ExampleDocumentAccess;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
use TypeError;
 | 
						|
 | 
						|
/**
 | 
						|
 * @covers \Filter\GenericFilter
 | 
						|
 */
 | 
						|
class GenericFilterTest extends TestCase
 | 
						|
{
 | 
						|
    use ExampleDocumentAccess;
 | 
						|
 | 
						|
    public function testAllowsWhenMatchBasenameOfFile(): void
 | 
						|
    {
 | 
						|
        $filter = new GenericFilter('example');
 | 
						|
        $document = $this->exampleDocument();
 | 
						|
 | 
						|
        self::assertTrue($filter->allows($document));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testAllowsWhenMatchesPathToFile(): void
 | 
						|
    {
 | 
						|
        $filter = new GenericFilter('resources');
 | 
						|
        $document = $this->exampleDocument();
 | 
						|
 | 
						|
        self::assertTrue($filter->allows($document));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testAllowsWhenMatchesAnyMetadataField(): void
 | 
						|
    {
 | 
						|
        $filter = new GenericFilter('John Snow');
 | 
						|
        $document = $this->exampleDocumentWithMetadata([
 | 
						|
            'title'  => 'some title',
 | 
						|
            'author' => 'John Snow',
 | 
						|
        ]);
 | 
						|
 | 
						|
        self::assertTrue($filter->allows($document));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testDisallowsWhenNotMatchingBasenameOfFile(): void
 | 
						|
    {
 | 
						|
        $filter = new GenericFilter('not-an-example');
 | 
						|
        $document = $this->exampleDocument();
 | 
						|
 | 
						|
        self::assertFalse($filter->allows($document));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testDisallowsWhenNotMatchingPathToFile(): void
 | 
						|
    {
 | 
						|
        $filter = new GenericFilter('this-is-definitely-not-in-the-path' . md5(time()));
 | 
						|
        $document = $this->exampleDocument();
 | 
						|
 | 
						|
        self::assertFalse($filter->allows($document));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testDisallowsWhenNotMatchingAnyMetadataField(): void
 | 
						|
    {
 | 
						|
        $filter = new GenericFilter('peepee');
 | 
						|
        $document = $this->exampleDocumentWithMetadata([
 | 
						|
            'title'  => 'some title',
 | 
						|
            'author' => 'John Snow',
 | 
						|
        ]);
 | 
						|
 | 
						|
        self::assertFalse($filter->allows($document));
 | 
						|
    }
 | 
						|
 | 
						|
    public function testStringRepresentation(): void
 | 
						|
    {
 | 
						|
        $filter = new GenericFilter('i-am-a-field');
 | 
						|
        self::assertEquals(
 | 
						|
            '[*] contains \'i-am-a-field\'',
 | 
						|
            (string)$filter
 | 
						|
        );
 | 
						|
    }
 | 
						|
 | 
						|
    public function testDoesNotAcceptNull(): void
 | 
						|
    {
 | 
						|
        $this->expectException(TypeError::class);
 | 
						|
        new GenericFilter(null);
 | 
						|
    }
 | 
						|
}
 |