Completed
Push — master ( 1c4013...03cab4 )
by Hannes
02:18 queued 01:30
created

FeatureContext::aPdfIncludingTextIsGenerated()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10

Duplication

Lines 10
Ratio 100 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 1
dl 10
loc 10
rs 9.9332
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types = 1);
4
5
use Behat\Behat\Context\Context;
6
use Behat\Gherkin\Node\PyStringNode;
7
use Behat\Gherkin\Node\TableNode;
8
use Behat\Behat\Tester\Exception\PendingException;
9
use iio\libmergepdf\Merger;
10
use iio\libmergepdf\Pages;
11
use Smalot\PdfParser\Parser as PdfParser;
12
13
final class FeatureContext implements Context
14
{
15
    /**
16
     * @var Merger
17
     */
18
    private $merger;
19
20
    /**
21
     * @var string
22
     */
23
    private $generatedPdf;
24
25
    /**
26
     * @Given the :driver driver
27
     */
28
    public function theDriver(string $driver)
29
    {
30
        $driverClass = "iio\libmergepdf\Driver\\$driver";
31
        $this->merger = new Merger(new $driverClass);
32
    }
33
34
    /**
35
     * @Given a pdf
36
     */
37
    public function aPdf()
38
    {
39
        $this->aPdfOfVersion('1.4');
40
    }
41
42
    /**
43
     * @Given a pdf with pages :pages
44
     */
45
    public function aPdfWithPages($pages)
46
    {
47
        $this->aPdfOfVersionWithPages('1.4', $pages);
48
    }
49
50
    /**
51
     * @Given a pdf of version :version
52
     */
53
    public function aPdfOfVersion(string $version)
54
    {
55
        $this->aPdfOfVersionWithPages($version, '');
56
    }
57
58
    /**
59
     * @Given a pdf of version :version with pages :pages
60
     */
61
    public function aPdfOfVersionWithPages(string $version, string $pages)
62
    {
63
        $this->merger->addFile(__DIR__ . "/../files/$version.pdf", new Pages($pages));
64
    }
65
66
    /**
67
     * @Given a pdf with a header including text HEADER
68
     */
69
    public function aPdfWithAHeaderIncludingTextHeader()
70
    {
71
        $this->merger->addFile(__DIR__ . "/../files/header.pdf");
72
    }
73
74
    /**
75
     * @Given a blank pdf
76
     */
77
    public function aBlankPdf()
78
    {
79
        $this->merger->addFile(__DIR__ . "/../files/blank.pdf");
80
    }
81
82
    /**
83
     * @When I merge
84
     */
85
    public function iMerge()
86
    {
87
        $this->generatedPdf = $this->merger->merge();
88
    }
89
90
    /**
91
     * @Then a pdf is generated
92
     */
93
    public function aPdfIsGenerated()
94
    {
95
        (new PdfParser)->parseContent($this->generatedPdf);
96
    }
97
98
    /**
99
     * @Then a pdf with :expectedCount pages is generated
100
     */
101
    public function aPdfWithPagesIsGenerated(string $expectedCount)
102
    {
103
        $pageCount = count((new PdfParser)->parseContent($this->generatedPdf)->getPages());
104
105
        if ($pageCount != $expectedCount) {
106
            throw new Exception("A pdf with $pageCount pages was created, expected $expectedCount pages.");
107
        }
108
    }
109
110
    /**
111
     * @Then a pdf including text :expectedText is generated
112
     */
113 View Code Duplication
    public function aPdfIncludingTextIsGenerated(string $expectedText)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
114
    {
115
        $text = (new PdfParser)->parseContent($this->generatedPdf)->getText();
116
117
        $regexp = preg_quote($expectedText, '/');
118
119
        if (!preg_match("/$regexp/", $text)) {
120
            throw new Exception("A pdf with text '$text' was created, expected '$expectedText'.");
121
        }
122
    }
123
124
    /**
125
     * @Then a pdf not including text :unexpectedText is generated
126
     */
127 View Code Duplication
    public function aPdfNotIncludingTextIsGenerated(string $unexpectedText)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
128
    {
129
        $text = (new PdfParser)->parseContent($this->generatedPdf)->getText();
130
131
        $regexp = preg_quote($unexpectedText, '/');
132
133
        if (preg_match("/$regexp/", $text)) {
134
            throw new Exception("A pdf with unexpected text '$unexpectedText' was created.");
135
        }
136
    }
137
}
138