tests/testthat/test_readLoggerFile.R

.tmp.f <- function(){
  require(testthat)
  require(dplyr)
  require(rlang)
}
context("readEquidistantCsv")

testData <- dplyr::tribble(
  ~Date, ~Time, ~minute
  ,"2018-10-03", "06:00", 0
  ,"2018-10-03", "06:15", 15
  ,"2018-10-03", "06:30", 30
  ,"2018-10-03", "06:45", 45
  ,"2018-10-03", "07:00", 60
  ,"2018-10-03", "07:15", 75
) %>% mutate(minute = as.integer(.data$minute))

tmpDir <- tempdir()
#tmpDir <- "tmp"
tmpFile <- file.path(tmpDir, "testData.csv")
readr::write_csv(testData, tmpFile)
tmp <- readr::read_csv(tmpFile)

# generate csvFile with additional header lines not matching column types
lines <- readr::read_lines(tmpFile)
linesWithUnits <- c(
  lines[1]
  ,"-,-,min"
  ,"number,number,number"
  ,lines[-1]
)
tmpUnitsFile <- file.path(tmpDir, "testDataUnits.csv")
readr::write_lines(linesWithUnits, tmpUnitsFile)

linesWithHeader <- c(
  " Some Header information"
  , "across"
  , "three lines"
  , linesWithUnits
)
tmpHeaderFile <- file.path(tmpDir, "testDataHeader.csv")
readr::write_lines(linesWithHeader, tmpHeaderFile)

createTimestampDateTime <- function(
  ### add column timestamp from columns date and time
  data  ##<< data.frame to mutate
  , timezone = "GMT"
){
  data %>%  mutate(
    timestamp = as.POSIXct(
      paste(.data$Date, .data$Time), format = "%Y-%m-%d %H:%M", tz = timezone)
  )
}

test_that("readEquidistantCsv",{
  ans <- readEquidistantCsv(tmpFile, fCreateTimestamp = createTimestampDateTime )
  expect_equal( ans$minute, testData$minute)
  expect_equal( ans$timestamp[1], ISOdatetime(2018,10,3,6,0,0, tz = "GMT") )
})

test_that("readEquidistantCsv with timezone",{
  ans <- readEquidistantCsv(
    tmpFile, fCreateTimestamp = createTimestampDateTime, timezone = "UTC" )
  expect_equal( ans$minute, testData$minute)
  expect_equal( ans$timestamp[1], ISOdatetime(2018,10,3,6,0,0, tz = "UTC") )
})

testDataRe <- readEquidistantCsv(tmpFile, fCreateTimestamp = createTimestampDateTime )

test_that("readEquidistantCsv startTime",{
  startTime <- testDataRe$timestamp[3]
  ans <- readEquidistantCsv(
    tmpFile, fCreateTimestamp = createTimestampDateTime
    , startTime = startTime
    )
  expect_equal( ans$minute, testData$minute[-(1:2)])
})

test_that("readEquidistantCsv startTime and endTime",{
  startTime <- testDataRe$timestamp[3]
  endTime <- testDataRe$timestamp[5]
  ans <- readEquidistantCsv(
    tmpFile, fCreateTimestamp = createTimestampDateTime
    , startTime = startTime
    , endTime = endTime
  )
  expect_equal( ans$minute, testData$minute[3:5])
})

test_that("readEquidistantCsv startTime before file and endTime",{
  startTime <- testDataRe$timestamp[1] - 3600
  endTime <- testDataRe$timestamp[5]
  ans <- readEquidistantCsv(
    tmpFile, fCreateTimestamp = createTimestampDateTime
    , startTime = startTime
    , endTime = endTime
  )
  expect_equal( ans$minute, testData$minute[1:5])
})


test_that("readEquidistantCsv endTime",{
  endTime <- testDataRe$timestamp[5]
  ans <- readEquidistantCsv(
    tmpFile, fCreateTimestamp = createTimestampDateTime
    , endTime = endTime
  )
  expect_equal( ans$minute, testData$minute[1:5])
})


test_that("readEquidistantCsv endTime after file",{
  endTime <- testDataRe$timestamp[nrow(testDataRe)] + 3600
  ans <- readEquidistantCsv(
    tmpFile, fCreateTimestamp = createTimestampDateTime
    , endTime = endTime
  )
  expect_equal( ans$minute, testData$minute)
})

test_that("readEquidistantCsv error missing time steps",{
  testData2 <- testData %>% slice(-3)
  tmpFile2 <- file.path(tmpDir,"testData2.csv")
  readr::write_csv(testData2, tmpFile2)
  startTime <- testDataRe$timestamp[4] # after missing step
  expect_error(
    ans <- readEquidistantCsv(
      tmpFile2, fCreateTimestamp = createTimestampDateTime
      , startTime = startTime
    )
    ,"equidistant"

  )
})

test_that("readEquidistantCsv misaligned startTime",{
  startTime <- testDataRe$timestamp[3] + 60*7
  expect_error(
    ans <- readEquidistantCsv(
      tmpFile, fCreateTimestamp = createTimestampDateTime
      , startTime = startTime
    )
    ,"startTime must be a multiple"

  )
})

test_that("readEquidistantCsv misaligned endTime",{
  endTime <- testDataRe$timestamp[3] + 60*7
  expect_error(
    ans <- readEquidistantCsv(
      tmpFile, fCreateTimestamp = createTimestampDateTime
      , endTime = endTime
    )
    ,"multiple"
  )
})


test_that("readEquidistantCsv colHeader startTime and endTime",{
  startTime <- testDataRe$timestamp[3]
  endTime <- testDataRe$timestamp[5]
  ans <- readEquidistantCsv(
    tmpUnitsFile, nRowsColumnHeader = 2
    , fCreateTimestamp = createTimestampDateTime
    , startTime = startTime
    , endTime = endTime
  )
  expect_equal( ans$minute, testData$minute[3:5])
  dfHeader <- attr(ans, "columnHeader")
  expect_true("minute" %in% names(dfHeader))
  expect_equal( dfHeader$minute, c("min","number"))
})

test_that("readEquidistantCsv initial Header startTime and endTime",{
  startTime <- testDataRe$timestamp[3]
  endTime <- testDataRe$timestamp[5]
  ans <- readEquidistantCsv(
    tmpHeaderFile, nRowsColumnHeader = 2, nRowsHeader = 3
    , fCreateTimestamp = createTimestampDateTime
    , startTime = startTime
    , endTime = endTime
  )
  expect_equal( ans$minute, testData$minute[3:5])
  dfHeader <- attr(ans, "columnHeader")
  expect_true("minute" %in% names(dfHeader))
  expect_equal( dfHeader$minute, c("min","number"))
  headerLines <- attr(ans, "header")
  expect_equal( headerLines, linesWithHeader[1:3])
})

test_that("readEquidistantCsv initial Header startTime and endTime colTypes",{
  startTime <- testDataRe$timestamp[3]
  endTime <- testDataRe$timestamp[5]
  ans <- readEquidistantCsv(
    tmpHeaderFile, nRowsColumnHeader = 2, nRowsHeader = 3
    , fCreateTimestamp = createTimestampDateTime
    , startTime = startTime
    , endTime = endTime
    , col_types = readr::cols(
      Date = readr::col_character(), Time = readr::col_character())
  )
  expect_equal( ans$minute, testData$minute[3:5])
  dfHeader <- attr(ans, "columnHeader")
  expect_true("minute" %in% names(dfHeader))
  expect_equal( dfHeader$minute, c("min","number"))
  headerLines <- attr(ans, "header")
  expect_equal( headerLines, linesWithHeader[1:3])
})
bgctw/equidIO documentation built on Nov. 17, 2020, 5:05 a.m.