package com.mydreamjob.phaseb; import com.mydreamjob.company.Company; import com.mydreamjob.company.VerifiedCompanyGuard; import com.mydreamjob.common.exception.BusinessException; import com.mydreamjob.common.exception.ErrorCode; import com.mydreamjob.common.exception.ErrorHttpStatusRegistry; import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; class VerifiedCompanyGuardTest { private final ErrorHttpStatusRegistry statuses = new ErrorHttpStatusRegistry(); @Test void verifiedCompanyPassesWithoutMutatingTheCompany() { Company company = Company.builder().id(41L).ownerUserId(72L).verified(true).build(); assertThat(VerifiedCompanyGuard.requireVerified(company)).isSameAs(company); assertThat(company.getVerified()).isTrue(); } @Test void unverifiedCompanyGetsOneStableForbiddenBusinessError() { for (Company company : new Company[]{ Company.builder().verified(false).build(), Company.builder().verified(null).build()}) { assertThatThrownBy(() -> VerifiedCompanyGuard.requireVerified(company)) .isInstanceOf(BusinessException.class) .satisfies(error -> { BusinessException business = (BusinessException) error; assertThat(business.getErrorCodeInt()).isEqualTo(ErrorCode.COMPANY_NOT_VERIFIED.getCode()); assertThat(business.getErrorMessage()).isEqualTo(ErrorCode.COMPANY_NOT_VERIFIED.getMessage()); assertThat(statuses.resolve(business.getErrorCodeInt())).isEqualTo(HttpStatus.FORBIDDEN); }); } } @Test void missingCompanyDoesNotBecomeVerified() { assertThatThrownBy(() -> VerifiedCompanyGuard.requireVerified(null)) .isInstanceOf(BusinessException.class) .satisfies(error -> assertThat(((BusinessException) error).getErrorCodeInt()) .isEqualTo(ErrorCode.COMPANY_NOT_FOUND.getCode())); } }