From 823a8c36924ff9d7152a2ceb3822de01f3fc5757 Mon Sep 17 00:00:00 2001 From: aminecmi Date: Sun, 30 Oct 2022 21:12:01 +0100 Subject: [PATCH] Date formatter --- androidApp/build.gradle.kts | 1 + androidApp/src/test/kotlin/DatesTest.kt | 38 +++++++++++++ androidApp/src/test/kotlin/RepositoryTest.kt | 54 +----------------- androidApp/src/test/kotlin/TestUtils.kt | 57 +++++++++++++++++++ .../readerforselfossv2/utils/DateUtils.kt | 10 +++- 5 files changed, 104 insertions(+), 56 deletions(-) create mode 100644 androidApp/src/test/kotlin/DatesTest.kt create mode 100644 androidApp/src/test/kotlin/TestUtils.kt diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index cfed35a..4f50057 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -194,6 +194,7 @@ dependencies { testImplementation("junit:junit:4.13.2") testImplementation("io.mockk:mockk:1.12.0") testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0") + implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0") } tasks.withType { diff --git a/androidApp/src/test/kotlin/DatesTest.kt b/androidApp/src/test/kotlin/DatesTest.kt new file mode 100644 index 0000000..cd91125 --- /dev/null +++ b/androidApp/src/test/kotlin/DatesTest.kt @@ -0,0 +1,38 @@ +package bou.amine.apps.readerforselfossv2.repository + +import bou.amine.apps.readerforselfossv2.service.AppSettingsService +import bou.amine.apps.readerforselfossv2.utils.DateUtils +import io.mockk.mockk +import junit.framework.TestCase.assertEquals +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant +import org.junit.Test + +class DatesTest { + private val appSettingsService = mockk() + + private val dateUtils: DateUtils = DateUtils(appSettingsService) + + private val v3Date = "2013-04-07T13:43:00+01:00" + private val v4Date = "2013-04-07 13:43:00" + + @Test + fun v3_date_should_be_parsed() { + val date = dateUtils.parseDate(v3Date) + val expected = LocalDateTime(2013, 4, 7, 13, 43, 0, 0).toInstant(TimeZone.of("UTC+1")) .toEpochMilliseconds() + + assertEquals(date, expected) + } + + @Test + fun v4_date_should_be_parsed() { + val date = dateUtils.parseDate(v4Date) + val expected = + LocalDateTime(2013, 4, 7, 13, 43, 0, 0).toInstant(TimeZone.currentSystemDefault()) + .toEpochMilliseconds() + + assertEquals(date, expected) + } + +} diff --git a/androidApp/src/test/kotlin/RepositoryTest.kt b/androidApp/src/test/kotlin/RepositoryTest.kt index 32f98b9..347a0d5 100644 --- a/androidApp/src/test/kotlin/RepositoryTest.kt +++ b/androidApp/src/test/kotlin/RepositoryTest.kt @@ -1366,56 +1366,4 @@ class RepositoryTest { coVerify(exactly = 0) { api.getItems(any(), 0, null, null, null, null, 200) } } -} - -fun generateTestDBItems(item: FakeItemParameters = FakeItemParameters()): List { - return listOf( - ITEM( - id = item.id, - datetime = item.datetime, - title = item.title, - content = item.content, - unread = item.unread, - starred = item.starred, - thumbnail = item.thumbnail, - icon = item.icon, - link = item.link, - sourcetitle = item.sourcetitle, - tags = item.tags - ) - ) -} - -fun generateTestApiItem(item: FakeItemParameters = FakeItemParameters()): List { - return listOf( - SelfossModel.Item( - id = item.id.toInt(), - datetime = item.datetime, - title = item.title, - content = item.content, - unread = item.unread, - starred = item.starred, - thumbnail = item.thumbnail, - icon = item.icon, - link = item.link, - sourcetitle = item.sourcetitle, - tags = item.tags.split(',') - ) - ) -} - -class FakeItemParameters { - var id = "20" - var datetime = "2022-09-09T03:32:01-04:00" - val title = "Etica della ricerca sotto i riflettori." - val content = - "

Luigi Campanella, già Presidente SCI

\n

L’etica della scienza è di certo ambito di cui continuiamo a scoprire nuovi aspetti e risvolti.

\n

L’ultimo è quello delle intelligenze artificiali capaci di creare opere complesse basate su immagini e parole memorizzate con il rischio di fake news e di contenuti disturbanti.

\n

Per evitare che ciò accada si sta procedendo filtrando secondo criteri di autocensura i dati da cui l’intelligenza artificiale parte.

\n

Comincia ad intravedersi un futuro prossimo di competizione fra autori umani ed artificiali nel quale sarà importante, quando i loro prodotti saranno indistinguibili, dichiararne l’origine.

\n

Come si comprende, si conferma che gli aspetti etici dell’innovazione e della ricerca si diversificato sempre di più.

\n

La biologia molecolare e la genetica già in passato hanno posto all’attenzione comune aspetti di etica della scienza che hanno indotto a nuove riflessioni circa i limiti delle ricerche.

\n

L’argomento, sempre attuale, torna sulle prime pagine a seguito della pubblicazione di una ricerca della Università di Cambridge che ha sviluppato una struttura cellulare di un topo con un cuore che batte regolarmente.

\n\"\"\"\"

Magdalena Zernicka-Goetz

\n\"\"

Gianluca Amadei

\n

Del gruppo fa parte anche uno scienziato italiano Gianluca Amadei,che dinnanzi alle obiezioni di natura etica sulla realizzazione della vita artificiale si è affrettato a sostenere che non è creare nuove vite il fine primario della ricerca, ma quello di salvare quelle esistenti, di dare contributi essenziali alla medicina citando il caso del fallimento tuttora non interpretato di alcune gravidanze e di superare la sperimentazione animale, così contribuendo positivamente alla soluzione di un altro dilemma etico.

\n

L’embrione sintetico ha ovviamente come primo traguardo il contributo ai trapianti oggi drammaticamente carenti nell’offerta rispetto alla domanda, con attese fino a 4 anni per i trapianti di cuore ed a 2 anni per quelli di fegato. Il lavoro dovrebbe adesso continuare presso l’Ateneo di Padova per creare nuovi organi e nuovi farmaci.

" - var unread = true - var starred = true - val thumbnail = null - val icon = "ba79e238383ce83c23a169929c8906ef.png" - val link = - "https://ilblogdellasci.wordpress.com/2022/09/09/etica-della-ricerca-sotto-i-riflettori/" - var sourcetitle = "La Chimica e la Società" - var tags = "Chimica, Testing" -} +} \ No newline at end of file diff --git a/androidApp/src/test/kotlin/TestUtils.kt b/androidApp/src/test/kotlin/TestUtils.kt new file mode 100644 index 0000000..e568644 --- /dev/null +++ b/androidApp/src/test/kotlin/TestUtils.kt @@ -0,0 +1,57 @@ +package bou.amine.apps.readerforselfossv2.repository + +import bou.amine.apps.readerforselfossv2.dao.ITEM +import bou.amine.apps.readerforselfossv2.model.SelfossModel + + +fun generateTestDBItems(item: FakeItemParameters = FakeItemParameters()): List { + return listOf( + ITEM( + id = item.id, + datetime = item.datetime, + title = item.title, + content = item.content, + unread = item.unread, + starred = item.starred, + thumbnail = item.thumbnail, + icon = item.icon, + link = item.link, + sourcetitle = item.sourcetitle, + tags = item.tags + ) + ) +} + +fun generateTestApiItem(item: FakeItemParameters = FakeItemParameters()): List { + return listOf( + SelfossModel.Item( + id = item.id.toInt(), + datetime = item.datetime, + title = item.title, + content = item.content, + unread = item.unread, + starred = item.starred, + thumbnail = item.thumbnail, + icon = item.icon, + link = item.link, + sourcetitle = item.sourcetitle, + tags = item.tags.split(',') + ) + ) +} + +class FakeItemParameters { + var id = "20" + var datetime = "2022-09-09T03:32:01-04:00" + val title = "Etica della ricerca sotto i riflettori." + val content = + "

Luigi Campanella, già Presidente SCI

\n

L’etica della scienza è di certo ambito di cui continuiamo a scoprire nuovi aspetti e risvolti.

\n

L’ultimo è quello delle intelligenze artificiali capaci di creare opere complesse basate su immagini e parole memorizzate con il rischio di fake news e di contenuti disturbanti.

\n

Per evitare che ciò accada si sta procedendo filtrando secondo criteri di autocensura i dati da cui l’intelligenza artificiale parte.

\n

Comincia ad intravedersi un futuro prossimo di competizione fra autori umani ed artificiali nel quale sarà importante, quando i loro prodotti saranno indistinguibili, dichiararne l’origine.

\n

Come si comprende, si conferma che gli aspetti etici dell’innovazione e della ricerca si diversificato sempre di più.

\n

La biologia molecolare e la genetica già in passato hanno posto all’attenzione comune aspetti di etica della scienza che hanno indotto a nuove riflessioni circa i limiti delle ricerche.

\n

L’argomento, sempre attuale, torna sulle prime pagine a seguito della pubblicazione di una ricerca della Università di Cambridge che ha sviluppato una struttura cellulare di un topo con un cuore che batte regolarmente.

\n\"\"\"\"

Magdalena Zernicka-Goetz

\n\"\"

Gianluca Amadei

\n

Del gruppo fa parte anche uno scienziato italiano Gianluca Amadei,che dinnanzi alle obiezioni di natura etica sulla realizzazione della vita artificiale si è affrettato a sostenere che non è creare nuove vite il fine primario della ricerca, ma quello di salvare quelle esistenti, di dare contributi essenziali alla medicina citando il caso del fallimento tuttora non interpretato di alcune gravidanze e di superare la sperimentazione animale, così contribuendo positivamente alla soluzione di un altro dilemma etico.

\n

L’embrione sintetico ha ovviamente come primo traguardo il contributo ai trapianti oggi drammaticamente carenti nell’offerta rispetto alla domanda, con attese fino a 4 anni per i trapianti di cuore ed a 2 anni per quelli di fegato. Il lavoro dovrebbe adesso continuare presso l’Ateneo di Padova per creare nuovi organi e nuovi farmaci.

" + var unread = true + var starred = true + val thumbnail = null + val icon = "ba79e238383ce83c23a169929c8906ef.png" + val link = + "https://ilblogdellasci.wordpress.com/2022/09/09/etica-della-ricerca-sotto-i-riflettori/" + var sourcetitle = "La Chimica e la Società" + var tags = "Chimica, Testing" +} \ No newline at end of file diff --git a/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/DateUtils.kt b/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/DateUtils.kt index a65d70c..ce3121a 100644 --- a/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/DateUtils.kt +++ b/shared/src/androidMain/kotlin/bou/amine/apps/readerforselfossv2/utils/DateUtils.kt @@ -2,14 +2,18 @@ package bou.amine.apps.readerforselfossv2.utils import android.text.format.DateUtils import bou.amine.apps.readerforselfossv2.service.AppSettingsService -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant +import kotlinx.datetime.* +import java.time.format.DateTimeFormatter actual class DateUtils actual constructor(actual val appSettingsService: AppSettingsService) { actual fun parseDate(dateString: String): Long { - return Instant.parse(dateString).toEpochMilliseconds() + return try { + Instant.parse(dateString).toEpochMilliseconds() + } catch (e: Exception) { + LocalDateTime.parse(dateString.replace(" ", "T")).toInstant(TimeZone.currentSystemDefault()).toEpochMilliseconds() + } } actual fun parseRelativeDate(dateString: String): String {