Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
InsuranceCalculator
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 calculate
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace Alfa\Interview;
4
5class 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}