PaymentPeriodsTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 5
lcom 1
cbo 3
dl 0
loc 62
rs 10
c 2
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
B testPaymentPeriods() 0 26 3
A periodsData() 0 7 1
A getMockPeriod() 0 14 1
1
<?php
2
3
namespace Kauri\Loan\Test;
4
5
6
use Kauri\Loan\PaymentPeriods;
7
use Kauri\Loan\Period;
8
use Kauri\Loan\PeriodInterface;
9
use PHPUnit\Framework\TestCase;
10
11
12
class PaymentPeriodsTest extends TestCase
13
{
14
    /**
15
     * @dataProvider periodsData
16
     * @param $averagePeriodLength
17
     * @param $paymentPeriods
18
     */
19
    public function testPaymentPeriods($averagePeriodLength, $paymentPeriods)
20
    {
21
        $periodsCollection = new PaymentPeriods($averagePeriodLength);
22
        $noOfPayments = count($paymentPeriods);
23
24
        $this->assertEquals(0, $periodsCollection->getNoOfPeriods());
25
        $this->assertTrue(empty($periodsCollection->getPeriods()));
26
27
        foreach ($paymentPeriods as $periodLength) {
28
            $periodMock = $this->getMockPeriod($periodLength, $averagePeriodLength);
29
            $periodsCollection->add($periodMock);
30
        }
31
32
        $this->assertEquals($noOfPayments, $periodsCollection->getNoOfPeriods());
33
        $this->assertTrue(!empty($periodsCollection->getPeriods()));
34
35
        /**
36
         * @var  $k
37
         * @var PeriodInterface $period
38
         */
39
        foreach ($periodsCollection->getPeriods() as $no => $period) {
40
            $this->assertEquals($no, $period->getSequenceNo());
41
            $this->assertEquals($averagePeriodLength, $period->getAvgLength());
42
            $this->assertEquals($paymentPeriods[$period->getSequenceNo()], $period->getExactLength());
43
        }
44
    }
45
46
    public function periodsData()
47
    {
48
        return [
49
            [7, [1 => 6, 5, 3, 9]],
50
            [30, [1 => 29, 30, 31, 30, 28]]
51
        ];
52
    }
53
54
    /**
55
     * @param $length
56
     * @return PeriodInterface
57
     */
58
    private function getMockPeriod($length, $averagePeriodLength)
59
    {
60
        $stub = $this->getMockBuilder(Period::class)
61
            ->disableOriginalConstructor()
62
            ->setMethods(['getExactLength', 'getAvgLength'])
63
            ->getMock();
64
65
        $stub->method('getExactLength')
66
            ->willReturn($length);
67
        $stub->method('getAvgLength')
68
            ->willReturn($averagePeriodLength);
69
70
        return $stub;
71
    }
72
73
}
74