[wip] add tests
This commit is contained in:
parent
afff03166e
commit
78b596a342
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/vendor/
|
/vendor/
|
||||||
/.idea/
|
/.idea/
|
||||||
|
/.phpunit.cache/
|
||||||
|
@ -2,7 +2,14 @@
|
|||||||
"name": "joopschilder/pdf-finder",
|
"name": "joopschilder/pdf-finder",
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"keywords": ["pdf", "documents", "search", "metadata", "info", "portable document format"],
|
"keywords": [
|
||||||
|
"pdf",
|
||||||
|
"documents",
|
||||||
|
"search",
|
||||||
|
"metadata",
|
||||||
|
"info",
|
||||||
|
"portable document format"
|
||||||
|
],
|
||||||
"description": "Utility to locate PDF files based on their metadata",
|
"description": "Utility to locate PDF files based on their metadata",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-0": {
|
"psr-0": {
|
||||||
@ -11,9 +18,20 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-0": {
|
||||||
|
"": [
|
||||||
|
"src",
|
||||||
|
"tests"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"symfony/console": "^5.2",
|
"symfony/console": "^5.2",
|
||||||
"cocur/slugify": "^4.0",
|
"cocur/slugify": "^4.0",
|
||||||
"illuminate/collections": "^8.33"
|
"illuminate/collections": "^8.33"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^9.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2055
composer.lock
generated
2055
composer.lock
generated
File diff suppressed because it is too large
Load Diff
25
phpunit.xml
Normal file
25
phpunit.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
|
||||||
|
bootstrap="vendor/autoload.php"
|
||||||
|
cacheResultFile=".phpunit.cache/test-results"
|
||||||
|
executionOrder="depends,defects"
|
||||||
|
forceCoversAnnotation="true"
|
||||||
|
beStrictAboutCoversAnnotation="true"
|
||||||
|
beStrictAboutOutputDuringTests="true"
|
||||||
|
beStrictAboutTodoAnnotatedTests="true"
|
||||||
|
failOnWarning="true"
|
||||||
|
verbose="true">
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="default">
|
||||||
|
<directory suffix="Test.php">tests</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
|
||||||
|
<coverage cacheDirectory=".phpunit.cache/code-coverage"
|
||||||
|
processUncoveredFiles="true">
|
||||||
|
<include>
|
||||||
|
<directory suffix=".php">src</directory>
|
||||||
|
</include>
|
||||||
|
</coverage>
|
||||||
|
</phpunit>
|
29
tests/ExampleDocumentAccess.php
Normal file
29
tests/ExampleDocumentAccess.php
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use IO\Filesystem\File;
|
||||||
|
use PDF\Document;
|
||||||
|
use PDF\Metadata;
|
||||||
|
|
||||||
|
trait ExampleDocumentAccess
|
||||||
|
{
|
||||||
|
protected function exampleDocument(?Metadata $metadata = null): Document
|
||||||
|
{
|
||||||
|
return new Document(
|
||||||
|
$this->exampleFile(),
|
||||||
|
$metadata ?? Metadata::empty()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function exampleDocumentWithMetadata(array $data): Document
|
||||||
|
{
|
||||||
|
return new Document(
|
||||||
|
$this->exampleFile(),
|
||||||
|
Metadata::fill($data)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function exampleFile(): File
|
||||||
|
{
|
||||||
|
return File::fromString(__DIR__ . '/resources/example.pdf');
|
||||||
|
}
|
||||||
|
}
|
47
tests/Filter/FilterParserTest.php
Normal file
47
tests/Filter/FilterParserTest.php
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Filter;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use TypeError;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Filter\FilterParser
|
||||||
|
*/
|
||||||
|
class FilterParserTest extends TestCase
|
||||||
|
{
|
||||||
|
private FilterParser $parser;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
$this->parser = new FilterParser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreatesSpecificFilters(): void
|
||||||
|
{
|
||||||
|
self::assertContainsOnlyInstancesOf(SpecificFilter::class, [
|
||||||
|
$this->parser->parse('title=poo'),
|
||||||
|
$this->parser->parse('1='),
|
||||||
|
$this->parser->parse('filepath=some_thing_else'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
self::assertNotInstanceOf(SpecificFilter::class, $this->parser->parse('='));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCreatesGenericFilters(): void
|
||||||
|
{
|
||||||
|
// Basically, anything that does not match the pattern .+=.*
|
||||||
|
self::assertContainsOnlyInstancesOf(GenericFilter::class, [
|
||||||
|
$this->parser->parse('scoobypoo'),
|
||||||
|
$this->parser->parse('324234'),
|
||||||
|
$this->parser->parse(324234),
|
||||||
|
$this->parser->parse('baz'),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDoesNotTakeNull(): void
|
||||||
|
{
|
||||||
|
$this->expectException(TypeError::class);
|
||||||
|
$this->parser->parse(null);
|
||||||
|
}
|
||||||
|
}
|
84
tests/Filter/GenericFilterTest.php
Normal file
84
tests/Filter/GenericFilterTest.php
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?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);
|
||||||
|
}
|
||||||
|
}
|
16
tests/Filter/SpecificFilterTest.php
Normal file
16
tests/Filter/SpecificFilterTest.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Filter;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \Filter\GenericFilter
|
||||||
|
*/
|
||||||
|
class SpecificFilterTest extends TestCase
|
||||||
|
{
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
self::markTestIncomplete('Not implemented');
|
||||||
|
}
|
||||||
|
}
|
0
tests/resources/example.pdf
Normal file
0
tests/resources/example.pdf
Normal file
Loading…
Reference in New Issue
Block a user