Skip to content

Commit 7582327

Browse files
author
mars885
committed
Fix bugs related to invalid locale used for time formatting
1 parent 0a582d4 commit 7582327

File tree

5 files changed

+42
-3
lines changed

5 files changed

+42
-3
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.paulrybitskyi.gamedge.common.testing
2+
3+
import com.paulrybitskyi.gamedge.core.providers.LocaleProvider
4+
import java.util.Locale
5+
6+
class FakeLocaleProvider(
7+
private val locale: Locale = Locale.ENGLISH,
8+
) : LocaleProvider {
9+
10+
override fun getLocale(): Locale {
11+
return locale
12+
}
13+
}

core/src/main/java/com/paulrybitskyi/gamedge/core/formatters/ArticlePublicationDateFormatter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.paulrybitskyi.gamedge.core.formatters
1818

19+
import com.paulrybitskyi.gamedge.core.providers.LocaleProvider
1920
import com.paulrybitskyi.gamedge.core.providers.TimeFormat
2021
import com.paulrybitskyi.gamedge.core.providers.TimeFormatProvider
2122
import com.paulrybitskyi.gamedge.core.providers.TimeProvider
@@ -36,6 +37,7 @@ internal class ArticlePublicationDateFormatterImpl @Inject constructor(
3637
private val relativeDateFormatter: RelativeDateFormatter,
3738
private val timeProvider: TimeProvider,
3839
private val timeFormatProvider: TimeFormatProvider,
40+
private val localeProvider: LocaleProvider,
3941
) : ArticlePublicationDateFormatter {
4042

4143
private companion object {
@@ -68,7 +70,9 @@ internal class ArticlePublicationDateFormatterImpl @Inject constructor(
6870

6971
private fun formatAsAbsoluteDate(dateTime: LocalDateTime): String {
7072
val pattern = getAbsoluteDatePattern(dateTime)
71-
val formattedDate = DateTimeFormatter.ofPattern(pattern).format(dateTime)
73+
val formattedDate = DateTimeFormatter
74+
.ofPattern(pattern, localeProvider.getLocale())
75+
.format(dateTime)
7276

7377
return formattedDate
7478
}

core/src/main/java/com/paulrybitskyi/gamedge/core/formatters/GameReleaseDateFormatter.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.paulrybitskyi.gamedge.common.domain.games.entities.Game
2020
import com.paulrybitskyi.gamedge.common.domain.games.entities.ReleaseDate
2121
import com.paulrybitskyi.gamedge.common.domain.games.entities.ReleaseDateCategory
2222
import com.paulrybitskyi.gamedge.core.R
23+
import com.paulrybitskyi.gamedge.core.providers.LocaleProvider
2324
import com.paulrybitskyi.gamedge.core.providers.StringProvider
2425
import com.paulrybitskyi.hiltbinder.BindType
2526
import java.time.Instant
@@ -36,6 +37,7 @@ interface GameReleaseDateFormatter {
3637
internal class GameReleaseDateFormatterImpl @Inject constructor(
3738
private val stringProvider: StringProvider,
3839
private val relativeDateFormatter: RelativeDateFormatter,
40+
private val localeProvider: LocaleProvider,
3941
) : GameReleaseDateFormatter {
4042

4143
private companion object {
@@ -76,7 +78,7 @@ internal class GameReleaseDateFormatterImpl @Inject constructor(
7678
private fun ReleaseDate.formatCompleteDate(): String {
7779
val releaseLocalDateTime = toLocalDateTime()
7880
val formattedReleaseDate = DateTimeFormatter
79-
.ofPattern(COMPLETE_DATE_FORMATTING_PATTERN)
81+
.ofPattern(COMPLETE_DATE_FORMATTING_PATTERN, localeProvider.getLocale())
8082
.format(releaseLocalDateTime)
8183

8284
return buildString {
@@ -89,7 +91,7 @@ internal class GameReleaseDateFormatterImpl @Inject constructor(
8991

9092
private fun ReleaseDate.formatDaylessDate(): String {
9193
return DateTimeFormatter
92-
.ofPattern(DAYLESS_DATE_FORMATTING_PATTERN)
94+
.ofPattern(DAYLESS_DATE_FORMATTING_PATTERN, localeProvider.getLocale())
9395
.format(toLocalDateTime())
9496
}
9597

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.paulrybitskyi.gamedge.core.providers
2+
3+
import com.paulrybitskyi.hiltbinder.BindType
4+
import java.util.Locale
5+
import javax.inject.Inject
6+
7+
interface LocaleProvider {
8+
fun getLocale(): Locale
9+
}
10+
11+
@BindType
12+
internal class LocaleProviderImpl @Inject constructor() : LocaleProvider {
13+
14+
override fun getLocale(): Locale {
15+
// App only supports the English language
16+
return Locale.ENGLISH
17+
}
18+
}

core/src/test/java/com/paulrybitskyi/gamedge/core/ArticlePublicationDateFormatterImplTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.paulrybitskyi.gamedge.core
1818

1919
import com.google.common.truth.Truth.assertThat
20+
import com.paulrybitskyi.gamedge.common.testing.FakeLocaleProvider
2021
import com.paulrybitskyi.gamedge.core.formatters.ArticlePublicationDateFormatterImpl
2122
import com.paulrybitskyi.gamedge.core.formatters.RelativeDateFormatter
2223
import com.paulrybitskyi.gamedge.core.providers.TimeFormat
@@ -50,6 +51,7 @@ internal class ArticlePublicationDateFormatterImplTest {
5051
relativeDateFormatter = relativeDateFormatter,
5152
timeProvider = timeProvider,
5253
timeFormatProvider = timeFormatProvider,
54+
localeProvider = FakeLocaleProvider(),
5355
)
5456

5557
every { relativeDateFormatter.formatRelativeDate(any()) } returns RELATIVE_DATE

0 commit comments

Comments
 (0)