You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

49 lines
2.1 KiB

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()));
}
}