Completed
Push — master ( 690bad...4d799d )
by Rafael
14s queued 11s
created

ChangeStatusValidator::status()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
cc 4
nc 3
nop 0
1
<?php
2
3
namespace WeDevBr\Bankly\Validators\Card;
4
5
use WeDevBr\Bankly\Types\Card\Password;
6
use WeDevBr\Bankly\Types\Card\ChangeStatus;
7
8
/**
9
 * ChangeStatusValidator class
10
 *
11
 * PHP version 7.3|7.4|8.0
12
 *
13
 * @author    WeDev Brasil Team <[email protected]>
14
 * @author    Rafael Teixeira <[email protected]>
15
 * @copyright 2021 We Dev Tecnologia Ltda
16
 * @link      https://github.com/wedevBr/bankly-laravel/
17
 */
18
class ChangeStatusValidator
19
{
20
    /**
21
     * Card statuses.
22
     * No password sent:
23
     * - LostOrTheftCanceled
24
     * - CanceledByCustomer
25
     * - TemporarilyUserLocked
26
     * - Active
27
     *
28
     * @var array
29
     */
30
    protected $statuses = [
31
        'Building', //Cartão encontra-se em construção, não está pronto para uso;
32
        'Active', //Cartão encontra-se ativo para utilizar em transações;
33
        'ReturnedLocked', //Devolvido, ocorre quando o cartão não foi entregue no destino;
34
        'Sleeping', //Cartão disponível na göndola sem vínculo com a conta do cliente;
35
        'InTransitLocked', //Cartão sendo confeccionado ou a caminho do endereço de entrega;
36
        'Inactive', //Cartão comprado na gôndola sem vínculo com a conta do cliente;
37
        'WithoutMovementLocked', //Bloqueado por falta de uso;
38
        'TemporarilyUserLocked', //Bloqueado temporariamente pelo cliente;
39
        'WrongPasswordAttemptLocked', //Bloqueado por tentativa de senha excedida;
40
        'UseFraudCanceled', //Cancelado por uso em transações com fraude;
41
        'CredentialOnFile', //Referentes a transações de uso em serviço de recorrência;
42
        'RegisterFraudLocked', //Bloqueado por suspeita de fraude no cadastro;
43
        'UpdateRegisterLocked', //Bloqueado por pendência de atualização cadastral;
44
        //Non-reversible
45
        'UpdateRegisterCanceled', //Cancelado por pendência de atualização cadastral;
46
        'RegisterFraudCanceled', //Cancelado por suspeita de fraude no cadastro;
47
        'CanceledByCustomer', //Cancelado pelo cliente;
48
        'CanceledByEmitter', //Cancelado pelo emissor/parceiro;
49
        'ExpiredCanceled', //Cancelado por expiração;
50
        'StrayedCanceled', //Cancelado por extravio;
51
        'DeathCanceled', //Cancelado por morte;
52
        'LostOrTheftCanceled', //Cancelado por perda ou roubo;
53
        'UseFraudLocked', //Bloqueado por uso em transações com fraude;
54
        'CardCanceledByAccount', //Cancelado após a conta ser cancelada;
55
    ];
56
57
    /**
58
     * @var ChangeStatus
59
     */
60
    private $changeStatus;
61
62
    /**
63
     * ChangeStatusValidator constructor.
64
     * @param ChangeStatus $changeStatus
65
     */
66
    public function __construct(ChangeStatus $changeStatus)
67
    {
68
        $this->changeStatus = $changeStatus;
69
    }
70
71
    /**
72
     * This validate the attributes
73
     */
74
    public function validate(): void
75
    {
76
        $this->password();
77
        $this->status();
78
        $this->updateCardBinded();
79
    }
80
81
    /**
82
     * @return void
83
     */
84
    public function password()
85
    {
86
        $password = new Password();
87
        $password->password = $this->changeStatus->password;
88
        $password->validate();
89
    }
90
91
    /**
92
     * @return void
93
     * @throws \InvalidArgumentException
94
     */
95
    public function status()
96
    {
97
        $status = $this->changeStatus->status;
98
        if (empty($status) || !is_string($status)) {
99
            throw new \InvalidArgumentException('status should be a string');
100
        }
101
102
        if (!in_array($status, $this->statuses)) {
103
            throw new \InvalidArgumentException('this status is not valid');
104
        }
105
    }
106
107
    /**
108
     * @return void
109
     * @throws \InvalidArgumentException
110
     */
111
    public function updateCardBinded()
112
    {
113
        $updateCardBinded = $this->changeStatus->updateCardBinded;
114
        if (!is_bool($updateCardBinded)) {
115
            throw new \InvalidArgumentException('update card binded should be a boolean');
116
        }
117
    }
118
}
119