package rocks.inspectit.shared.cs.ci.business.impl;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import org.mockito.InjectMocks;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import rocks.inspectit.shared.all.exception.BusinessException;
import rocks.inspectit.shared.all.testbase.TestBase;
/**
* @author Alexander Wert
*
*/
@SuppressWarnings("PMD")
public class ApplicationDefinitionTest extends TestBase {
@InjectMocks
ApplicationDefinition applicationDefinition;
final int firstBusinessTxDefinitionId = 10;
final int secondBusinessTxDefinitionId = 20;
BusinessTransactionDefinition firstBusinessTxDefinition;
BusinessTransactionDefinition secondBusinessTxDefinition;
@BeforeMethod
public void init() {
firstBusinessTxDefinition = new BusinessTransactionDefinition(firstBusinessTxDefinitionId, "firstBusinessTxDefinition", null);
secondBusinessTxDefinition = new BusinessTransactionDefinition(secondBusinessTxDefinitionId, "secondBusinessTxDefinition", null);
}
/**
* Test
* {@link ApplicationDefinition#addBusinessTransactionDefinition(BusinessTransactionDefinition)}
* and
* {@link ApplicationDefinition#addBusinessTransactionDefinition(BusinessTransactionDefinition, int)}
* methods.
*/
public static class AddBusinessTransactionDefinition extends ApplicationDefinitionTest {
@Test
public void addAtTheEnd() throws BusinessException {
// contains default application
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(1));
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(2));
applicationDefinition.addBusinessTransactionDefinition(secondBusinessTxDefinition);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
}
@Test
public void addAtPosition() throws BusinessException {
// contains default application
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(1));
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(2));
applicationDefinition.addBusinessTransactionDefinition(secondBusinessTxDefinition, 0);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(secondBusinessTxDefinition));
}
@Test(expectedExceptions = { BusinessException.class })
public void addAtNegative() throws BusinessException {
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition, -1);
}
@Test(expectedExceptions = { BusinessException.class })
public void addAtInvalidGreatIndex() throws BusinessException {
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition, applicationDefinition.getBusinessTransactionDefinitions().size());
}
@Test(expectedExceptions = { BusinessException.class })
public void addNull() throws BusinessException {
applicationDefinition.addBusinessTransactionDefinition(null);
}
@Test(expectedExceptions = { BusinessException.class })
public void addDuplicate() throws BusinessException {
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition);
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition);
}
}
/**
* Test {@link ApplicationDefinition#getBusinessTransactionDefinition(int)} and
* {@link ApplicationDefinition#getBusinessTransactionDefinition(int)} methods.
*/
public static class GetApplication extends ApplicationDefinitionTest {
@BeforeMethod
public void initialize() throws BusinessException {
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition);
applicationDefinition.addBusinessTransactionDefinition(secondBusinessTxDefinition);
}
@Test
public void getBusinessTransactionDefitions() {
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasItem(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasItem(secondBusinessTxDefinition));
}
@Test
public void getBusinessTransactionsForIds() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinition(firstBusinessTxDefinitionId), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinition(secondBusinessTxDefinitionId), is(secondBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinition(BusinessTransactionDefinition.DEFAULT_ID), is(BusinessTransactionDefinition.DEFAULT_BUSINESS_TRANSACTION_DEFINITION));
}
@Test(expectedExceptions = { BusinessException.class })
public void getInvalidApplication() throws BusinessException {
applicationDefinition.getBusinessTransactionDefinition(1000);
}
}
/**
* Test
* {@link ApplicationDefinition#moveBusinessTransactionDefinition(BusinessTransactionDefinition, int)}
* method.
*/
public static class MoveApplication extends ApplicationDefinitionTest {
@BeforeMethod
public void initialize() throws BusinessException {
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition);
applicationDefinition.addBusinessTransactionDefinition(secondBusinessTxDefinition);
}
@Test
public void moveBusinessTransactionDefition() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
applicationDefinition.moveBusinessTransactionDefinition(secondBusinessTxDefinition, 0);
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(secondBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(firstBusinessTxDefinition));
applicationDefinition.moveBusinessTransactionDefinition(secondBusinessTxDefinition, 1);
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
}
@Test
public void moveToSameIndex() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
applicationDefinition.moveBusinessTransactionDefinition(secondBusinessTxDefinition, 1);
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
}
@Test(expectedExceptions = { BusinessException.class })
public void moveToFar() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
applicationDefinition.moveBusinessTransactionDefinition(secondBusinessTxDefinition, 2);
}
@Test(expectedExceptions = { BusinessException.class })
public void moveToNegativeIndex() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
applicationDefinition.moveBusinessTransactionDefinition(secondBusinessTxDefinition, -1);
}
@Test(expectedExceptions = { BusinessException.class })
public void moveNull() throws BusinessException {
applicationDefinition.moveBusinessTransactionDefinition(null, 0);
}
@Test(expectedExceptions = { BusinessException.class })
public void moveUnknown() throws BusinessException {
applicationDefinition.moveBusinessTransactionDefinition(new BusinessTransactionDefinition(123456789, "unknown", null), 0);
}
}
/**
* Test
* {@link ApplicationDefinition#deleteBusinessTransactionDefinition(BusinessTransactionDefinition)}
* method.
*/
public static class DeleteApplication extends ApplicationDefinitionTest {
@BeforeMethod
public void initialize() throws BusinessException {
applicationDefinition.addBusinessTransactionDefinition(firstBusinessTxDefinition);
applicationDefinition.addBusinessTransactionDefinition(secondBusinessTxDefinition);
}
@Test
public void deleteBusinessTransactionDefinition() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(secondBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(2), is(BusinessTransactionDefinition.DEFAULT_BUSINESS_TRANSACTION_DEFINITION));
applicationDefinition.deleteBusinessTransactionDefinition(secondBusinessTxDefinition);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(2));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(firstBusinessTxDefinition));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(1), is(BusinessTransactionDefinition.DEFAULT_BUSINESS_TRANSACTION_DEFINITION));
applicationDefinition.deleteBusinessTransactionDefinition(firstBusinessTxDefinition);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(1));
assertThat(applicationDefinition.getBusinessTransactionDefinitions().get(0), is(BusinessTransactionDefinition.DEFAULT_BUSINESS_TRANSACTION_DEFINITION));
}
@Test
public void deleteNull() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
applicationDefinition.deleteBusinessTransactionDefinition(null);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
}
@Test
public void deleteUnknown() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
applicationDefinition.deleteBusinessTransactionDefinition(new BusinessTransactionDefinition(123456789, "unknown", null));
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
}
@Test
public void deleteDefaultBusinessTransaction() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
applicationDefinition.deleteBusinessTransactionDefinition(BusinessTransactionDefinition.DEFAULT_BUSINESS_TRANSACTION_DEFINITION);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
}
@Test
public void deleteTwice() throws BusinessException {
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(3));
applicationDefinition.deleteBusinessTransactionDefinition(firstBusinessTxDefinition);
applicationDefinition.deleteBusinessTransactionDefinition(firstBusinessTxDefinition);
assertThat(applicationDefinition.getBusinessTransactionDefinitions(), hasSize(2));
}
}
}