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);
}
}