Passed
Push — master ( 18c542...46352d )
by Kevin
02:34
created

MockScheduleBuilder   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 12
eloc 31
c 0
b 0
f 0
dl 0
loc 79
rs 10

9 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 3 1
A getRunner() 0 13 2
A addHandler() 0 5 1
A addTask() 0 5 1
A addRunner() 0 5 1
A addExtension() 0 5 1
A addSubscriber() 0 5 1
A addBuilder() 0 5 1
A buildSchedule() 0 8 3
1
<?php
2
3
namespace Zenstruck\ScheduleBundle\Tests\Fixture;
4
5
use Symfony\Component\EventDispatcher\EventDispatcher;
6
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
7
use Zenstruck\ScheduleBundle\Event\AfterScheduleEvent;
8
use Zenstruck\ScheduleBundle\EventListener\ScheduleBuilderSubscriber;
9
use Zenstruck\ScheduleBundle\Schedule;
10
use Zenstruck\ScheduleBundle\Schedule\Extension;
11
use Zenstruck\ScheduleBundle\Schedule\Extension\ExtensionHandler;
12
use Zenstruck\ScheduleBundle\Schedule\Extension\ExtensionHandlerRegistry;
13
use Zenstruck\ScheduleBundle\Schedule\Extension\Handler\SelfHandlingHandler;
14
use Zenstruck\ScheduleBundle\Schedule\ScheduleBuilder;
15
use Zenstruck\ScheduleBundle\Schedule\ScheduleRunner;
16
use Zenstruck\ScheduleBundle\Schedule\Task;
17
use Zenstruck\ScheduleBundle\Schedule\Task\Runner\SelfRunningTaskRunner;
18
use Zenstruck\ScheduleBundle\Schedule\Task\TaskRunner;
19
20
/**
21
 * @author Kevin Bond <[email protected]>
22
 */
23
final class MockScheduleBuilder implements ScheduleBuilder
24
{
25
    private $tasks = [];
26
    private $extensions = [];
27
    private $runners = [];
28
    private $subscribers = [];
29
    private $handlers = [];
30
    private $builders = [];
31
32
    public function addTask(Task $task): self
33
    {
34
        $this->tasks[] = $task;
35
36
        return $this;
37
    }
38
39
    public function addExtension(Extension $extension): self
40
    {
41
        $this->extensions[] = $extension;
42
43
        return $this;
44
    }
45
46
    public function addRunner(TaskRunner $runner): self
47
    {
48
        $this->runners[] = $runner;
49
50
        return $this;
51
    }
52
53
    public function addSubscriber(EventSubscriberInterface $subscriber): self
54
    {
55
        $this->subscribers[] = $subscriber;
56
57
        return $this;
58
    }
59
60
    public function addHandler(ExtensionHandler $handler): self
61
    {
62
        $this->handlers[] = $handler;
63
64
        return $this;
65
    }
66
67
    public function addBuilder(ScheduleBuilder $builder): self
68
    {
69
        $this->builders[] = $builder;
70
71
        return $this;
72
    }
73
74
    public function run(): AfterScheduleEvent
75
    {
76
        return $this->getRunner()();
77
    }
78
79
    public function getRunner(): ScheduleRunner
80
    {
81
        $dispatcher = new EventDispatcher();
82
        $dispatcher->addSubscriber(new ScheduleBuilderSubscriber(\array_merge($this->builders, [$this])));
83
84
        foreach ($this->subscribers as $subscriber) {
85
            $dispatcher->addSubscriber($subscriber);
86
        }
87
88
        $handlers = $this->handlers;
89
        $handlers[] = new SelfHandlingHandler();
90
91
        return new ScheduleRunner(\array_merge($this->runners, [new SelfRunningTaskRunner()]), new ExtensionHandlerRegistry($handlers), $dispatcher);
92
    }
93
94
    public function buildSchedule(Schedule $schedule): void
95
    {
96
        foreach ($this->tasks as $task) {
97
            $schedule->add($task);
98
        }
99
100
        foreach ($this->extensions as $extension) {
101
            $schedule->addExtension($extension);
102
        }
103
    }
104
}
105