package io.monokkel.actors; import akka.actor.Props; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Lists; import io.monokkel.core.DataValidator; import io.monokkel.domain.PageData; import io.monokkel.messages.IndexValidatedDocument; import io.monokkel.messages.ValidatePageData; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.mockito.internal.util.collections.Sets; import scala.concurrent.duration.Duration; import java.util.ArrayList; import static akka.testkit.JavaTestKit.duration; import static java.lang.Thread.sleep; import static org.junit.Assert.*; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; public class DataValidatorActorTest extends ActorTest{ private DataValidator mockedDataValidator; @Before public void before() { mockedDataValidator = Mockito.mock(DataValidator.class); super.before(); } @Test public void onReceive_withValidatePageData_expectMockedDataValidatorToBeCalled() throws Exception { PageData pageData = new PageData(Sets.newSet(""),"",1L,"","","", ImmutableMap.of("", "")); subject.tell(new ValidatePageData(pageData),javaTestKit.getRef()); sleep(500L); verify(mockedDataValidator, times(1)).validate(pageData); } @Test public void onReceive_withValidatePageData_expectIndexValidatedDocumentToBeSent() throws Exception { PageData pageData = new PageData(Sets.newSet(""),"",1L,"","","", ImmutableMap.of("", "")); subject.tell(new ValidatePageData(pageData), javaTestKit.getRef()); final ArrayList<Object> objects = Lists.newArrayList(javaTestKit.receiveN(1, duration("1 second"))); assertTrue(objects.get(0) instanceof IndexValidatedDocument); } @Test public void onReceive_withValidatePageData_expectPageDataToBePassed() throws Exception { PageData pageData = new PageData(Sets.newSet(""),"",1L,"","","", ImmutableMap.of("", "")); subject.tell(new ValidatePageData(pageData), javaTestKit.getRef()); final ArrayList<Object> objects = Lists.newArrayList(javaTestKit.receiveN(1, duration("1 second"))); final IndexValidatedDocument message = (IndexValidatedDocument)objects.get(0); assertEquals(pageData,message.getPageData()); } @Override protected String getActorName() { return "dataValidator"; } @Override protected Props getActor() { return DataValidatorActor.props(mockedDataValidator); } }