Skip to content

Commit 134f217

Browse files
authored
fix: Added unit test for datahelper class (#2476)
1 parent fdaf77b commit 134f217

File tree

4 files changed

+103
-30
lines changed

4 files changed

+103
-30
lines changed

app/src/main/java/org/fossasia/susi/ai/helper/DateTimeHelper.kt

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,27 @@ object DateTimeHelper {
3939
return sdf.format(Date())
4040
}
4141

42+
val today: Date
43+
get() {
44+
return Calendar.getInstance().time
45+
}
46+
4247
/**
4348
* Method to format date from server
4449
4550
* @param date Date in string
4651
* *
4752
* @return Date
4853
*/
49-
private fun formatDate(date: String): Date? {
54+
private fun formatDate(date: String): Date {
5055
val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
5156
sdf.timeZone = TimeZone.getTimeZone("UTC")
5257
var dateIn: Date?
5358
dateIn = try {
5459
sdf.parse(date)
5560
} catch (e: Exception) {
5661
Timber.e(e)
57-
null
62+
today
5863
}
5964

6065
return dateIn
@@ -85,6 +90,25 @@ object DateTimeHelper {
8590
val sdf = SimpleDateFormat("hh:mm aaa")
8691
val tz = TimeZone.getDefault()
8792
sdf.timeZone = tz
88-
return sdf.format(formatDate(date))
93+
return if (date.isEmpty()) {
94+
throw IllegalArgumentException("date argument is empty")
95+
} else {
96+
sdf.format(formatDate(date))
97+
}
98+
}
99+
100+
fun formatDate(timestamp: String, months: Array<String>): String {
101+
return if (timestamp.length > 10 && months.size == 12) {
102+
var date: String? = ""
103+
timestamp.trim()
104+
val month = timestamp.substring(5, 7).toInt()
105+
date = timestamp.substring(8, 10) + " " +
106+
months[month - 1].toString() +
107+
", " + timestamp.substring(0, 4)
108+
109+
date
110+
} else {
111+
throw IllegalArgumentException("Timestamp or Months format not correct")
112+
}
89113
}
90114
}

app/src/main/java/org/fossasia/susi/ai/skills/feedback/adapters/recycleradapters/AllReviewsAdapter.kt

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import android.text.TextUtils
77
import android.view.LayoutInflater
88
import android.view.ViewGroup
99
import org.fossasia.susi.ai.R
10+
import org.fossasia.susi.ai.helper.DateTimeHelper
1011
import org.fossasia.susi.ai.helper.Utils
1112
import org.fossasia.susi.ai.rest.responses.susi.Feedback
1213
import org.fossasia.susi.ai.skills.feedback.adapters.viewholders.AllReviewsViewHolder
@@ -19,7 +20,7 @@ class AllReviewsAdapter(
1920
val context: Context,
2021
private val feedbackList: List<Feedback>?
2122
) :
22-
RecyclerView.Adapter<AllReviewsViewHolder>() {
23+
RecyclerView.Adapter<AllReviewsViewHolder>() {
2324

2425
@NonNull
2526
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AllReviewsViewHolder {
@@ -46,7 +47,7 @@ class AllReviewsAdapter(
4647
}
4748
if (feedbackList[position].timestamp != null &&
4849
!TextUtils.isEmpty(feedbackList[position].timestamp)) {
49-
val date: String? = getDate(feedbackList[position].timestamp)
50+
val date: String? = DateTimeHelper.formatDate(feedbackList[position].timestamp as String, context.resources.getStringArray(R.array.months))
5051
if (date != null) {
5152
holder.feedbackDate.text = date
5253
} else {
@@ -60,16 +61,4 @@ class AllReviewsAdapter(
6061
}
6162
}
6263
}
63-
64-
private fun getDate(timestamp: String?): String? {
65-
var date: String? = ""
66-
if (timestamp != null && !TextUtils.isEmpty(timestamp)) {
67-
timestamp.trim()
68-
val month = timestamp.substring(5, 7).toInt()
69-
date = timestamp.substring(8, 10) + " " +
70-
context.resources.getStringArray(R.array.months)[month - 1].toString() +
71-
", " + timestamp.substring(0, 4)
72-
}
73-
return date
74-
}
7564
}

app/src/main/java/org/fossasia/susi/ai/skills/skilldetails/adapters/recycleradapters/FeedbackAdapter.kt

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import android.view.View
1111
import android.view.ViewGroup
1212
import org.fossasia.susi.ai.R
1313
import org.fossasia.susi.ai.helper.Constant
14+
import org.fossasia.susi.ai.helper.DateTimeHelper
1415
import org.fossasia.susi.ai.helper.PrefManager
1516
import org.fossasia.susi.ai.helper.Utils
1617
import org.fossasia.susi.ai.rest.responses.susi.Feedback
@@ -79,7 +80,7 @@ class FeedbackAdapter(
7980
}
8081
if (arrangedFeedbackList[position].timestamp != null &&
8182
!TextUtils.isEmpty(arrangedFeedbackList[position].timestamp)) {
82-
val date: String? = getDate(arrangedFeedbackList[position].timestamp)
83+
val date: String? = DateTimeHelper.formatDate(arrangedFeedbackList[position].timestamp as String, context.resources.getStringArray(R.array.months))
8384
if (date != null) {
8485
holder.feedbackDate.text = date
8586
} else {
@@ -99,18 +100,6 @@ class FeedbackAdapter(
99100
}
100101
}
101102

102-
private fun getDate(timestamp: String?): String? {
103-
var date: String? = ""
104-
timestamp?.trim()
105-
val month = timestamp?.substring(5, 7)?.toInt()
106-
if (month != null) {
107-
date = timestamp.substring(8, 10) + " " +
108-
context.resources.getStringArray(R.array.months)[month - 1].toString() +
109-
", " + timestamp.substring(0, 4)
110-
}
111-
return date
112-
}
113-
114103
override fun onItemClicked(position: Int) {
115104
if (context is Activity) context.overridePendingTransition(R.anim.trans_right_in, R.anim.trans_right_out)
116105
val intent = Intent(context, FeedbackActivity::class.java)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package org.fossasia.susi.ai.helper
2+
3+
import java.text.SimpleDateFormat
4+
import java.util.Calendar
5+
import java.util.TimeZone
6+
import junit.framework.TestCase.assertEquals
7+
import org.junit.Test
8+
9+
class DateTimeHelperTest {
10+
private val TIMEZONE_SINGAPORE = "Asia/Singapore"
11+
private val TIMEZONE_US_PACIFIC = "US/Pacific"
12+
private val TIMEZONE_SYDNEY = "Australia/Sydney"
13+
private val TIMEZONE_AMSTERDAM = "Amsterdam"
14+
private val TEST_TIME = "2020-01-30T12:18:37.262Z"
15+
16+
val months = arrayOf("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Aug", "Nov", "Dec")
17+
val emptyMonths = arrayOf("")
18+
19+
@Test
20+
fun getDateTest() {
21+
val sdf = SimpleDateFormat(" MMM dd, yyyy")
22+
assertEquals(sdf.format(Calendar.getInstance().time), DateTimeHelper.getDate(""))
23+
24+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_SINGAPORE))
25+
assertEquals(" Jan 30, 2020", DateTimeHelper.getDate(TEST_TIME))
26+
27+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_US_PACIFIC))
28+
assertEquals(" Jan 30, 2020", DateTimeHelper.getDate(TEST_TIME))
29+
30+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_SYDNEY))
31+
assertEquals(" Jan 30, 2020", DateTimeHelper.getDate(TEST_TIME))
32+
33+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_AMSTERDAM))
34+
assertEquals(" Jan 30, 2020", DateTimeHelper.getDate(TEST_TIME))
35+
}
36+
37+
@Test
38+
fun getTimeTest() {
39+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_SINGAPORE))
40+
assertEquals("08:18 PM", DateTimeHelper.getTime(TEST_TIME))
41+
42+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_US_PACIFIC))
43+
assertEquals("04:18 AM", DateTimeHelper.getTime(TEST_TIME))
44+
45+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_SYDNEY))
46+
assertEquals("11:18 PM", DateTimeHelper.getTime(TEST_TIME))
47+
48+
TimeZone.setDefault(TimeZone.getTimeZone(TIMEZONE_AMSTERDAM))
49+
assertEquals("12:18 PM", DateTimeHelper.getTime(TEST_TIME))
50+
}
51+
52+
@Test(expected = IllegalArgumentException::class)
53+
fun testEmptyDate_in_getTime() {
54+
DateTimeHelper.getTime("")
55+
}
56+
57+
@Test
58+
fun formatDateTest() {
59+
assertEquals("30 Jan, 2020", DateTimeHelper.formatDate(TEST_TIME, months))
60+
}
61+
62+
@Test(expected = IllegalArgumentException::class)
63+
fun testEmptyTimestamp_in_formatDateTest() {
64+
DateTimeHelper.formatDate("", months)
65+
}
66+
67+
@Test(expected = IllegalArgumentException::class)
68+
fun testEmptyMonths_in_formatDateTest() {
69+
DateTimeHelper.formatDate("", emptyMonths)
70+
}
71+
}

0 commit comments

Comments
 (0)