Truncate UTC timestamp to seconds.

This commit is contained in:
Erik C. Thauvin 2021-05-15 12:01:00 -07:00
parent 2de9dc66bd
commit 81cee7b00f
3 changed files with 31 additions and 21 deletions

View file

@ -39,6 +39,7 @@ import net.thauvin.erik.pinboard.PinboardPoster
import java.time.ZoneId import java.time.ZoneId
import java.time.ZonedDateTime import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit
import java.util.Date import java.util.Date
/** /**
@ -50,16 +51,15 @@ object PinboardUtils {
*/ */
@JvmStatic @JvmStatic
fun addPin(poster: PinboardPoster, ircServer: String, entry: EntryLink) = runBlocking { fun addPin(poster: PinboardPoster, ircServer: String, entry: EntryLink) = runBlocking {
val add = async { async {
poster.addPin( poster.addPin(
entry.link, entry.link,
entry.title, entry.title,
postedBy(entry, ircServer), postedBy(entry, ircServer),
entry.pinboardTags, entry.pinboardTags,
formatDate(entry.date) entry.date.toTimestamp()
) )
} }.await()
add.await()
} }
/** /**
@ -67,10 +67,9 @@ object PinboardUtils {
*/ */
@JvmStatic @JvmStatic
fun deletePin(poster: PinboardPoster, entry: EntryLink) = runBlocking { fun deletePin(poster: PinboardPoster, entry: EntryLink) = runBlocking {
val delete = async { async {
poster.deletePin(entry.link) poster.deletePin(entry.link)
} }.await()
delete.await()
} }
/** /**
@ -78,7 +77,7 @@ object PinboardUtils {
*/ */
@JvmStatic @JvmStatic
fun updatePin(poster: PinboardPoster, ircServer: String, oldUrl: String, entry: EntryLink) = runBlocking { fun updatePin(poster: PinboardPoster, ircServer: String, oldUrl: String, entry: EntryLink) = runBlocking {
val update = async { async {
with(entry) { with(entry) {
if (oldUrl != link) { if (oldUrl != link) {
poster.deletePin(oldUrl) poster.deletePin(oldUrl)
@ -87,7 +86,7 @@ object PinboardUtils {
title, title,
postedBy(entry, ircServer), postedBy(entry, ircServer),
pinboardTags, pinboardTags,
formatDate(date) date.toTimestamp()
) )
} else { } else {
poster.addPin( poster.addPin(
@ -95,21 +94,23 @@ object PinboardUtils {
title, title,
postedBy(entry, ircServer), postedBy(entry, ircServer),
pinboardTags, pinboardTags,
formatDate(date), date.toTimestamp(),
replace = true, replace = true,
shared = true shared = true
) )
} }
} }
} }.await()
update.await()
} }
/** /**
* Format a date to a UTC timestamp. * Format a date to a UTC timestamp.
*/ */
private fun formatDate(date: Date): String { @JvmStatic
return ZonedDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).format(DateTimeFormatter.ISO_INSTANT) fun Date.toTimestamp(): String {
return ZonedDateTime.ofInstant(
this.toInstant().truncatedTo(ChronoUnit.SECONDS),
ZoneId.systemDefault()).format(DateTimeFormatter.ISO_INSTANT)
} }
/** /**

View file

@ -33,9 +33,12 @@
package net.thauvin.erik.mobibot package net.thauvin.erik.mobibot
import net.thauvin.erik.mobibot.entries.EntryLink import net.thauvin.erik.mobibot.entries.EntryLink
import net.thauvin.erik.mobibot.PinboardUtils.toTimestamp
import net.thauvin.erik.pinboard.PinboardPoster import net.thauvin.erik.pinboard.PinboardPoster
import org.testng.Assert import org.testng.Assert.assertFalse
import org.testng.Assert.assertTrue
import org.testng.annotations.Test import org.testng.annotations.Test
import java.util.Date
import java.net.URL import java.net.URL
class PinboardUtilsTest : LocalProperties() { class PinboardUtilsTest : LocalProperties() {
@ -48,14 +51,20 @@ class PinboardUtilsTest : LocalProperties() {
val entry = EntryLink(url, "Test Example", "ErikT", "", "#mobitopia", listOf("test")) val entry = EntryLink(url, "Test Example", "ErikT", "", "#mobitopia", listOf("test"))
PinboardUtils.addPin(pinboard, ircServer, entry) PinboardUtils.addPin(pinboard, ircServer, entry)
Assert.assertTrue(validatePin(apiToken, ircServer, entry.link), "addPin") assertTrue(validatePin(apiToken, ircServer, entry.link), "addPin")
entry.link = "https://www.foo.com/" entry.link = "https://www.foo.com/"
PinboardUtils.updatePin(pinboard, ircServer, url, entry) PinboardUtils.updatePin(pinboard, ircServer, url, entry)
Assert.assertTrue(validatePin(apiToken, ircServer, entry.link), "updatePin") assertTrue(validatePin(apiToken, ircServer, entry.link), "updatePin")
PinboardUtils.deletePin(pinboard, entry) PinboardUtils.deletePin(pinboard, entry)
Assert.assertFalse(validatePin(apiToken, url = entry.link), "deletePin") assertFalse(validatePin(apiToken, url = entry.link), "deletePin")
}
@Test
fun toTimestampTest() {
val d = Date()
assertTrue(d.toTimestamp().matches("[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z".toRegex()))
} }
private fun validatePin(apiToken: String, ircServer: String = "", url: String): Boolean { private fun validatePin(apiToken: String, ircServer: String = "", url: String): Boolean {

View file

@ -1,9 +1,9 @@
#Generated by the Semver Plugin for Gradle #Generated by the Semver Plugin for Gradle
#Sat May 15 01:24:55 PDT 2021 #Sat May 15 12:48:51 PDT 2021
version.buildmeta=791 version.buildmeta=803
version.major=0 version.major=0
version.minor=8 version.minor=8
version.patch=0 version.patch=0
version.prerelease=beta version.prerelease=beta
version.project=mobibot version.project=mobibot
version.semver=0.8.0-beta+791 version.semver=0.8.0-beta+803