Skip to content

Commit

Permalink
Merge pull request #101 from alexeiak/tests_branch
Browse files Browse the repository at this point in the history
test: [#100] add tests for all TODO in repository/WorkspaceRepository
  • Loading branch information
Malcom1986 committed Aug 19, 2022
2 parents 702ff17 + 5db60a5 commit 479503e
Show file tree
Hide file tree
Showing 12 changed files with 570 additions and 358 deletions.
Expand Up @@ -12,15 +12,12 @@ public interface WorkspaceRepository extends JpaRepository<Workspace, Long> {

Optional<Workspace> getWorkspaceByName(String name);

//TODO add tests
Optional<SecuredWorkspace> getSecuredWorkspaceByName(String name);

boolean existsWorkspaceByName(String name);

//TODO add tests
Integer deleteWorkspaceByName(String name);

//TODO add tests
@Modifying
@Query("update Workspace set apiAccessToken = :token where name = :wksName")
Integer updateApiAccessTokenByWorkspaceName(String wksName, UUID token);
Expand Down
Expand Up @@ -13,7 +13,6 @@

import static java.util.Objects.requireNonNull;

//TODO add tests
@Service
@RequiredArgsConstructor
public class WorkspaceService {
Expand Down
Expand Up @@ -6,7 +6,6 @@
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

//TODO add tests
@Component
public class TypoToTypoInfoConverter implements Converter<Typo, TypoInfo> {

Expand Down
Expand Up @@ -6,7 +6,6 @@
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

//TODO add tests
@Component
public class WorkspaceToWorkspaceInfo implements Converter<Workspace, WorkspaceInfo> {

Expand Down
Expand Up @@ -28,7 +28,6 @@
import static org.springframework.data.domain.Sort.Direction.*;
import static org.springframework.data.domain.Sort.Order.asc;

//TODO add tests
@Slf4j
@Controller
@RequestMapping(WORKSPACE + WKS_NAME_PATH)
Expand Down Expand Up @@ -129,6 +128,7 @@ public String getWorkspaceUpdatePage(Model model, @PathVariable String wksName)
return WKS_UPDATE_TEMPLATE;
}

//TODO add tests
@PutMapping(UPDATE)
public String putWorkspaceUpdate(Model model,
@PathVariable String wksName,
Expand Down
Expand Up @@ -5,6 +5,7 @@
import com.github.database.rider.spring.api.DBRider;
import io.hexlet.typoreporter.config.audit.AuditConfiguration;
import io.hexlet.typoreporter.domain.workspace.Workspace;
import io.hexlet.typoreporter.security.model.SecuredWorkspace;
import io.hexlet.typoreporter.test.DBUnitEnumPostgres;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.*;
Expand All @@ -17,6 +18,9 @@
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.*;

import java.util.Optional;
import java.util.UUID;

import static com.github.database.rider.core.api.configuration.Orthography.LOWERCASE;
import static io.hexlet.typoreporter.test.Constraints.POSTGRES_IMAGE;
import static org.assertj.core.api.Assertions.assertThat;
Expand All @@ -30,6 +34,7 @@
@DataSet(value = {"workspaces.yml", "typos.yml"})
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
class WorkspaceRepositoryIT {
final Integer SUCCESSFUL_CODE = 1;

@Container
public static PostgreSQLContainer<?> postgreSQLContainer = new PostgreSQLContainer<>(POSTGRES_IMAGE)
Expand Down Expand Up @@ -73,4 +78,33 @@ void existsWorkspaceByName(final String wksName) {
void existsWorkspaceByNameNotExist(final String wksName) {
assertThat(workspaceRepository.existsWorkspaceByName(wksName)).isFalse();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void deleteWorkspaceByNameIsSuccessful(final String wksName) {
assertThat(workspaceRepository.deleteWorkspaceByName(wksName)).isEqualTo(SUCCESSFUL_CODE);
assertThat(workspaceRepository.existsWorkspaceByName(wksName)).isFalse();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void getSecuredWorkspaceByNameIsSuccessful(final String wksName) {
Optional<SecuredWorkspace> securedWorkspace = workspaceRepository.getSecuredWorkspaceByName(wksName);
String name = securedWorkspace.map(SecuredWorkspace::getUsername).orElse(null);

assertThat(name).isEqualTo(wksName);
assertThat(workspaceRepository.existsWorkspaceByName(wksName)).isTrue();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void updateApiAccessTokenByWorkspaceNameIsSuccessful(final String wksName) {
final UUID newToken = UUID.randomUUID();
assertThat(workspaceRepository.updateApiAccessTokenByWorkspaceName(wksName, newToken)).isEqualTo(SUCCESSFUL_CODE);

String newUuid = workspaceRepository.getWorkspaceByName(wksName)
.map(Workspace::getApiAccessToken)
.map(Object::toString).orElse(null);
assertThat(newUuid).isEqualTo(newToken.toString());
}
}
Expand Up @@ -3,17 +3,32 @@
import com.github.database.rider.core.api.configuration.DBUnit;
import com.github.database.rider.core.api.dataset.DataSet;
import com.github.database.rider.spring.api.DBRider;
import io.hexlet.typoreporter.domain.workspace.Workspace;
import io.hexlet.typoreporter.repository.WorkspaceRepository;
import io.hexlet.typoreporter.service.dto.workspace.CreateWorkspace;
import io.hexlet.typoreporter.service.dto.workspace.WorkspaceInfo;
import io.hexlet.typoreporter.test.DBUnitEnumPostgres;
import io.hexlet.typoreporter.web.exception.WorkspaceAlreadyExistException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.*;
import org.springframework.transaction.annotation.Transactional;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.*;

import java.util.Objects;
import java.util.UUID;

import static com.github.database.rider.core.api.configuration.Orthography.LOWERCASE;
import static io.hexlet.typoreporter.test.Constraints.POSTGRES_IMAGE;
import static io.hexlet.typoreporter.test.factory.EntitiesFactory.WORKSPACE_101_NAME;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
@Testcontainers
Expand All @@ -40,5 +55,81 @@ static void datasourceProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.password", postgreSQLContainer::getPassword);
registry.add("spring.datasource.username", postgreSQLContainer::getUsername);
}
//TODO add tests

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaces")
void getAllWorkspacesInfoIsSuccessful() {
WorkspaceInfo workspaceInfo = service.getAllWorkspacesInfo().stream()
.filter(wksInfo -> wksInfo.name().equals(WORKSPACE_101_NAME))
.findFirst().orElse(null);

assertThat(Objects.requireNonNull(workspaceInfo).createdDateAgo()).isNotEmpty();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void getWorkspaceInfoByNameIsSuccessful(final String wksName) {
WorkspaceInfo workspaceInfo = service.getWorkspaceInfoByName(wksName).orElse(null);
assertThat(workspaceInfo != null).isTrue();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void existsWorkspaceByNameIsSuccessful(final String wksName) {
assertThat(service.existsWorkspaceByName(wksName)).isTrue();
}

@Test
void createWorkspaceIsSuccessful() {
final var newWks = new CreateWorkspace("wks-name-1", "wks desc");
WorkspaceInfo workspaceInfo = service.createWorkspace(newWks);
assertThat(workspaceInfo.name()).isNotEmpty();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getCreateWorkspaces")
void createWorkspaceWithWorkspaceAlreadyExistException(CreateWorkspace createWks) {
Throwable thrown = assertThrows(WorkspaceAlreadyExistException.class, () -> {
service.createWorkspace(createWks);
});
assertNotNull(thrown.getMessage());
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void updateWorkspaceIsSuccessful(final String wksName) {
final var newWks = new CreateWorkspace("wks-name-1", "wks desc");
WorkspaceInfo workspaceInfo = service.updateWorkspace(newWks, "wks-test").orElse(null);
assertThat(Objects.requireNonNull(workspaceInfo).name()).isEqualTo(newWks.name());
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void deleteWorkspaceByNameIsSuccessful(final String wksName) {
final Integer successfulCode = 1;
assertThat(service.deleteWorkspaceByName(wksName)).isEqualTo(successfulCode);
assertThat(service.existsWorkspaceByName(wksName)).isFalse();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void getWorkspaceApiAccessTokenByNameIsSuccessful(final String wksName) {
UUID uuid = service.getWorkspaceApiAccessTokenByName(wksName).orElse(null);
assertThat(uuid != null).isTrue();
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void regenerateWorkspaceApiAccessTokenByNameIsSuccessful(final String wksName) {
UUID previousUuid = service.getWorkspaceApiAccessTokenByName(wksName).orElse(null);
UUID newUuid = service.regenerateWorkspaceApiAccessTokenByName(wksName).orElse(null);
assertThat(previousUuid).isNotEqualTo(newUuid);
}

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaceNamesExist")
void getWorkspaceByNameIsSuccessful(final String wksName) {
Workspace workspace = service.getWorkspaceByName(wksName).orElse(null);
assertThat(workspace != null).isTrue();
}
}
@@ -0,0 +1,20 @@
package io.hexlet.typoreporter.service.converter;

import io.hexlet.typoreporter.domain.typo.Typo;
import io.hexlet.typoreporter.service.dto.typo.TypoInfo;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.core.convert.converter.Converter;

import static io.hexlet.typoreporter.test.asserts.TypoInfoAssert.assertThat;

public class TypoToTypoInfoConverterTest {
private final Converter<Typo, TypoInfo> converter = new TypoToTypoInfoConverter();

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getTypos")
void requestToTypoInfo(final Typo typo) {
final var typoInfo = converter.convert(typo);
assertThat(typoInfo).isEqualsToTypoInfo(typo);
}
}
@@ -0,0 +1,22 @@
package io.hexlet.typoreporter.service.converter;

import io.hexlet.typoreporter.domain.workspace.Workspace;
import io.hexlet.typoreporter.service.dto.workspace.WorkspaceInfo;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.core.convert.converter.Converter;

import static org.assertj.core.api.Assertions.assertThat;

public class WorkspaceToWorkspaceInfoTest {
private final Converter<Workspace, WorkspaceInfo> converter = new WorkspaceToWorkspaceInfo();

@ParameterizedTest
@MethodSource("io.hexlet.typoreporter.test.factory.EntitiesFactory#getWorkspaces")
void requestWorkspaceToInfo(final Workspace workspace) {
final var workspaceInfo = converter.convert(workspace);
assertThat(workspaceInfo).usingRecursiveComparison()
.ignoringFields("createdBy", "createdDate", "createdDateAgo", "modifiedBy", "modifiedDate", "modifiedDateAgo")
.isEqualTo(workspace);
}
}
@@ -0,0 +1,25 @@
package io.hexlet.typoreporter.test.asserts;

import io.hexlet.typoreporter.domain.typo.Typo;
import io.hexlet.typoreporter.service.dto.typo.TypoInfo;
import org.assertj.core.api.ObjectAssert;

public class TypoInfoAssert extends ObjectAssert<TypoInfo> {

public TypoInfoAssert(TypoInfo typoInfo) {
super(typoInfo);
}

public static TypoInfoAssert assertThat(TypoInfo actual) {
return new TypoInfoAssert(actual);
}

public TypoInfoAssert isEqualsToTypoInfo(Typo expected) {
isNotNull();
assertThat(actual)
.usingRecursiveComparison()
.ignoringFields("typoStatusStr", "createdBy", "createdDateAgo", "createdDate", "modifiedBy", "modifiedDateAgo", "modifiedDate", "account")
.isEqualTo(expected);
return this;
}
}

0 comments on commit 479503e

Please sign in to comment.