Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
5 / 5 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
1 / 1 |
InsuranceCalculator | |
100.00% |
5 / 5 |
|
100.00% |
2 / 2 |
3 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
calculate | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace Alfa\Interview; |
4 | |
5 | class InsuranceCalculator |
6 | { |
7 | public const TYPE_FLAT = 'flat'; |
8 | public const TYPE_CASCO = 'casco'; |
9 | |
10 | public const ADDITIONAL_DOG = 'dog'; |
11 | public const ADDITIONAL_TRAVEL = 'travel'; |
12 | |
13 | private const ADDITIONAL_PRICES = [ |
14 | self::ADDITIONAL_DOG => 50, |
15 | self::ADDITIONAL_TRAVEL => 100, |
16 | ]; |
17 | |
18 | public function __construct( |
19 | private readonly string $insuranceType, |
20 | private readonly array $additionals, |
21 | private readonly OfferClient $client |
22 | ) { |
23 | } |
24 | |
25 | public function calculate(): int |
26 | { |
27 | $basePrice = $this->client->getOffer($this->insuranceType); |
28 | |
29 | foreach ($this->additionals as $additional) { |
30 | $basePrice += self::ADDITIONAL_PRICES[$additional] ?? 0; |
31 | } |
32 | |
33 | return $basePrice; |
34 | } |
35 | } |