package com.artemzin.qualitymatters.performance; import org.junit.Before; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verifyZeroInteractions; public class NoOpAsyncJobsObserverTest { private AsyncJobsObserver asyncJobsObserver; @Before public void beforeEachTest() { asyncJobsObserver = new NoOpAsyncJobsObserver(); } @Test public void addListener_shouldNoOp() { AsyncJobsObserver.Listener listener = mock(AsyncJobsObserver.Listener.class); asyncJobsObserver.addListener(listener); verifyZeroInteractions(listener); } @Test public void removeListener_shouldNoOp() { AsyncJobsObserver.Listener listener = mock(AsyncJobsObserver.Listener.class); asyncJobsObserver.removeListener(listener); verifyZeroInteractions(listener); } @Test public void numberOfRunningAsyncJobs_shouldBeZeroByDefault() { assertThat(asyncJobsObserver.numberOfRunningAsyncJobs()).isEqualTo(0); } @Test public void numberOfRunningAsyncJobs_shouldBeZeroEvenIfSomethingRunning() { AsyncJob asyncJob = asyncJobsObserver.asyncJobStarted("test job"); assertThat(asyncJobsObserver.numberOfRunningAsyncJobs()).isEqualTo(0); asyncJobsObserver.asyncJobFinished(asyncJob); assertThat(asyncJobsObserver.numberOfRunningAsyncJobs()).isEqualTo(0); } @Test public void asyncJobStarted_shouldReturnSomeAsyncJob() { assertThat(asyncJobsObserver.asyncJobStarted("test job")).isNotNull(); } @Test public void asyncJobStarted_shouldNotNotifyListeners() { AsyncJobsObserver.Listener listener = mock(AsyncJobsObserver.Listener.class); asyncJobsObserver.addListener(listener); asyncJobsObserver.asyncJobStarted("test job"); verifyZeroInteractions(listener); } @Test public void asyncJobFinished_shouldNotComplaintAboutUnknownAsyncJob() { AsyncJobsObserver.Listener listener = mock(AsyncJobsObserver.Listener.class); asyncJobsObserver.removeListener(listener); // No exceptions expected. verifyZeroInteractions(listener); } @Test public void asyncJobFinished_shouldNoOpForKnownListener() { AsyncJobsObserver.Listener listener = mock(AsyncJobsObserver.Listener.class); asyncJobsObserver.addListener(listener); asyncJobsObserver.removeListener(listener); verifyZeroInteractions(listener); } @Test public void asyncJobFinished_shouldNotNotifyListeners() { AsyncJobsObserver.Listener listener = mock(AsyncJobsObserver.Listener.class); asyncJobsObserver.addListener(listener); AsyncJob asyncJob = asyncJobsObserver.asyncJobStarted("test job"); asyncJobsObserver.asyncJobFinished(asyncJob); verifyZeroInteractions(listener); } }