diff --git a/app/src/androidTest/java/com/nextcloud/talk/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/nextcloud/talk/ExampleInstrumentedTest.java index 5514687d6..ff73dcd48 100644 --- a/app/src/androidTest/java/com/nextcloud/talk/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/nextcloud/talk/ExampleInstrumentedTest.java @@ -21,12 +21,13 @@ package com.nextcloud.talk; import android.content.Context; -import androidx.test.InstrumentationRegistry; -import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + import static org.junit.Assert.assertEquals; /** diff --git a/app/src/androidTest/java/com/nextcloud/talk/utils/ShareUtilsIT.kt b/app/src/androidTest/java/com/nextcloud/talk/utils/ShareUtilsIT.kt new file mode 100644 index 000000000..0b123b3fa --- /dev/null +++ b/app/src/androidTest/java/com/nextcloud/talk/utils/ShareUtilsIT.kt @@ -0,0 +1,40 @@ +package com.nextcloud.talk.utils + +import at.bitfire.dav4jvm.HttpUtils +import org.apache.commons.lang3.time.DateUtils +import org.junit.Assert.assertEquals +import org.junit.Test +import java.util.Date +import java.util.Locale + +class ShareUtilsIT { + @Test + fun date() { + assertEquals(1207778138000, parseDate2("Mon, 09 Apr 2008 23:55:38 GMT").time) + assertEquals(1207778138000, HttpUtils.parseDate("Mon, 09 Apr 2008 23:55:38 GMT")?.time) + } + + private fun parseDate2(dateStr: String): Date { + return DateUtils.parseDate( + dateStr, Locale.US, + HttpUtils.httpDateFormatStr, + "EEE, dd MMM yyyy HH:mm:ss zzz", // RFC 822, updated by RFC 1123 with any TZ + "EEEE, dd-MMM-yy HH:mm:ss zzz", // RFC 850, obsoleted by RFC 1036 with any TZ. + "EEE MMM d HH:mm:ss yyyy", // ANSI C's asctime() format + // Alternative formats. + "EEE, dd-MMM-yyyy HH:mm:ss z", + "EEE, dd-MMM-yyyy HH-mm-ss z", + "EEE, dd MMM yy HH:mm:ss z", + "EEE dd-MMM-yyyy HH:mm:ss z", + "EEE dd MMM yyyy HH:mm:ss z", + "EEE dd-MMM-yyyy HH-mm-ss z", + "EEE dd-MMM-yy HH:mm:ss z", + "EEE dd MMM yy HH:mm:ss z", + "EEE,dd-MMM-yy HH:mm:ss z", + "EEE,dd-MMM-yyyy HH:mm:ss z", + "EEE, dd-MM-yyyy HH:mm:ss z", + /* RI bug 6641315 claims a cookie of this format was once served by www.yahoo.com */ + "EEE MMM d yyyy HH:mm:ss z" + ) + } +} diff --git a/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.java b/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.java deleted file mode 100644 index 6ddd1ab3d..000000000 --- a/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Nextcloud Talk application - * - * @author Mario Danic - * Copyright (C) 2017-2019 Mario Danic - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package com.nextcloud.talk.utils; - -import android.content.Context; -import android.content.res.Resources; -import android.text.TextUtils; - -import com.nextcloud.talk.R; -import com.nextcloud.talk.models.database.UserEntity; -import com.nextcloud.talk.models.json.conversations.Conversation; -import com.nextcloud.talk.utils.database.user.UserUtils; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; - -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.when; -import static org.powermock.api.mockito.PowerMockito.mockStatic; - -@RunWith(PowerMockRunner.class) -@PrepareForTest(TextUtils.class) -public class ShareUtilsTest { - - @Mock - private Context context; - - @Mock - private Resources resources; - - @Mock - private UserUtils userUtils; - - @Mock - private Conversation conversation; - - @Mock - private UserEntity userEntity; - - private final String baseUrl = "https://my.nextcloud.com"; - - private final String token = "2aotbrjr"; - - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mockStatic(TextUtils.class); - when(userUtils.getCurrentUser()).thenReturn(userEntity); - when(userEntity.getBaseUrl()).thenReturn(baseUrl); - when(conversation.getToken()).thenReturn(token); - when(context.getResources()).thenReturn(resources); - when(resources.getString(R.string.nc_share_text)).thenReturn("Join the conversation at %1$s/index.php/call/%2$s"); - when(resources.getString(R.string.nc_share_text_pass)).thenReturn("\nPassword: %1$s"); - - } - - @Test - public void getStringForIntent_noPasswordGiven_correctStringWithoutPasswordReturned() { - PowerMockito.when(TextUtils.isEmpty(anyString())).thenReturn(true); - - String expectedResult = String.format("Join the conversation at %s/index.php/call/%s", - baseUrl, token); - assertEquals("Intent string was not as expected", - expectedResult, ShareUtils.getStringForIntent(context, "", userUtils, conversation)); - } - - @Test - public void getStringForIntent_passwordGiven_correctStringWithPasswordReturned() { - PowerMockito.when(TextUtils.isEmpty(anyString())).thenReturn(false); - - String password = "superSecret"; - String expectedResult = String.format("Join the conversation at %s/index.php/call/%s\nPassword: %s", - baseUrl, token, password); - assertEquals("Intent string was not as expected", - expectedResult, ShareUtils.getStringForIntent(context, password, userUtils, conversation)); - } - -} diff --git a/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.kt b/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.kt new file mode 100644 index 000000000..861eaf681 --- /dev/null +++ b/app/src/test/java/com/nextcloud/talk/utils/ShareUtilsTest.kt @@ -0,0 +1,109 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2019 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.nextcloud.talk.utils + +import android.content.Context +import android.content.res.Resources +import android.text.TextUtils +import at.bitfire.dav4jvm.HttpUtils.parseDate +import com.nextcloud.talk.R +import com.nextcloud.talk.models.database.UserEntity +import com.nextcloud.talk.models.json.conversations.Conversation +import com.nextcloud.talk.utils.database.user.UserUtils +import junit.framework.Assert.assertEquals +import org.junit.Assert +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.ArgumentMatchers +import org.mockito.Mock +import org.mockito.Mockito +import org.mockito.MockitoAnnotations +import org.powermock.api.mockito.PowerMockito +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.modules.junit4.PowerMockRunner +import java.text.ParseException + +@RunWith(PowerMockRunner::class) +@PrepareForTest(TextUtils::class) +class ShareUtilsTest { + @Mock + private val context: Context? = null + + @Mock + private val resources: Resources? = null + + @Mock + private val userUtils: UserUtils? = null + + @Mock + private val conversation: Conversation? = null + + @Mock + private val userEntity: UserEntity? = null + private val baseUrl = "https://my.nextcloud.com" + private val token = "2aotbrjr" + + @Before + fun setUp() { + MockitoAnnotations.initMocks(this) + PowerMockito.mockStatic(TextUtils::class.java) + Mockito.`when`(userUtils!!.currentUser).thenReturn(userEntity) + Mockito.`when`(userEntity!!.baseUrl).thenReturn(baseUrl) + Mockito.`when`(conversation!!.getToken()).thenReturn(token) + Mockito.`when`(context!!.resources).thenReturn(resources) + Mockito.`when`(resources!!.getString(R.string.nc_share_text)) + .thenReturn("Join the conversation at %1\$s/index.php/call/%2\$s") + Mockito.`when`(resources.getString(R.string.nc_share_text_pass)).thenReturn("\nPassword: %1\$s") + } + + @Test + fun stringForIntent_noPasswordGiven_correctStringWithoutPasswordReturned() { + PowerMockito.`when`(TextUtils.isEmpty(ArgumentMatchers.anyString())).thenReturn(true) + val expectedResult = String.format( + "Join the conversation at %s/index.php/call/%s", + baseUrl, token + ) + Assert.assertEquals( + "Intent string was not as expected", + expectedResult, ShareUtils.getStringForIntent(context, "", userUtils, conversation) + ) + } + + @Test + fun stringForIntent_passwordGiven_correctStringWithPasswordReturned() { + PowerMockito.`when`(TextUtils.isEmpty(ArgumentMatchers.anyString())).thenReturn(false) + val password = "superSecret" + val expectedResult = String.format( + "Join the conversation at %s/index.php/call/%s\nPassword: %s", + baseUrl, token, password + ) + Assert.assertEquals( + "Intent string was not as expected", + expectedResult, ShareUtils.getStringForIntent(context, password, userUtils, conversation) + ) + } + + @Test + @Throws(ParseException::class) + fun date() { + assertEquals(1207778138000, parseDate("Mon, 09 Apr 2008 23:55:38 GMT")?.time) + } +}