package rocks.inspectit.server.ci.event; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; import java.util.Collection; import java.util.Collections; import org.mockito.Mock; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import rocks.inspectit.shared.all.testbase.TestBase; import rocks.inspectit.shared.cs.ci.Profile; import rocks.inspectit.shared.cs.ci.assignment.AbstractClassSensorAssignment; import rocks.inspectit.shared.cs.ci.profile.data.SensorAssignmentProfileData; /** * @author Ivan Senic * */ @SuppressWarnings("PMD") public class ProfileUpdateEventTest extends TestBase { static final String ID = ""; @Mock Profile old; @Mock Profile updated; @Mock SensorAssignmentProfileData oldProfileData; @Mock SensorAssignmentProfileData updatedProfileData; @Mock AbstractClassSensorAssignment<?> assignment; @BeforeMethod public void setupProfileData() { doReturn(oldProfileData).when(old).getProfileData(); doReturn(updatedProfileData).when(updated).getProfileData(); when(oldProfileData.isOfType(SensorAssignmentProfileData.class)).thenReturn(true); when(updatedProfileData.isOfType(SensorAssignmentProfileData.class)).thenReturn(true); } public static class Constructor extends ProfileUpdateEventTest { @Test(expectedExceptions = IllegalArgumentException.class) public void idsNotMatching() { when(updated.getId()).thenReturn(ID); when(old.getId()).thenReturn("smth"); new ProfileUpdateEvent(this, old, updated); } } public static class IsProfileDeactivated extends ProfileUpdateEventTest { @Test public void deactivated() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(false); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); boolean deactivated = event.isProfileDeactivated(); assertThat(deactivated, is(true)); } @Test public void wasNotActive() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(old.isActive()).thenReturn(false); when(updated.isActive()).thenReturn(false); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); boolean deactivated = event.isProfileDeactivated(); assertThat(deactivated, is(false)); } @Test public void stillActive() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); boolean deactivated = event.isProfileDeactivated(); assertThat(deactivated, is(false)); } } public static class IsProfileActivated extends ProfileUpdateEventTest { @Test public void activated() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(old.isActive()).thenReturn(false); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); boolean activated = event.isProfileActivated(); assertThat(activated, is(true)); } @Test public void wasActive() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); boolean activated = event.isProfileActivated(); assertThat(activated, is(false)); } @Test public void stillNotActive() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(old.isActive()).thenReturn(false); when(updated.isActive()).thenReturn(false); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); boolean activated = event.isProfileActivated(); assertThat(activated, is(false)); } } public static class GetRemovedSensorAssignments extends ProfileUpdateEventTest { @Test public void removedAssignments() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.singletonList(assignment)).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.<AbstractClassSensorAssignment<?>> emptyList()).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> removed = event.getRemovedSensorAssignments(); assertThat(removed, hasSize(1)); assertThat(removed, hasItem(assignment)); } @Test public void noChange() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.singletonList(assignment)).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.singletonList(assignment)).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> removed = event.getRemovedSensorAssignments(); assertThat(removed, is(empty())); } @Test public void deactivated() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.singletonList(assignment)).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.singletonList(assignment)).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(false); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> removed = event.getRemovedSensorAssignments(); assertThat(removed, hasSize(1)); assertThat(removed, hasItem(assignment)); } @Test public void activated() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.singletonList(assignment)).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.singletonList(assignment)).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(false); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> removed = event.getRemovedSensorAssignments(); assertThat(removed, is(empty())); } @Test public void wrongProfileData() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(oldProfileData.isOfType(SensorAssignmentProfileData.class)).thenReturn(false); when(updatedProfileData.isOfType(SensorAssignmentProfileData.class)).thenReturn(false); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> removed = event.getRemovedSensorAssignments(); assertThat(removed, is(empty())); } } public static class GetAddedSensorAssignments extends ProfileUpdateEventTest { @Test public void addedAssignments() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.<AbstractClassSensorAssignment<?>> emptyList()).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.singletonList(assignment)).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> added = event.getAddedSensorAssignments(); assertThat(added, hasSize(1)); assertThat(added, hasItem(assignment)); } @Test public void noChange() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.singletonList(assignment)).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.singletonList(assignment)).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> added = event.getAddedSensorAssignments(); assertThat(added, is(empty())); } @Test public void deactivated() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.singletonList(assignment)).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.singletonList(assignment)).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(false); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> added = event.getAddedSensorAssignments(); assertThat(added, is(empty())); } @Test public void activated() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); doReturn(Collections.singletonList(assignment)).when(oldProfileData).getData(SensorAssignmentProfileData.class); doReturn(Collections.singletonList(assignment)).when(updatedProfileData).getData(SensorAssignmentProfileData.class); when(old.isActive()).thenReturn(false); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> added = event.getAddedSensorAssignments(); assertThat(added, hasSize(1)); assertThat(added, hasItem(assignment)); } @Test public void wrongProfileData() { when(old.getId()).thenReturn(ID); when(updated.getId()).thenReturn(ID); when(oldProfileData.isOfType(SensorAssignmentProfileData.class)).thenReturn(false); when(updatedProfileData.isOfType(SensorAssignmentProfileData.class)).thenReturn(false); when(old.isActive()).thenReturn(true); when(updated.isActive()).thenReturn(true); ProfileUpdateEvent event = new ProfileUpdateEvent(this, old, updated); Collection<AbstractClassSensorAssignment<?>> added = event.getAddedSensorAssignments(); assertThat(added, is(empty())); } } }