Completed
Push — master ( 038cb8...f2d1b9 )
by FX
13:23
created

MineTest::testGetProdRxPerHourIndex()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace AppBundle\Tests\Entity;
4
5
use AppBundle\Entity\Mine;
6
use AppBundle\Entity\ObjectType;
7
use AppBundle\Tests\KernelDbTestCase;
8
use DateTime;
9
10
class MineTest extends KernelDbTestCase
11
{
12
    public function testGetters()
13
    {
14
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
15
16
        $this->assertEquals(1, $mine->getId());
17
        $this->assertEquals(ObjectType::MINE, $mine->getType());
18
        $this->assertEquals(1, $mine->getLevel());
19
        $this->assertEquals(10, $mine->getR1());
20
        $this->assertEquals(0, $mine->getR2());
21
        $this->assertEquals(0, $mine->getR3());
22
        $this->assertEquals('100000000', $mine->getFactor());
23
24
        $date = new DateTime('2016-08-01 00:00:01');
25
        $this->assertEquals($date, $mine->getLastUpdate());
26
    }
27
28
    public function testSetters()
29
    {
30
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
31
32
        $mine->setLevel(20);
33
        $mine->setR1(21);
34
        $mine->setR2(22);
35
        $mine->setR3(23);
36
        $mine->setFactor('005050020');
37
38
        $date = new DateTime('2016-08-02 01:01:00');
39
        $mine->setLastUpdate($date);
40
41
        $this->entityManager->persist($mine);
42
        $this->entityManager->flush();
43
44
        $mine2 = $this->entityManager->getRepository(Mine::class)->find(1);
45
46
        $this->assertEquals(20, $mine2->getLevel());
47
        $this->assertEquals(21, $mine2->getR1());
48
        $this->assertEquals(22, $mine2->getR2());
49
        $this->assertEquals(23, $mine2->getR3());
50
        $this->assertEquals('005050020', $mine2->getFactor());
51
        $this->assertEquals($date, $mine2->getLastUpdate());
52
    }
53
54
    public function testUpgrade()
55
    {
56
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
57
58
        $this->assertEquals(1, $mine->getLevel());
59
        $mine->upgrade();
60
        $this->assertEquals(2, $mine->getLevel());
61
        $mine->setLevel(10);
62
        $mine->upgrade();
63
        $this->assertEquals(11, $mine->getLevel());
64
    }
65
66
    public function testGetProdLevelIndex()
67
    {
68
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
69
70
        $index1 = 5 * 1 * 1.1 ^ 1;
71
        $this->assertEquals($index1, $mine->getProdLevelIndex());
72
73
        $mine->setLevel(5);
74
        $index5 = 5 * 5 * 1.1 ^ 5;
75
        $this->assertEquals($index5, $mine->getProdLevelIndex());
76
77
        $mine->setLevel(40);
78
        $index40 = 5 * 40 * 1.1 ^ 40;
79
        $this->assertEquals($index40, $mine->getProdLevelIndex());
80
81
        $mine->setLevel(100);
82
        $index100 = 5 * 100 * 1.1 ^ 100;
83
        $this->assertEquals($index100, $mine->getProdLevelIndex());
84
    }
85
86
    public function testGetProdRxPerHourIndex()
87
    {
88
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
89
90
        $prodRxPH100 = $mine->getProdLevelIndex();
91
        $this->assertEquals($prodRxPH100, $mine->getProdRxPerHour(100));
92
93
        $prodRxPH50 = $mine->getProdLevelIndex() * 0.5;
94
        $this->assertEquals($prodRxPH50, $mine->getProdRxPerHour(50));
95
96
        $this->assertEquals(0, $mine->getProdRxPerHour(0));
97
    }
98
99
    public function testGetProdR1PerHour()
100
    {
101
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
102
        $this->assertEquals($mine->getProdLevelIndex(), $mine->getProdR1PerHour());
103
104
        $mine2 = $this->entityManager->getRepository(Mine::class)->find(2);
105
        $this->assertEquals(0, $mine2->getProdR1PerHour());
106
107
        $mine3 = $this->entityManager->getRepository(Mine::class)->find(3);
108
        $this->assertEquals(0, $mine3->getProdR1PerHour());
109
    }
110
111
    public function testGetProdR2PerHour()
112
    {
113
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
114
        $this->assertEquals(0, $mine->getProdR2PerHour());
115
116
        $mine2 = $this->entityManager->getRepository(Mine::class)->find(2);
117
        $this->assertEquals($mine2->getProdLevelIndex(), $mine2->getProdR2PerHour());
118
119
        $mine3 = $this->entityManager->getRepository(Mine::class)->find(3);
120
        $this->assertEquals(0, $mine3->getProdR2PerHour());
121
    }
122
123
    public function testGetProdR3PerHour()
124
    {
125
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
126
        $this->assertEquals(0, $mine->getProdR3PerHour());
127
128
        $mine2 = $this->entityManager->getRepository(Mine::class)->find(2);
129
        $this->assertEquals(0, $mine2->getProdR3PerHour());
130
131
        $mine3 = $this->entityManager->getRepository(Mine::class)->find(3);
132
        $this->assertEquals($mine3->getProdLevelIndex(), $mine3->getProdR3PerHour());
133
    }
134
135
    public function testGetProdRxOnPeriodWithDifferentFactor()
136
    {
137
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
138
139
        $dateFrom = new DateTime('2016-08-01 00:00:01');
140
        $dateTo = new DateTime('2016-08-01 01:00:01');
141
142
        $prodRxOnPeriod1 = 1 * $mine->getProdLevelIndex() * 1;
143
        $this->assertEquals($prodRxOnPeriod1, $mine->getProdRxOnPeriod($dateFrom, $dateTo, 100));
144
145
        $prodRxOnPeriod2 = 1 * $mine->getProdLevelIndex() * 0.5;
146
        $this->assertEquals($prodRxOnPeriod2, $mine->getProdRxOnPeriod($dateFrom, $dateTo, 50));
147
148
        $prodRxOnPeriod3 = 1 * $mine->getProdLevelIndex() * 0;
149
        $this->assertEquals($prodRxOnPeriod3, $mine->getProdRxOnPeriod($dateFrom, $dateTo, 0));
150
    }
151
152
    public function testGetProdRxOnPeriodWithDifferentPeriod()
153
    {
154
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
155
156
        $dateFrom = new DateTime('2016-08-01 00:00:01');
157
158
        $prodRxOnPeriod1 = 1 * $mine->getProdLevelIndex() * 1;
159
        $this->assertEquals($prodRxOnPeriod1, $mine->getProdRxOnPeriod($dateFrom, new DateTime('2016-08-01 01:00:01'), 100));
160
161
        $prodRxOnPeriod2 = 24 * $mine->getProdLevelIndex() * 1;
162
        $this->assertEquals($prodRxOnPeriod2, $mine->getProdRxOnPeriod($dateFrom, new DateTime('2016-08-02 00:00:01'), 100));
163
164
        $prodRxOnPeriod3 = 25 * $mine->getProdLevelIndex() * 1;
165
        $this->assertEquals($prodRxOnPeriod3, $mine->getProdRxOnPeriod($dateFrom, new DateTime('2016-08-02 01:00:01'), 100));
166
167
        $this->assertEquals(0, $mine->getProdRxOnPeriod($dateFrom, new DateTime('2016-08-01 00:00:01'), 100));
168
    }
169
170
    public function testGetProdRxOnPeriodWithDifferentLevel()
171
    {
172
        $mine = $this->entityManager->getRepository(Mine::class)->find(1);
173
174
        $dateFrom = new DateTime('2016-08-01 00:00:01');
175
        $dateTo = new DateTime('2016-08-01 01:00:01');
176
177
        $prodRxOnPeriod1 = 1 * $mine->getProdLevelIndex() * 1;
178
        $this->assertEquals($prodRxOnPeriod1, $mine->getProdRxOnPeriod($dateFrom, $dateTo, 100));
179
180
        $mine->setLevel(10);
181
        $prodRxOnPeriod2 = 1 * $mine->getProdLevelIndex() * 1;
182
        $this->assertNotEquals($prodRxOnPeriod1, $mine->getProdRxOnPeriod($dateFrom, $dateTo, 100));
183
        $this->assertEquals($prodRxOnPeriod2, $mine->getProdRxOnPeriod($dateFrom, $dateTo, 100));
184
185
        $mine->setLevel(0);
186
        $this->assertEquals(0, $mine->getProdRxOnPeriod($dateFrom, $dateTo, 100));
187
    }
188
}
189