‼️ Executar projeto
- Clone o repositório
- Use o comando:
git clone git@github.com:Mathluiz23/life-bank-auth.git
. - Entre na pasta do repositório que você acabou de clonar:
cd life-bank-auth
- Instale as dependências
- Entre na pasta
src/
. - Execute o comando:
dotnet restore
.
🛠 Testes
Para executar os testes com o .NET, execute o comando dentro do diretório do seu projeto src/<project>
ou de seus testes src/<project>.Test
!
dotnet test
Para executar um teste específico, basta executar o comando dotnet test --filter Name~TestMethod1
.
O projeto Life Bank
, consiste em uma aplicação de um banco digital. Onde foi realizada uma WEB API
que possui algumas rotas com autorização, outras com autorização baseada em Claims
e também rotas anônimas.
A autenticação é realizada utilizando o método JWT
, um Token que retornará para realização de requisições futuras com autorizações.
Foram adicionadas algumas configurações necessárias para trabalhar com autenticação e autorização na aplicação
Os pacotes estão inclusos no arquivo de configuração de projeto no diretório life-bank-auth
.
life-bank-auth.csproj
:
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.6" />
Para utilização desses processos, também foram realizadas configurações na classe Program.cs
.
- Preenchimento do segredo
JWT
para preenchimento da chaveSignature
. - Comando para uso de Autenticação.
- Comando para uso de Autorização.
Implementado função Generate() da classe TokenGenerator
Criado gerador de Token na pasta Services, com uma classe de responsabilidade única denominada TokenGenerator.cs.
Criado a função Generate()
, que vai gerar um Token JWT e retornar um valor do tipo string, o Token.
Implementado função AddClaims() da classe TokenGenerator
Quando criado o Token, foi necessário o preenchimento das Claims
na propriedade Subject, onde existe a função AddClaims()
, onde o objeto da pessoa cliente é passado como parâmetro.
Campos utilizados para preenchimento das Claims
: Name, Currency e ClientType.
Os valores de Claim
recebem uma string
, vindo dos valores do Client
ClientType
foi realizada a lógica de que:
se o valor da propriedade booleana do objeto Client
denominada IsCompany
for verdadeira, o valor preenchido para a Claim
será uma string
de ClientTypeEnum.PessoaJuridica
. Se não, será ClientTypeEnum.PessoaFisica
.
Testes Unitários para Serviço Gerador de Token
Utilizado a classe TestTokenGenerator.cs para os testes do serviço gerador de Token
Para garantir eficiência na geração de Token, foram criados testes unitários para função TestTokenGeneratorSuccess() e TestTokenGeneratorKeysSuccess()
.
A função TestTokenGeneratorSuccess()
irá apenas validar que o retorno do serviço gerador de Token não é vazio ou nulo.
A TestTokenGeneratorKeysSuccess()
verifica se o Token realmente respeita o formato JWT
.
Implementado função CreateAccountUntilFriday() da classe HomeController
No HomeController
, foi criada a função CreateAccountUntilFriday()
, que não precisa de autorização.
-
A rota dessa função é:
MessageForEveryone
. -
Retornará uma string com valor
Crie sua conta na Like Bank até sexta-feira!
.
Testes para Endpoint Anônimo
Na classe TestHomeController
, foi adicionado a função TestMessageForEveryoneSuccess()
.
- Criado a função
ApiGetRequest()
da classeWebApplication
para realização da requisiçãoHTTP
onde foi passado a rotaHome/MessageForEveryone
.
Implementado função PlataformWelcome() da classe ClientController
No controlador ClientController
, foi criado a função PlataformWelcome()
, que precisará de autorização.
-
A rota dessa função é:
PlataformWelcome
. -
Retornará uma string com valor
Que ótimo ter você aqui novamente, sinta-se a vontade!
.
Testes para Endpoint com Autorização
Na classe TestClientController
, criado a função TestPlataformWelcomeSuccess()
.
-
irá receber 3 parâmetros passados pelo atributo
[InlineData]
: Name, IsCompany e Currency. -
Verifica se monta um objeto de
Client
, utilizando parâmetros que foram informados. -
Irá enviar os dados para a geração de Token.
Teste de Falha em função TestPlataformWelcomeFail()
Na classe TestClientController
, criado a função TestPlataformWelcomeFail()
.
-
Informa o parâmetro utilizando o atributo
[InlineData]
: Token. -
O parâmetro passado é uma string aleatória para simular um Token Inválido.
Implementado função NewPromoAlert() da classe ClientController
No controlador ClientController
, criada função NewPromoAlert()
, que precisará de autorização.
-
A rota dessa função é:
NewPromoAlert
. -
Retornará uma string com valor
Aproveite a nova promoção da Life Bank agora mesmo!
. -
Tipo Get de requisição HTTP.
-
Autorização aplicando política
NewPromo
:
- A pessoa cliente deve ter como propriedade
Currency
a moedaReal
ouPeso
. Criado Enum(CurrencyEnum
) para essa propriedade. - A pessoa cliente deve ser uma
Pessoa Física
, criado o EnumClientTypeEnum
.
Testes para Endpoint com Autorização baseada em `Claims`
Na classe TestClientController
, criado a função TestNewPromoAlertSuccess()
.
-
Passados três parâmetros no atributo
[InlineData]
: Name, IsCompany e Currency. -
Nesse caso, os parâmetros passados devem seguir a política criada:
- O valor do campo
IsCompany
igual afalse
. - O valor de
Currency
igual aReal
ouPeso
.
- Irá montar objeto de
Client
de acordo com os parâmetros.
Teste de Falha em função TestNewPromoAlertFail()
Na classe TestClientController
, criado a função TestNewPromoAlertFail()
.
-
Passados três parâmetros no atributo
[InlineData]
: Name, IsCompany e Currency. -
Nesse caso, os parâmetros passados NÃO podem ser:
- O valor do campo
IsCompany
igual afalse
. - O valor de
Currency
igual aReal
ouPeso
.
- Irá montar objeto de
Client
de acordo com os parâmetros.