blob: 8c2d456bfb71027748af761ff43402a01b8940be [file] [log] [blame]
// Copyright (C) 2018 GerritForge Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.gerritforge.analytics.support.ops
import java.time.{LocalDate, LocalDateTime, ZoneOffset}
import org.scalatest.{FlatSpec, Matchers}
class AnalyticsTimeOpsSpec extends FlatSpec with Matchers {
"String parser - Given a correct string and date format" should "return an epoch value" in {
val epochValueUTC =
LocalDateTime
.of(2018, 1, 1, 12, 0, 0, 0)
.atOffset(ZoneOffset.UTC)
.toInstant
.toEpochMilli
val stringDate = "2018-01-01 12:00:00.000000000"
val dateFormat = AnalyticsDateTimeFormatter.yyyy_MM_dd_HHmmss_SSSSSSSSS
import com.gerritforge.analytics.support.ops.implicits._
stringDate.parseStringToUTCEpoch(dateFormat).get should equal(epochValueUTC)
}
"String parser - Given a correct string and date format" should "return also a local date" in {
val utcLocalDate: LocalDate =
LocalDate.of(2018, 1, 1)
val stringDate = "2018-01-01"
val dateFormat = AnalyticsDateTimeFormatter.yyyy_MM_dd
import com.gerritforge.analytics.support.ops.implicits._
stringDate.parseStringToLocalDate(dateFormat).get should equal(utcLocalDate)
}
"String parser - An incorrect string a given format" should "return None" in {
val stringDate = "2018-01-01 12:00:00.000000000"
val dateFormat = AnalyticsDateTimeFormatter.yyyy_MM_dd
import com.gerritforge.analytics.support.ops.implicits._
stringDate.parseStringToUTCEpoch(dateFormat) should equal(None)
}
"Simple Date Formats" should "convert to the correct strings - yyyyMMddHH" in {
val epochValueUTC =
LocalDateTime
.of(2018, 1, 1, 12, 0, 0, 0)
.atOffset(ZoneOffset.UTC)
.toInstant.toEpochMilli
val yyyyMMddHHStr = "2018010112"
AnalyticsDateTimeFormatter.yyyyMMddHH.format(epochValueUTC) should equal(yyyyMMddHHStr)
}
it should "convert to the correct strings - yyyyMMdd" in {
val epochValueUTC =
LocalDateTime
.of(2018, 1, 1, 12, 0, 0, 0)
.atOffset(ZoneOffset.UTC)
.toInstant.toEpochMilli
val yyyyMMddStr = "20180101"
AnalyticsDateTimeFormatter.yyyyMMdd.format(epochValueUTC) should equal(yyyyMMddStr)
}
it should "convert to the correct strings - yyyyMM" in {
val epochValueUTC =
LocalDateTime
.of(2018, 1, 1, 12, 0, 0, 0)
.atOffset(ZoneOffset.UTC)
.toInstant.toEpochMilli
val yyyyMMStr = "201801"
AnalyticsDateTimeFormatter.yyyyMM.format(epochValueUTC) should equal(yyyyMMStr)
}
it should "convert to the correct strings - yyyy" in {
val epochValueUTC =
LocalDateTime
.of(2018, 1, 1, 12, 0, 0, 0)
.atOffset(ZoneOffset.UTC)
.toInstant.toEpochMilli
val yyyyStr = "2018"
AnalyticsDateTimeFormatter.yyyy.format(epochValueUTC) should equal(yyyyStr)
}
"UTC conversion" should "check date operations return always UTC" in {
val dateTime =
LocalDateTime
.of(2018, 1, 1, 12, 0, 0, 0)
val etcDateTime = dateTime.atOffset(ZoneOffset.ofHours(9))
val utcDateTime = dateTime.atOffset(ZoneOffset.UTC)
import com.gerritforge.analytics.support.ops.implicits._
dateTime.convertToUTCEpochMillis should equal(utcDateTime.toInstant.toEpochMilli)
dateTime.convertToUTCEpochMillis should not equal (etcDateTime.toInstant.toEpochMilli)
dateTime.convertToUTCLocalDateTime should equal(utcDateTime)
dateTime.convertToUTCLocalDateTime should not equal (etcDateTime)
}
}