package com.flextrade.jfixture.builders;
import com.flextrade.jfixture.NoSpecimen;
import com.flextrade.jfixture.SpecimenContext;
import com.flextrade.jfixture.exceptions.InvalidRequestException;
import com.flextrade.jfixture.requests.RangeRequest;
import com.flextrade.jfixture.utility.SpecimenType;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TestNumericRangeRelay {
@Mock
private SpecimenContext mockContext;
private NumericRangeRelay numericRangeRelay;
@Before
public void initialise() {
MockitoAnnotations.initMocks(this);
this.numericRangeRelay = new NumericRangeRelay();
}
@Test
public void non_range_request_type_returns_no_specimen() {
Object result = this.numericRangeRelay.create(Integer.class, this.mockContext);
assertEquals(new NoSpecimen(), result);
}
@Test
public void non_numeric_inner_request_returns_no_specimen() {
RangeRequest request = new RangeRequest<Long>(String.class, 1L, 10L);
Object result = this.numericRangeRelay.create(request, this.mockContext);
assertEquals(new NoSpecimen(), result);
}
@Test(expected = InvalidRequestException.class)
public void throws_exception_if_min_is_greater_than_max() {
RangeRequest request = new RangeRequest<Long>(Long.class, 10L, 1L);
this.numericRangeRelay.create(request, this.mockContext);
}
@Test(expected = InvalidRequestException.class)
public void throws_exception_if_min_is_equal_to_than_max() {
RangeRequest request = new RangeRequest<Long>(Long.class, 10L, 10L);
this.numericRangeRelay.create(request, this.mockContext);
}
@Test
public void returns_a_number_in_the_specified_range() {
RangeRequest request = new RangeRequest<Long>(SpecimenType.of(Long.class), 200L, 300L);
Long result = (Long)this.numericRangeRelay.create(request, this.mockContext);
assertTrue(result >= 200 && result < 300);
}
}