Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
80.95% covered (warning)
80.95%
17 / 21
83.33% covered (warning)
83.33%
5 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
IntegrationOriginDTO
80.95% covered (warning)
80.95%
17 / 21
83.33% covered (warning)
83.33%
5 / 6
8.44
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 toArray
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 fromRequest
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 defaultRequestTransactionCode
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 defaultDevolutionTransactionCode
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 usesSpecialTransactionCodes
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Domain\Integration\DTOs;
4
5use Domain\Shared\Interfaces\DataTransferObjectInterface;
6use Illuminate\Foundation\Http\FormRequest;
7
8class IntegrationOriginDTO implements DataTransferObjectInterface
9{
10    private const SPECIAL_TRANSACTION_ORIGIN_CODES = ['57', '66', '67'];
11    private const DEFAULT_REQUEST_TRANSACTION_CODE = '90250';
12    private const DEFAULT_DEVOLUTION_TRANSACTION_CODE = '90202';
13    private const SPECIAL_REQUEST_TRANSACTION_CODE = '90254';
14    private const SPECIAL_DEVOLUTION_TRANSACTION_CODE = '90204';
15
16    public ?string $integrationCode;
17    public string $integrationCompany;
18    public string $requestTransactionCode;
19    public string $devolutionTransactionCode;
20
21
22    public function __construct(array $args)
23    {
24        $this->integrationCode = $args['integration_code'] ?? null;
25        $this->integrationCompany = $args['integration_company'];
26        $this->requestTransactionCode = (string) ($args['request_transaction_code'] ?? $this->defaultRequestTransactionCode());
27        $this->devolutionTransactionCode = (string) ($args['devolution_transaction_code'] ?? $this->defaultDevolutionTransactionCode());
28    }
29
30    public function toArray(): array
31    {
32        return [
33            'integration_code' => $this->integrationCode,
34            'integration_company' => $this->integrationCompany,
35            'request_transaction_code' => $this->requestTransactionCode,
36            'devolution_transaction_code' => $this->devolutionTransactionCode,
37        ];
38    }
39
40    public static function fromRequest(FormRequest $request): IntegrationOriginDTO
41    {
42        return new self([
43            'integration_code' => $request->validated('integration_code'),
44            'integration_company' => $request->validated('integration_company'),
45        ]);
46    }
47
48    private function defaultRequestTransactionCode(): string
49    {
50        return $this->usesSpecialTransactionCodes()
51            ? self::SPECIAL_REQUEST_TRANSACTION_CODE
52            : self::DEFAULT_REQUEST_TRANSACTION_CODE;
53    }
54
55    private function defaultDevolutionTransactionCode(): string
56    {
57        return $this->usesSpecialTransactionCodes()
58            ? self::SPECIAL_DEVOLUTION_TRANSACTION_CODE
59            : self::DEFAULT_DEVOLUTION_TRANSACTION_CODE;
60    }
61
62    private function usesSpecialTransactionCodes(): bool
63    {
64        return in_array((string) $this->integrationCode, self::SPECIAL_TRANSACTION_ORIGIN_CODES, true);
65    }
66
67}