package com.flextrade.jfixture.behaviours.autoproperty;
import com.flextrade.jfixture.BehaviourCommand;
import com.flextrade.jfixture.SpecimenBuilder;
import com.flextrade.jfixture.SpecimenContext;
import com.flextrade.jfixture.specifications.Specification;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class TestAutoPropertyBuilder {
private AutoPropertyBuilder autoPropertyBuilder;
@Mock
private SpecimenBuilder mockBuilder;
@Mock
private BehaviourCommand mockCommand;
@Mock
private Specification mockSpecification;
@Mock
private SpecimenContext mockContext;
private final Object request = new Object();
private final Object expectedSpecimen = new Object();
@Before
public void initialise() {
MockitoAnnotations.initMocks(this);
autoPropertyBuilder = new AutoPropertyBuilder(
this.mockBuilder,
this.mockCommand,
this.mockSpecification);
}
@Test
public void create_method_returns_the_specimen_creator_by_the_builder() {
when(this.mockBuilder.create(request, mockContext)).thenReturn(expectedSpecimen);
Object createdSpecimen = this.autoPropertyBuilder.create(this.request, this.mockContext);
assertSame(expectedSpecimen, createdSpecimen);
}
@Test
public void calls_execute_on_command_if_specification_is_satisfied() {
when(this.mockBuilder.create(request, mockContext)).thenReturn(expectedSpecimen);
when(this.mockSpecification.isSatisfiedBy(request)).thenReturn(true);
this.autoPropertyBuilder.create(this.request, this.mockContext);
verify(this.mockCommand).execute(this.request, this.expectedSpecimen, this.mockContext);
}
@Test
public void does_not_call_execute_on_command_if_specification_is_noy_satisfied() {
when(this.mockBuilder.create(request, mockContext)).thenReturn(expectedSpecimen);
when(this.mockSpecification.isSatisfiedBy(request)).thenReturn(false);
this.autoPropertyBuilder.create(this.request, this.mockContext);
verify(this.mockCommand, never()).execute(this.request, this.expectedSpecimen, this.mockContext);
}
}