Completed
Pull Request — master (#8)
by Саша
21:35
created

DefaultPipelineSpec::it_processes_etl_sequentially()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 13
rs 9.4285
cc 1
eloc 9
nc 1
nop 3
1
<?php
2
3
namespace spec\Extraload\Pipeline;
4
5
use PhpSpec\ObjectBehavior;
6
use Prophecy\Argument;
7
use Extraload\Extractor\ExtractorInterface;
8
use Extraload\Transformer\TransformerInterface;
9
use Extraload\Loader\LoaderInterface;
10
use Extraload\Events;
11
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
12
13
class DefaultPipelineSpec extends ObjectBehavior
14
{
15
    function let(ExtractorInterface $extractor, TransformerInterface $transformer, LoaderInterface $loader)
16
    {
17
        $this->beConstructedWith($extractor, $transformer, $loader);
18
    }
19
20
    function it_is_initializable()
21
    {
22
        $this->shouldHaveType('Extraload\Pipeline\DefaultPipeline');
23
    }
24
25
    function it_implements_pipeline_interface()
26
    {
27
        $this->shouldImplement('Extraload\Pipeline\PipelineInterface');
28
    }
29
30
    function it_does_not_transform_nor_load_if_no_data_extracted(
31
        ExtractorInterface $extractor,
32
        TransformerInterface $transformer,
33
        LoaderInterface $loader
34
    )
35
    {
36
        $extractor->extract()->shouldBeCalled()->willReturn(null);
37
        $transformer->transform(Argument::any())->shouldNotBeCalled();
38
        $loader->flush()->shouldBeCalled();
39
40
        $this->process();
41
    }
42
43
    function it_processes_etl_sequentially(
44
        ExtractorInterface $extractor,
45
        TransformerInterface $transformer,
46
        LoaderInterface $loader
47
    )
48
    {
49
        $extractor->extract()->shouldBeCalled()->willReturn(['a1', 'b1', 'c1'], null);
50
        $transformer->transform(['a1', 'b1', 'c1'])->shouldBeCalled()->willReturn(['c1', 'b1', 'a1']);
51
        $loader->load(['c1', 'b1', 'a1'])->shouldBeCalled();
52
        $loader->flush()->shouldBeCalled();
53
54
        $this->process();
55
    }
56
57
    function it_dispatches_events_during_etl_processesing(
58
        ExtractorInterface $extractor,
59
        TransformerInterface $transformer,
60
        LoaderInterface $loader,
61
        EventDispatcherInterface $eventDispatcher
62
    )
63
    {
64
        $this->beConstructedWith($extractor, $transformer, $loader, $eventDispatcher);
65
66
        $extractor->extract()->shouldBeCalled()->willReturn(['a1', 'b1', 'c1'], null);
67
        $transformer->transform(['a1', 'b1', 'c1'])->shouldBeCalled()->willReturn(['c1', 'b1', 'a1']);
68
        $loader->load(['c1', 'b1', 'a1'])->shouldBeCalled();
69
        $loader->flush()->shouldBeCalled();
70
71
        $eventDispatcher->dispatch(Events::PRE_PROCESS, Argument::any())->shouldBeCalled();
72
        $eventDispatcher->dispatch(Events::POST_PROCESS, Argument::any())->shouldBeCalled();
73
        $eventDispatcher->dispatch(Events::EXTRACT, Argument::any())->shouldBeCalled();
74
        $eventDispatcher->dispatch(Events::TRANSFORM, Argument::any())->shouldBeCalled();
75
        $eventDispatcher->dispatch(Events::LOAD, Argument::any())->shouldBeCalled();
76
77
        $this->process();
78
    }
79
}
80