package eu.dnetlib.iis.wf.importer.content.approver;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
/**
* @author mhorst
*
*/
@RunWith(MockitoJUnitRunner.class)
public class ComplexContentApproverTest {
@Mock
private ContentApprover approver1;
@Mock
private ContentApprover approver2;
@Captor
private ArgumentCaptor<byte[]> approver1Captor;
@Captor
private ArgumentCaptor<byte[]> approver2Captor;
private final byte[] content = "content".getBytes();
// ----------------------------- TESTS ----------------------------
@Test
public void testApproveEmpty() throws Exception {
// given
ComplexContentApprover complexApprover = new ComplexContentApprover();
// execute & assert
assertTrue(complexApprover.approve(content));
}
@Test
public void testApprove() throws Exception {
// given
ComplexContentApprover complexApprover = new ComplexContentApprover(approver1, approver2);
doReturn(true).when(approver1).approve(content);
doReturn(true).when(approver2).approve(content);
// execute
boolean result = complexApprover.approve(content);
// assert
assertTrue(result);
verify(approver1).approve(approver1Captor.capture());
verify(approver2).approve(approver2Captor.capture());
assertTrue(content == approver1Captor.getValue());
assertTrue(content == approver2Captor.getValue());
}
@Test
public void testDisapproveFirst() throws Exception {
// given
ComplexContentApprover complexApprover = new ComplexContentApprover(approver1, approver2);
doReturn(false).when(approver1).approve(content);
// execute
boolean result = complexApprover.approve(content);
// assert
assertFalse(result);
verify(approver1, times(1)).approve(approver1Captor.capture());
verify(approver2, never()).approve(approver2Captor.capture());
assertTrue(content == approver1Captor.getValue());
}
@Test
public void testDisapproveLast() throws Exception {
// given
ComplexContentApprover complexApprover = new ComplexContentApprover(approver1, approver2);
doReturn(true).when(approver1).approve(content);
doReturn(false).when(approver2).approve(content);
// execute
boolean result = complexApprover.approve(content);
// assert
assertFalse(result);
verify(approver1).approve(approver1Captor.capture());
verify(approver2).approve(approver2Captor.capture());
assertTrue(content == approver1Captor.getValue());
assertTrue(content == approver2Captor.getValue());
}
}