package org.springframework.data.simpledb.exception;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import org.hamcrest.core.StringContains;
import org.junit.Test;
import org.springframework.dao.*;
import org.springframework.data.mapping.model.MappingException;
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.services.cloudwatch.model.ResourceNotFoundException;
import com.amazonaws.services.simpledb.model.*;
public class SimpleDbExceptionTranslatorTest {
private final SimpleDbExceptionTranslator translator = SimpleDbExceptionTranslator.getTranslatorInstance();
@Test
public void translateExceptionIfPossible_should_translate_DuplicateItemNameException_into_DuplicateKeyException() {
DuplicateItemNameException duplicateItemException = new DuplicateItemNameException("Duplicate Item");
DataAccessException dataAccessException = translator.translateExceptionIfPossible(duplicateItemException);
assertThat(dataAccessException, is(instanceOf(DuplicateKeyException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(), StringContains.containsString("Duplicate Item"));
}
@Test
public void translateExceptionIfPossible_should_translate_AttributeDoesNotExistException_into_EmptyResultDataAccessException() {
AttributeDoesNotExistException attributeDoesNotExistException = new AttributeDoesNotExistException(
"Attribute does not exist");
DataAccessException dataAccessException = translator
.translateExceptionIfPossible(attributeDoesNotExistException);
assertThat(dataAccessException, is(instanceOf(EmptyResultDataAccessException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(), is("Attribute does not exist"));
}
@Test
public void translateExceptionIfPossible_should_translate_ResourceNotFoundException_into_DataRetrievalFailureException() {
ResourceNotFoundException resourceNotFoundException = new ResourceNotFoundException("Resource Not Found");
DataAccessException dataAccessException = translator.translateExceptionIfPossible(resourceNotFoundException);
assertThat(dataAccessException, is(instanceOf(DataRetrievalFailureException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(), StringContains.containsString("Resource Not Found"));
}
@Test
public void translateExceptionIfPossible_should_translate_InvalidParameterValueException_into_InvalidDataAccessResourceUsageException() {
InvalidParameterValueException invalidParameterValueException = new InvalidParameterValueException(
"Invalid Parameter");
DataAccessException dataAccessException = translator
.translateExceptionIfPossible(invalidParameterValueException);
assertThat(dataAccessException, is(instanceOf(InvalidDataAccessResourceUsageException.class)));
assertThat(invalidParameterValueException, is(notNullValue()));
assertThat(invalidParameterValueException.getLocalizedMessage(), is("Invalid Parameter"));
}
@Test
public void translateExceptionIfPossible_should_translate_NoSuchDomainException_into_EmptyResultDataAccessException() {
NoSuchDomainException noSuchDomainException = new NoSuchDomainException("No such domain");
DataAccessException dataAccessException = translator.translateExceptionIfPossible(noSuchDomainException);
assertThat(dataAccessException, is(instanceOf(EmptyResultDataAccessException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(), is("No such domain"));
}
@Test
public void translateExceptionIfPossible_should_translate_NumberDomainsExceededException_into_DataIntegrityViolationException() {
NumberDomainsExceededException numberDomainsExceededException = new NumberDomainsExceededException(
"Invalid domain number");
DataAccessException dataAccessException = translator
.translateExceptionIfPossible(numberDomainsExceededException);
assertThat(dataAccessException, is(instanceOf(DataIntegrityViolationException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(), StringContains.containsString("Invalid domain number"));
}
@Test
public void translateExceptionIfPossible_should_translate_InvalidNextTokenException_into_InvalidDataAccessApiUsageException() {
InvalidNextTokenException invalidNextTokenException = new InvalidNextTokenException("Invalid Token");
DataAccessException dataAccessException = translator.translateExceptionIfPossible(invalidNextTokenException);
assertThat(dataAccessException, is(instanceOf(InvalidDataAccessApiUsageException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(), StringContains.containsString("Invalid Token"));
}
@Test
public void translateExceptionIfPossible_should_translate_AmazonServiceException_into_DataAccessResourceFailureException() {
AmazonServiceException amazonServiceException = new AmazonServiceException("Amazon internal exception");
DataAccessException dataAccessException = translator.translateExceptionIfPossible(amazonServiceException);
assertThat(dataAccessException, is(instanceOf(DataAccessResourceFailureException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(),
StringContains.containsString("Amazon internal exception"));
}
@Test
public void translateExceptionIfPossible_should_translate_AmazonClientException_into_UncategorizedSpringDaoException() {
AmazonClientException amazonClientException = new AmazonClientException("Amazon internal client exception");
DataAccessException dataAccessException = translator.translateExceptionIfPossible(amazonClientException);
assertThat(dataAccessException, is(instanceOf(UncategorizedSpringDaoException.class)));
assertThat(dataAccessException, is(notNullValue()));
assertThat(dataAccessException.getLocalizedMessage(),
StringContains.containsString("Amazon internal client exception"));
}
@Test
public void translateExceptionIfPossible_should_not_interpret_non_translated_exception_like_mapping_exceptions() {
MappingException mappingException = new MappingException("Invalid Query");
DataAccessException dataAccessException = translator.translateExceptionIfPossible(mappingException);
assertThat(dataAccessException, is(nullValue()));
}
}