package com.mopub.nativeads;
import com.mopub.common.Preconditions.NoThrow;
import com.mopub.nativeads.MoPubNativeAdPositioning.MoPubClientPositioning;
import com.mopub.common.test.support.SdkTestRunner;
import org.fest.util.Lists;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.annotation.Config;
import static com.mopub.nativeads.MoPubNativeAdPositioning.MoPubClientPositioning.NO_REPEAT;
import static org.fest.assertions.api.Assertions.assertThat;
@Config(manifest=Config.NONE)
@RunWith(SdkTestRunner.class)
public class MoPubClientPositioningTest {
private MoPubClientPositioning subject;
@Before
public void setup() {
subject = MoPubNativeAdPositioning.clientPositioning();
}
@Test
public void addFixedPositionsOutOfOrder_shouldBeSorted() {
subject.addFixedPosition(27);
subject.addFixedPosition(31);
subject.addFixedPosition(17);
subject.addFixedPosition(7);
subject.addFixedPosition(56);
assertThat(subject.getFixedPositions())
.isEqualTo(Lists.newArrayList(7, 17, 27, 31, 56));
}
@Test
public void setRepeatingEnabled_shouldHaveRightInterval() {
subject.addFixedPosition(10);
subject.enableRepeatingPositions(5);
assertThat(subject.getRepeatingInterval()).isEqualTo(5);
assertThat(subject.getFixedPositions()).isEqualTo(Lists.newArrayList(10));
}
@Test
public void setNoRepeat_shouldReturnNoRepeat() {
subject.enableRepeatingPositions(5);
subject.enableRepeatingPositions(NO_REPEAT);
assertThat(subject.getRepeatingInterval()).isEqualTo(NO_REPEAT);
}
@Test
public void setFixedPositionTwice_shouldReturnOnlyOne() {
subject.addFixedPosition(7);
subject.addFixedPosition(7);
assertThat(subject.getFixedPositions().size()).isEqualTo(1);
}
@Test(expected = IllegalArgumentException.class)
public void setInvalidFixedPosition_strictMode_shouldThrow() {
NoThrow.setStrictMode(true);
subject.addFixedPosition(-3);
}
@Test
public void setInvalidFixedPosition_releaseMode_shouldNotAddPosition() {
NoThrow.setStrictMode(false);
subject.addFixedPosition(-3);
assertThat(subject.getFixedPositions().size()).isEqualTo(0);
}
@Test(expected = IllegalArgumentException.class)
public void setInvalidRepeatingInterval_strictMode_shouldThrow() {
NoThrow.setStrictMode(true);
subject.enableRepeatingPositions(1);
}
@Test
public void setInvalidRepeatingInterval_releaseMode_shouldClearRepeatingInterval() {
NoThrow.setStrictMode(false);
subject.enableRepeatingPositions(0);
assertThat(subject.getRepeatingInterval()).isEqualTo(NO_REPEAT);
}
}