Passed
Push — master ( 1eeb90...3a73e7 )
by Stefan
01:29
created

SepaPmtInfTest::testValidateInvalid()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 11
nc 1
nop 0
dl 0
loc 15
rs 9.9
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace SKien\Test\Sepa;
5
6
use PHPUnit\Framework\TestCase;
7
use SKien\Sepa\Sepa;
8
use SKien\Sepa\SepaDoc;
9
use SKien\Sepa\SepaPmtInf;
10
use SKien\Sepa\SepaTxInf;
11
12
/**
13
 * SepaPmtInf test case.
14
 */
15
class SepaPmtInfTest extends TestCase
16
{
17
    const validIBAN = 'DE11 6829 0000 0009 2158 08';
18
    const validBIC = 'GENODE61LAH';
19
    const validCI = 'DE79 ZZZ 01234567890';
20
    const invalidIBAN = 'DE21 6829 0000 0009 2158 08';
21
    const invalidBIC = 'GEN0DE61LAH';
22
    const invalidCI = 'DE49 ZZZ 01234567890';
23
24
    protected ?SepaDoc $oSD = null;
25
26
    public function test__construct()
27
    {
28
        $this->createValidDoc(Sepa::CDD);
29
        $oPmtInf = new SepaPmtInf($this->oSD);
30
        $this->assertNotEmpty($oPmtInf->getId());
31
    }
32
33
    public function testValidate()
34
    {
35
        $this->createValidDoc(Sepa::CDD);
36
        $oPmtInf = $this->createValidPmtInf();
37
        $this->assertEquals(self::validIBAN, $oPmtInf->getIBAN());
38
        $this->assertEquals(self::validBIC, $oPmtInf->getBIC());
39
        $this->assertEquals(self::validCI, $oPmtInf->getCI());
40
        $this->assertEquals('Testname', $oPmtInf->getName());
41
        $this->assertEquals(Sepa::SEQ_FIRST, $oPmtInf->getSeqType());
42
43
        $this->assertEquals(0, $oPmtInf->validate());
44
    }
45
46
    public function testValidateInvalid()
47
    {
48
        $this->createValidDoc(Sepa::CDD);
49
        $oPmtInf = new SepaPmtInf($this->oSD);
50
        $oPmtInf->setIBAN(self::invalidIBAN);
51
        $oPmtInf->setBIC(self::invalidBIC);
52
        $oPmtInf->setCI(self::invalidCI);
53
        $oPmtInf->setName('Testname');
54
        $oPmtInf->setSeqType(Sepa::SEQ_FIRST);
55
56
        $iExpectedErr = Sepa::ERR_PMT_INVALID_IBAN | Sepa::ERR_PMT_INVALID_BIC | Sepa::ERR_PMT_INVALID_CI;
57
        $this->assertEquals($iExpectedErr, $oPmtInf->validate());
58
59
        Sepa::setValidationLevel(Sepa::V_NO_IBAN_VALIDATION | Sepa::V_NO_BIC_VALIDATION | Sepa::V_NO_CI_VALIDATION);
60
        $this->assertEquals(0, $oPmtInf->validate());
61
    }
62
63
    public function testValidateMissing()
64
    {
65
        $this->createValidDoc(Sepa::CDD);
66
        $oPmtInf = new SepaPmtInf($this->oSD);
67
68
        $iExpectedErr =
69
            Sepa::ERR_PMT_IBAN_MISSING |
70
            Sepa::ERR_PMT_BIC_MISSING |
71
            Sepa::ERR_PMT_CI_MISSING |
72
            Sepa::ERR_PMT_NAME_MISSING
73
        ;
74
75
        $this->assertEquals($iExpectedErr | Sepa::ERR_PMT_SEQ_TYPE_MISSING, $oPmtInf->validate());
76
77
        $oPmtInf->setSeqType('invalid');
78
        $this->assertEquals($iExpectedErr | Sepa::ERR_PMT_INVALID_SEQ_TYPE, $oPmtInf->validate());
79
    }
80
81
    public function testGetCollectionDate()
82
    {
83
        $this->createValidDoc(Sepa::CDD);
84
        $oPmtInf = new SepaPmtInf($this->oSD);
85
        // only check for well formed date - for value test see SepaTest::testCalcCollectionDate()
86
        $this->assertMatchesRegularExpression('/^([0-9]){4}-([0-9]){2}-([0-9]){2}?$/', $oPmtInf->getCollectionDate());
87
    }
88
89
    public function testErrorMsg()
90
    {
91
        $this->createValidDoc(Sepa::CDD);
92
        $oPmtInf = new SepaPmtInf($this->oSD);
93
        $this->assertNotEmpty($oPmtInf->errorMsg(Sepa::ERR_PMT_IBAN_MISSING));
94
    }
95
96
    public function testAddPaymentInstructionInfoError()
97
    {
98
        Sepa::Init();
99
        Sepa::setValidationLevel(Sepa::V_FULL_VALIDATION);
100
        $this->oSD = new SepaDoc(Sepa::CDD);
101
        $oPmtInf = $this->createValidPmtInf();
102
        $this->expectError();
103
        $this->oSD->addPaymentInstructionInfo($oPmtInf);
104
    }
105
106
    public function testAddTransactionCDD()
107
    {
108
        $this->createValidDoc(Sepa::CDD);
109
        $oPmtInf = $this->createValidPmtInf();
110
        $this->assertEquals(0, $this->oSD->addPaymentInstructionInfo($oPmtInf));
111
        $this->assertEquals(0, $oPmtInf->addTransaction($this->createValidTxInf(Sepa::CDD)));
112
        $this->assertEquals(0, $this->oSD->getInvalidCount());
113
        $this->assertEquals(1, $this->oSD->getTxCount());
114
        $this->assertEquals(123.45, $this->oSD->getCtrlSum());
115
        $this->assertEquals(0, $oPmtInf->addTransaction($this->createValidTxInf(Sepa::CDD)));
116
        $this->assertEquals(2, $this->oSD->getTxCount());
117
        $this->assertEquals(246.9, $this->oSD->getCtrlSum());
118
    }
119
120
    public function testAddTransactionCCT()
121
    {
122
        $this->createValidDoc(Sepa::CCT);
123
        $oPmtInf = $this->createValidPmtInf();
124
        $this->assertEquals(0, $this->oSD->addPaymentInstructionInfo($oPmtInf));
125
        $this->assertEquals(0, $oPmtInf->addTransaction($this->createValidTxInf(Sepa::CCT)));
126
    }
127
128
    public function testAddTransactionError1()
129
    {
130
        $this->createValidDoc(Sepa::CDD);
131
        $oPmtInf = $this->createValidPmtInf();
132
        $this->expectError();
133
        $oPmtInf->addTransaction($this->createValidTxInf(Sepa::CDD));
134
    }
135
136
    public function testAddTransactionError2()
137
    {
138
        $this->createValidDoc(Sepa::CDD);
139
        $oPmtInf = $this->createValidPmtInf();
140
        $this->oSD->addPaymentInstructionInfo($oPmtInf);
141
        $this->assertEquals(Sepa::ERR_TX_INVALID_TYPE, $oPmtInf->addTransaction($this->createValidTxInf(Sepa::CCT)));
142
    }
143
144
    public function testAddTransactionError3()
145
    {
146
        $this->createValidDoc(Sepa::CDD);
147
        $oPmtInf = $this->createValidPmtInf();
148
        $this->oSD->addPaymentInstructionInfo($oPmtInf);
149
        $oTxInf = $this->createValidTxInf(Sepa::CDD);
150
        $oTxInf->setBIC('');
151
        $this->assertEquals(Sepa::ERR_TX_BIC_MISSING, $oPmtInf->addTransaction($oTxInf));
152
        $this->assertEquals(1, $this->oSD->getInvalidCount());
153
    }
154
155
156
    private function createValidDoc($type) : void
157
    {
158
        Sepa::Init();
159
        Sepa::setValidationLevel(Sepa::V_FULL_VALIDATION);
160
        $this->oSD = new SepaDoc($type);
161
        $this->oSD->createGroupHeader('Test company 4711');
162
    }
163
164
    private function createValidTxInf($type) : SepaTxInf
165
    {
166
        $oTxInf = new SepaTxInf($type);
167
        $oTxInf->setIBAN(self::validIBAN);
168
        $oTxInf->setBIC(self::validBIC);
169
        $oTxInf->setName('Testname');
170
        $oTxInf->setDescription('Testdescription');
171
        $oTxInf->setValue(123.45);
172
        $oTxInf->setMandateId('MD1234');
173
        $oTxInf->setDateOfSignature('2019-06-09');
174
        $oTxInf->setUltimateName('Ultimate Name');
175
176
        return $oTxInf;
177
    }
178
179
    private function createValidPmtInf() : SepaPmtInf
180
    {
181
        $oPmtInf = new SepaPmtInf($this->oSD);
182
        $oPmtInf->setIBAN(self::validIBAN);
183
        $oPmtInf->setBIC(self::validBIC);
184
        $oPmtInf->setCI(self::validCI);
185
        $oPmtInf->setName('Testname');
186
        $oPmtInf->setSeqType(Sepa::SEQ_FIRST);
187
188
        return $oPmtInf;
189
    }
190
}
191
192