# 1. Defid2 ---------------------------------------------------------------

## 1.1. Get data ------------------

## Get full DB
defid2_full <- fd_pathogens_defid2()

## Test filters
defid_filter_agent <- fd_pathogens_defid2(
  agent = metadata_forestdata$defid2_list$pathogens[50]
)

defid_filter_host <- fd_pathogens_defid2(
  host = metadata_forestdata$defid2_list$hosts[1]
)

defid_filter_country <- fd_pathogens_defid2(
  country = metadata_forestdata$defid2_list$countries[2]
)

## Test geometry
defid_pt <- fd_pathogens_defid2(
  geometry = "point",
  quiet    = FALSE
)

## 1.2. Unit tests ----------------

## Check that database is downloaded and contains data
test_that("Database is downloaded in correct format", {
  expect_equal(class(defid2_full)[1], "sf")
  expect_equal(class(defid_filter_agent)[1], "sf")
  expect_equal(class(defid_filter_host)[1], "sf")
  expect_equal(class(defid_filter_country)[1], "sf")
  expect_equal(class(defid_pt)[1], "sf")
})

test_that("Database contains data", {
  expect_gt(nrow(defid2_full), 1)
  expect_gt(nrow(defid_filter_agent), 1)
  expect_gt(nrow(defid_filter_host), 1)
  expect_gt(nrow(defid_filter_country), 1)
  expect_gt(nrow(defid_pt), 1)
})

## Check geometry type
test_that("Geometry type is correct", {

  ## Polygon
  expect_equal(
    sf::st_geometry_type(defid2_full, by_geometry = FALSE) |> as.character(),
    "MULTIPOLYGON"
  )

  ## Point
  expect_equal(
    sf::st_geometry_type(defid_pt, by_geometry = FALSE) |> as.character(),
    "POINT"
  )

})