From a1a0c6c5b852f77a13ded3c53699792eee71e247 Mon Sep 17 00:00:00 2001
From: chris-cwa <69595386+chris-cwa@users.noreply.github.com>
Date: Mon, 18 Jan 2021 17:52:24 +0100
Subject: [PATCH] Contact diary date formatting (DEV) (#2109)

* extracted patterns

* - unexpected empty line

* fixed encoding issues

* was too complicated before

* trying to live with different implementations

* make everybody happy

* pattern test

* more normalizing

* improved readability

* team wants to hardcode everything

* ktlint

Co-authored-by: Ralf Gehrer <ralfgehrer@users.noreply.github.com>
---
 .../util/CWADateTimeFormatPatternFactory.kt   | 18 ++++++++
 .../util/ContactDiaryExtensions.kt            |  8 +---
 .../CWADateTimeFormatPatternFactoryTest.kt    | 44 +++++++++++++++++++
 .../ContactDiaryDateFormatterExtensionTest.kt |  5 ++-
 4 files changed, 67 insertions(+), 8 deletions(-)
 create mode 100644 Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactory.kt
 create mode 100644 Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactoryTest.kt

diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactory.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactory.kt
new file mode 100644
index 000000000..ae56622db
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactory.kt
@@ -0,0 +1,18 @@
+package de.rki.coronawarnapp.contactdiary.util
+
+import org.joda.time.format.DateTimeFormat
+import java.util.Locale
+
+object CWADateTimeFormatPatternFactory {
+
+    fun Locale.shortDatePattern() = when {
+        this == Locale.GERMANY -> "dd.MM.yy"
+        this == Locale.UK -> "dd/MM/yyyy"
+        this == Locale.US -> "M/d/yy"
+        this == Locale("bg", "BG") -> "d.MM.yy 'г'."
+        this == Locale("ro", "RO") -> "dd.MM.yyyy"
+        this == Locale("pl", "PL") -> "dd.MM.yyyy"
+        this == Locale("tr", "TR") -> "d.MM.yyyy"
+        else -> DateTimeFormat.patternForStyle("S-", this)
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt
index 6348145c6..9429701e6 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryExtensions.kt
@@ -9,6 +9,7 @@ import androidx.core.view.AccessibilityDelegateCompat
 import androidx.core.view.ViewCompat
 import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
 import androidx.viewpager2.widget.ViewPager2
+import de.rki.coronawarnapp.contactdiary.util.CWADateTimeFormatPatternFactory.shortDatePattern
 import org.joda.time.LocalDate
 import org.joda.time.format.DateTimeFormat
 import java.util.Locale
@@ -31,12 +32,7 @@ fun Context.getLocale(): Locale {
     }
 }
 
-fun LocalDate.toFormattedDay(locale: Locale): String {
-    // Use two different methods to get the final date format (Weekday, Shortdate)
-    // because the custom pattern of toString() does not localize characters like "/" or "."
-    return "${toString("EEEE", locale)}, " +
-        DateTimeFormat.shortDate().withLocale(locale).print(this)
-}
+fun LocalDate.toFormattedDay(locale: Locale): String = toString("EEEE, ${locale.shortDatePattern()}", locale)
 
 fun LocalDate.toFormattedDayForAccessibility(locale: Locale): String {
     // Use two different methods to get the final date format (Weekday, Longdate)
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactoryTest.kt
new file mode 100644
index 000000000..326895d77
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/CWADateTimeFormatPatternFactoryTest.kt
@@ -0,0 +1,44 @@
+package de.rki.coronawarnapp.contactdiary.util
+
+import de.rki.coronawarnapp.contactdiary.util.CWADateTimeFormatPatternFactory.shortDatePattern
+import io.kotest.matchers.shouldBe
+import org.junit.Test
+import java.util.Locale
+
+class CWADateTimeFormatPatternFactoryTest {
+
+    @Test
+    fun `pattern for german date`() {
+        Locale.GERMANY.shortDatePattern() shouldBe "dd.MM.yy"
+    }
+
+    @Test
+    fun `pattern for bulgarian date`() {
+        Locale("bg", "BG").shortDatePattern() shouldBe "d.MM.yy 'г'."
+    }
+
+    @Test
+    fun `pattern for gb date`() {
+        Locale.UK.shortDatePattern() shouldBe "dd/MM/yyyy"
+    }
+
+    @Test
+    fun `pattern for us date`() {
+        Locale.US.shortDatePattern() shouldBe "M/d/yy"
+    }
+
+    @Test
+    fun `pattern for romanian date`() {
+        Locale("ro", "RO").shortDatePattern() shouldBe "dd.MM.yyyy"
+    }
+
+    @Test
+    fun `pattern for polish date`() {
+        Locale("pl", "PL").shortDatePattern() shouldBe "dd.MM.yyyy"
+    }
+
+    @Test
+    fun `pattern for turkish date`() {
+        Locale("tr", "TR").shortDatePattern() shouldBe "d.MM.yyyy"
+    }
+}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt
index 18a4cd7d5..969ec9009 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/contactdiary/util/ContactDiaryDateFormatterExtensionTest.kt
@@ -1,5 +1,6 @@
 package de.rki.coronawarnapp.contactdiary.util
 
+import io.kotest.matchers.collections.shouldBeIn
 import io.kotest.matchers.shouldBe
 import org.joda.time.LocalDate
 import org.junit.jupiter.api.Test
@@ -11,7 +12,7 @@ class ContactDiaryDateFormatterExtensionTest {
     fun `format bulgarian date`() {
         LocalDate("2021-01-01").toFormattedDay(
             Locale("bg", "BG")
-        ) shouldBe "петък, 1.01.21 г."
+        ) shouldBeIn arrayOf("петък, 1.01.21 г.", "Петък, 1.01.21 г.")
     }
 
     @Test
@@ -40,7 +41,7 @@ class ContactDiaryDateFormatterExtensionTest {
     fun `format romanian date`() {
         LocalDate("2021-01-05").toFormattedDay(
             Locale("ro", "RO")
-        ) shouldBe "marți, 05.01.2021"
+        ) shouldBeIn arrayOf("marţi, 05.01.2021", "marți, 05.01.2021")
     }
 
     @Test
-- 
GitLab