tests/testthat/test_box.R

source('testhelpers.R')
context('box')

try({
  box = osem_box('57000b8745fd40c8196ad04c')
})


test_that('required box attributes are correctly parsed', {
  check_api()
  
  expect_is(box$X_id, 'character')
  expect_is(box$name, 'character')
  expect_is(box$exposure, 'character')
  expect_is(box$model, 'character')
  expect_is(box$lat, 'numeric')
  expect_is(box$lon, 'numeric')
  expect_is(box$createdAt, 'POSIXct')
})

test_that('optional box attributes are correctly parsed', {
  check_api()
  
  completebox = osem_box('5a676e49411a790019290f94') # all fields populated
  expect_is(completebox$description, 'character')
  expect_is(completebox$grouptag, 'character')
  expect_is(completebox$weblink, 'character')
  expect_is(completebox$updatedAt, 'POSIXct')
  expect_is(completebox$lastMeasurement, 'POSIXct')
  expect_is(completebox$height, c('numeric', 'integer'))
  expect_is(completebox$phenomena, 'list')
  expect_is(completebox$phenomena[[1]], 'character')
  expect_is(completebox$sensors, 'list')
  expect_is(completebox$sensors[[1]], 'data.frame')
  
  # box with older schema, not recently updated..
  oldbox = osem_box('539fec94a8341554157931d7')
  expect_null(oldbox$description)
  expect_null(oldbox$grouptag)
  expect_null(oldbox$weblink)
  expect_null(oldbox$height)
  expect_null(oldbox$lastMeasurement)
})

test_that('unknown box throws', {
  check_api()

  expect_error(osem_box('asdf'))
  expect_error(osem_box('57000b8745fd40c800000000'), 'not found')
})


test_that("print.sensebox filters important attributes for a single box", {
  check_api()
  
  msg = capture.output({
    print(box)
  })
  expect_false(any(grepl('description', msg)), 'should filter attribute "description"')
})

test_that("summary.sensebox outputs all metrics for a single box", {
  check_api()
  
  msg = capture.output({
    summary(box)
  })
  expect_true(any(grepl('sensors per box:', msg)))
  expect_true(any(grepl('oldest box:', msg)))
  expect_true(any(grepl('newest box:', msg)))
  expect_true(any(grepl('\\$last_measurement_within', msg)))
  expect_true(any(grepl('boxes by model:', msg)))
  expect_true(any(grepl('boxes by exposure:', msg)))
  expect_true(any(grepl('boxes total: 1', msg)))
})

test_that('requests can be cached', {
  check_api()

  osem_clear_cache(tempdir())
  expect_length(list.files(tempdir(), pattern = 'osemcache\\..*\\.rds'), 0)
  b = osem_box('57000b8745fd40c8196ad04c', cache = tempdir())

  cacheFile = paste(
    tempdir(),
    opensensmapr:::osem_cache_filename('/boxes/57000b8745fd40c8196ad04c'),
    sep = '/'
  )
  expect_true(file.exists(cacheFile))
  expect_length(list.files(tempdir(), pattern = 'osemcache\\..*\\.rds'), 1)

  # no download output (works only in interactive mode..)
  out = capture.output({
    b = osem_box('57000b8745fd40c8196ad04c', cache = tempdir())
  })
  expect_length(out, 0)
  expect_length(length(list.files(tempdir(), pattern = 'osemcache\\..*\\.rds')), 1)

  osem_clear_cache(tempdir())
  expect_false(file.exists(cacheFile))
  expect_length(list.files(tempdir(), pattern = 'osemcache\\..*\\.rds'), 0)
})
sensebox/opensensmapR documentation built on March 12, 2023, 8:09 a.m.