package com.mopub.common; import android.os.Build; import com.mopub.common.test.support.SdkTestRunner; import com.mopub.common.util.test.support.TestDateAndTime; import com.mopub.network.AdResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Mockito.stub; @RunWith(SdkTestRunner.class) public class AdReportTest { public AdReport subject; @Mock ClientMetadata mockClientMetadata; @Mock AdResponse mockAdResponse; private Date now; @Before public void setup() { now = new Date(); TestDateAndTime.getInstance().setNow(now); } @Test public void testToString_shouldProperlyConstructParametersTextFile() throws Exception { String expectedParameters = "sdk_version : 1.15.2.2\n" + "creative_id : \n" + "platform_version : "+ Integer.toString(Build.VERSION.SDK_INT) +"\n" + "device_model : android\n" + "ad_unit_id : testAdUnit\n" + "device_locale : en_US\n" + "device_id : UDID\n" + "network_type : unknown\n" + "platform : android\n" + "timestamp : " + getCurrentDateTime() + "\n" + "ad_type : interstitial\n" + "ad_size : {480, 320}\n"; stub(mockClientMetadata.getSdkVersion()).toReturn("1.15.2.2"); stub(mockAdResponse.getDspCreativeId()).toReturn(""); stub(mockClientMetadata.getDeviceModel()).toReturn("android"); stub(mockClientMetadata.getDeviceLocale()).toReturn(Locale.US); stub(mockClientMetadata.getDeviceId()).toReturn("UDID"); stub(mockAdResponse.getNetworkType()).toReturn("unknown"); stub(mockAdResponse.getTimestamp()).toReturn(now.getTime()); stub(mockAdResponse.getAdType()).toReturn("interstitial"); stub(mockAdResponse.getWidth()).toReturn(480); stub(mockAdResponse.getHeight()).toReturn(320); subject = new AdReport("testAdUnit", mockClientMetadata, mockAdResponse); assertThat(subject.toString()).isEqualTo(expectedParameters); } @Test public void constructor_shouldHandleInvalidAdConfigurationValues() throws Exception { String expectedParameters = "sdk_version : null\n" + "creative_id : null\n" + "platform_version : "+ Integer.toString(Build.VERSION.SDK_INT) +"\n" + "device_model : null\n" + "ad_unit_id : testAdUnit\n" + "device_locale : null\n" + "device_id : null\n" + "network_type : null\n" + "platform : android\n" + "timestamp : null" + "\n" + "ad_type : null\n" + "ad_size : {0, 0}\n"; stub(mockClientMetadata.getSdkVersion()).toReturn(null); stub(mockAdResponse.getDspCreativeId()).toReturn(null); stub(mockClientMetadata.getDeviceLocale()).toReturn(null); stub(mockClientMetadata.getDeviceId()).toReturn(null); stub(mockAdResponse.getNetworkType()).toReturn(null); stub(mockAdResponse.getTimestamp()).toReturn(-1L); stub(mockAdResponse.getAdType()).toReturn(null); stub(mockAdResponse.getWidth()).toReturn(null); stub(mockAdResponse.getHeight()).toReturn(null); subject = new AdReport("testAdUnit", mockClientMetadata, mockAdResponse); assertThat(subject.toString()).isEqualTo(expectedParameters); } private String getCurrentDateTime() { SimpleDateFormat dateFormat = new SimpleDateFormat("M/d/yy hh:mm:ss a z", Locale.US); return dateFormat.format(now); } }