-
-
Notifications
You must be signed in to change notification settings - Fork 25
/
AsyncImportSpecificationTest.php
100 lines (85 loc) · 3.27 KB
/
AsyncImportSpecificationTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
declare(strict_types=1);
namespace ScriptFUSIONTest\Unit;
use PHPUnit\Framework\TestCase;
use ScriptFUSION\Async\Throttle\Throttle;
use ScriptFUSION\Porter\Connector\Recoverable\ExponentialAsyncDelayRecoverableExceptionHandler;
use ScriptFUSION\Porter\Connector\Recoverable\RecoverableExceptionHandler;
use ScriptFUSION\Porter\Provider\Resource\AsyncResource;
use ScriptFUSION\Porter\Specification\AsyncImportSpecification;
use ScriptFUSION\Porter\Transform\AsyncTransformer;
use ScriptFUSION\Porter\Transform\Transformer;
/**
* @see AsyncImportSpecification
*/
final class AsyncImportSpecificationTest extends TestCase
{
/** @var AsyncImportSpecification */
private $specification;
/** @var AsyncResource */
private $resource;
protected function setUp(): void
{
$this->specification = new AsyncImportSpecification($this->resource = \Mockery::mock(AsyncResource::class));
}
/**
* Tests that only async transformers can be added.
*/
public function testAddTransformer(): void
{
$this->specification->addTransformer($transformer = \Mockery::mock(AsyncTransformer::class));
self::assertContains($transformer, $this->specification->getTransformers());
$this->expectException(\TypeError::class);
$this->specification->addTransformer(\Mockery::mock(Transformer::class));
}
/**
* Tests that the default exception handler is of the expected type.
*/
public function testDefaultExceptionHandler(): void
{
self::assertInstanceOf(
ExponentialAsyncDelayRecoverableExceptionHandler::class,
$this->specification->getRecoverableExceptionHandler()
);
}
public function testClone(): void
{
$this->specification
->addTransformer(\Mockery::mock(AsyncTransformer::class))
->setContext($context = new class {
// Intentionally empty.
})
->setRecoverableExceptionHandler($handler = \Mockery::mock(RecoverableExceptionHandler::class))
;
$specification = clone $this->specification;
self::assertNotSame($this->resource, $specification->getAsyncResource());
self::assertNotSame(
array_values($this->specification->getTransformers()),
array_values($specification->getTransformers())
);
self::assertNotSame(
array_keys($this->specification->getTransformers()),
array_keys($specification->getTransformers())
);
self::assertCount(\count($this->specification->getTransformers()), $specification->getTransformers());
self::assertNotSame($context, $specification->getContext());
self::assertNotSame($handler, $specification->getRecoverableExceptionHandler());
}
/**
* Tests that a custom throttle can be set.
*/
public function testThrottle(): void
{
self::assertSame(
$throttle = \Mockery::mock(Throttle::class),
$this->specification->setThrottle($throttle)->getThrottle()
);
}
/**
* Tests that when no throttle is set, a default throttle is produced.
*/
public function testDefaultThrottle(): void
{
self::assertInstanceOf(Throttle::class, $this->specification->getThrottle());
}
}