| 
<?php
 use App\Dominio\ObjetoValor\CNPJ;
 use App\Infraestrutura\Adaptadores\HTTP\ImplementacaoCurlClienteHTTP;
 use App\Infraestrutura\Adaptadores\Ambiente\ImplementacaoAmbienteArquivo;
 
 $CNPJ = CNPJ::gerar();
 
 global $email;
 global $senha1;
 global $oab;
 global $jwt;
 
 if(!is_file(__DIR__.'/../../../.env')) {
 return;
 }
 
 $email = 'meus-email-'.rand(str_repeat(1, 16), str_repeat(9, 16)).'@gmail.com';
 $senha1 = '0hHMaydana%';
 $oab = 'RS '.rand(str_repeat(1, 3), str_repeat(9, 3));
 $ambiente = new ImplementacaoAmbienteArquivo();
 $desenvolvimento = $ambiente->get('TEST_INTEGRATION_RUN');
 $jwt = '';
 
 if(!$desenvolvimento){
 // Não é ambiente de desenvolvimento, não permitir rodar os testes (pelo menos por enquanto.)
 return;
 }
 
 beforeEach(function() {
 $this->clientHTTP = new ImplementacaoCurlClienteHTTP([
 'baseURL' => 'http://localhost:8052'
 ]);
 });
 
 test("Deverá criar uma empresa com o E-mail: $email CNPJ: $CNPJ e senha: $senha1", function() use ($CNPJ, $email, $senha1, $oab){
 
 $resposta = $this->clientHTTP->post('/empresa', [
 'nome_fantasia' => 'Empresa Teste',
 'numero_documento' => $CNPJ,
 'oab' => $oab,
 'responsavel_nome_completo' => 'Matheus Maydana',
 'responsavel_email' => $email,
 'responsavel_senha' => $senha1
 ]);
 
 expect($resposta->code)->toBe(201)
 ->and($resposta->body)->toBeArray()
 ->and($resposta->body['message'])->toBe('Empresa cadastrada com sucesso');
 })
 ->group('Integracao');
 
 
 test('Deverá já existir uma empresa com esse documento', function() use ($CNPJ, $email, $senha1, $oab){
 
 $resposta = $this->clientHTTP->post('/empresa', [
 'nome_fantasia' => 'Empresa Teste',
 'numero_documento' => $CNPJ,
 'oab' => $oab,
 'responsavel_nome_completo' => 'Matheus Maydana',
 'responsavel_email' => $email,
 'responsavel_senha' => $senha1
 ]);
 
 expect($resposta->code)->toBe(400)
 ->and($resposta->body)->toBeArray()
 ->and($resposta->body['message'])->toBe('Já existe uma empresa com número do documento informado. ('.(new CNPJ($CNPJ))->get().')');
 })
 ->group('Integracao');
 
 test('Deverá gerar um acess Token - Login efetuado com sucesso', function() use ($email, $senha1, &$jwt){
 
 $resposta = $this->clientHTTP->post('/login', [
 "email" => $email,
 "senha" => $senha1
 ]);
 
 $jwt = $resposta->body['access_token'];
 
 expect($resposta->code)->toBe(201)
 ->and($resposta->body)->toBeArray()
 ->and($resposta->body['access_token'])->toBeString();
 })
 ->group('Integracao', 'Processos', 'Clientes');
 
 
 test('Deverá falhar o login - Login e-mail ou senha inválido', function() use ($email, $senha1){
 
 $resposta = $this->clientHTTP->post('/login', [
 "email" => $email,
 "senha" => "{$senha1}42"
 ]);
 
 expect($resposta->code)->toBe(401)
 ->and($resposta->body)->toBeArray()
 ->and($resposta->body['message'])->toBeString()
 ->and($resposta->body['message'])->toBe('E-mail ou senha inválidos.');
 })
 ->group('Integracao');
 
 test('Deverá recuperar a senha da conta', function() use ($email){
 
 $resposta = $this->clientHTTP->post('/recuperar', [
 "email" => $email
 ]);
 
 expect($resposta->code)->toBe(201)
 ->and($resposta->body)->toBeArray()
 ->and($resposta->body['message'])->toBeString()
 ->and($resposta->body['message'])->toBe('Enviamos um e-mail com as instruções para recuperação de senha.');
 })
 ->group('Integracao');
 
 test('Deverá acusar um erro dizendo que já foi feito a solicitação de recuperação e foi enviado por e-mail', function() use ($email){
 
 $resposta = $this->clientHTTP->post('/recuperar', [
 "email" => $email
 ]);
 
 expect($resposta->code)->toBe(400)
 ->and($resposta->body)->toBeArray()
 ->and($resposta->body['message'])->toBeString()
 ->and($resposta->body['message'])->toBe('Já enviamos para seu e-mail um token para recuperação.');
 })
 ->group('Integracao');
 |