Added project

This commit is contained in:
2023-06-11 00:29:45 +03:00
parent 35971990e6
commit 27cf303639
56 changed files with 4125 additions and 24 deletions

View File

@@ -0,0 +1,141 @@
package ru.resprojects.dfops.controller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlConfig;
import org.springframework.test.context.junit4.SpringRunner;
import ru.resprojects.dfops.dto.ResponseDto;
import ru.resprojects.dfops.dto.account.AccountDto;
import ru.resprojects.dfops.exception.ResourceNotFoundException;
import ru.resprojects.dfops.model.Account;
import ru.resprojects.dfops.model.Employee;
import ru.resprojects.dfops.service.AccountService;
import ru.resprojects.dfops.service.EmployeeService;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles(profiles = {"test"})
@Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
scripts = {"classpath:schema-h2.sql", "classpath:data-h2.sql"},
config = @SqlConfig(encoding = "UTF-8"))
public class AccountControllerTest {
@Autowired
private TestRestTemplate restTemplate;
@Autowired
private AccountService accountService;
@Autowired
private EmployeeService employeeService;
@Test
public void whenRequestGetAllAccountsThenReturnStatus200AndNotEmptyAccountElementList() {
ParameterizedTypeReference<ResponseDto<Account>> responseType = new ParameterizedTypeReference<>() { };
ResponseEntity<ResponseDto<Account>> response = restTemplate.exchange("/rest/v1/account/5000", HttpMethod.GET, null, responseType);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isNotNull();
assertThat(response.getBody().getElements()).isNotEmpty();
}
@Test
public void whenRequestGetAllAccountsForEmployeeIdWithoutAccountsThenReturnStatus204() {
Employee employee = employeeService.create(new Employee("Alex", "alex@example.com"));
ParameterizedTypeReference<ResponseDto<Account>> responseType = new ParameterizedTypeReference<>() { };
ResponseEntity<ResponseDto<Account>> response = restTemplate.exchange("/rest/v1/account/" + employee.getId(), HttpMethod.GET, null, responseType);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NO_CONTENT);
}
@Test
public void whenRequestGetAllAccountsWithIncorrectEmployeeIdThenReturnStatus404() {
ParameterizedTypeReference<ResponseDto<Account>> responseType = new ParameterizedTypeReference<>() { };
ResponseEntity<ResponseDto<Account>> response = restTemplate.exchange("/rest/v1/account/1", HttpMethod.GET, null, responseType);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
public void whenRequestCreateAccountThenReturnStatus200AccountWithId() {
AccountDto accountDto = new AccountDto(5000L, "1234");
ResponseEntity<Account> response = restTemplate.postForEntity("/rest/v1/account/create", accountDto, Account.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isNotNull();
assertThat(response.getBody().getId()).isNotNull();
}
@Test
public void whenRequestCreateAccountWithIncorrectEmployeeIdThenReturnStatus404() {
AccountDto accountDto = new AccountDto(1L, "1234");
ResponseEntity<Account> response = restTemplate.postForEntity("/rest/v1/account/create", accountDto, Account.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test
public void whenRequestCreateAccountWithIncorrectBankAccountThenReturnStatus400() {
AccountDto accountDto = new AccountDto(5000L, null);
ResponseEntity<Account> response = restTemplate.postForEntity("/rest/v1/account/create", accountDto, Account.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST);
}
@Test
public void whenRequestCreateAccountWithExistentBankAccountThenReturnStatus409() {
AccountDto accountDto = new AccountDto(5000L, "4154014152522741");
ResponseEntity<Account> response = restTemplate.postForEntity("/rest/v1/account/create", accountDto, Account.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.CONFLICT);
}
@Test
public void whenRequestAccountByIdThenReturnStatus200AndAccount() {
ResponseEntity<Account> response = restTemplate.getForEntity("/rest/v1/account/get/5002", Account.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(response.getBody()).isNotNull();
}
@Test
public void whenTryRequestNonexistentAccountThenReturnStatus404() {
ResponseEntity<Account> response = restTemplate.getForEntity("/rest/v1/account/get/1010", Account.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
@Test(expected = ResourceNotFoundException.class)
public void whenRequestDeleteAccountByIdThenDeleteAccount() {
restTemplate.delete("/rest/v1/account/5002");
accountService.get(5002);
}
@Test
public void whenTryRequestDeleteAccountWithIncorrectIdThenReturnStatus404() {
ResponseEntity<Void> response = restTemplate.exchange("/rest/v1/account/1010", HttpMethod.DELETE, null, Void.class);
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
}