tests/testthat/test-hotspot_classify.R

data_sf <- head(memphis_robberies, 1000)

result <- hotspot_classify(data_sf)

# CHECK INPUTS -----------------------------------------------------------------

# Note that common inputs are tested in `validate_inputs()` and tested in the
# corresponding test file

test_that("error if no Date/POSIX columns present in the data", {
  expect_error(
    hotspot_classify(data_sf[, c("uid", "offense_type", "geometry")])
  )
})

test_that("error if multiple Date/POSIX columns present and none specified", {
  data_sf2 <- data_sf
  data_sf2$date2 <- data_sf$date
  expect_error(hotspot_classify(data_sf2))
})

test_that("error if specified `time` column is not Date/POSIX", {
  expect_error(hotspot_classify(data_sf, time = "offense_type"))
})

test_that("error if specified `time` column is not present in the data", {
  expect_error(hotspot_classify(data_sf, time = "some_column"))
})

test_that("error if inputs don't have correct types", {
  expect_error(hotspot_classify(data_sf, period = 1))
  expect_error(hotspot_classify(data_sf, period = "foo"))
  expect_error(hotspot_classify(data_sf, start = "foo"))
  expect_error(hotspot_classify(data_sf, collapse = "foo"))
  expect_error(hotspot_classify(data_sf, params = "foo"))
})

test_that("error if inputs aren't of correct length", {
  expect_error(hotspot_classify(data_sf, period = c("1 month", "1 week")))
  expect_error(
    hotspot_classify(data_sf, start = as.Date(c("2022-02-12", "2022-02-13")))
  )
  expect_error(hotspot_classify(data_sf, collapse = "foo"))
  expect_error(
    hotspot_classify(data_sf, params = hotspot_classify_params()[1:2])
  )
})

test_that("error if values are of the correct type/length but are invalid", {
  expect_error(hotspot_classify(data_sf, start = Sys.Date()))
})



# CHECK OUTPUTS ----------------------------------------------------------------

## Correct outputs ----

test_that("function produces an SF tibble with the class hspt_c", {
  expect_s3_class(result, "sf")
  expect_s3_class(result, "tbl_df")
  expect_s3_class(result, "hspt_c")
})

test_that("output object has the required column names", {
  expect_equal(names(result), c("hotspot_category", "geometry"))
})

test_that("columns in output have the required types", {
  expect_type(result$hotspot_category, "character")
  expect_true(sf::st_is(result$geometry[[1]], "POLYGON"))
})
mpjashby/sfhotspot documentation built on Feb. 21, 2025, 9:01 p.m.