Skip to content

Commit 41362a5

Browse files
committed
add unit tests
1 parent 29e0fd0 commit 41362a5

3 files changed

Lines changed: 104 additions & 0 deletions

File tree

tests/testthat.R

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
library(testthat)
2+
library(betydata)
3+
4+
test_check("betydata")

tests/testthat/test-data.R

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Tests for betydata datasets
2+
3+
context("Dataset validation")
4+
5+
test_that("traitsview dataset loads correctly", {
6+
data("traitsview", package = "betydata")
7+
8+
expect_s3_class(traitsview, "data.frame")
9+
expect_gt(nrow(traitsview), 40000)
10+
expect_equal(ncol(traitsview), 36)
11+
})
12+
13+
test_that("traitsview has required columns", {
14+
data("traitsview", package = "betydata")
15+
16+
expected_cols <- c(
17+
"id", "trait", "mean", "units", "scientificname",
18+
"sitename", "author", "checked", "access_level"
19+
)
20+
expect_true(all(expected_cols %in% names(traitsview)))
21+
})
22+
23+
test_that("traitsview excludes checked = -1 per data policy", {
24+
data("traitsview", package = "betydata")
25+
26+
expect_false(any(traitsview$checked == -1, na.rm = TRUE))
27+
})
28+
29+
test_that("traitsview contains only public data", {
30+
data("traitsview", package = "betydata")
31+
32+
expect_true(all(traitsview$access_level >= 4, na.rm = TRUE))
33+
})
34+
35+
test_that("traitsview coordinates are valid", {
36+
data("traitsview", package = "betydata")
37+
38+
valid_lat <- traitsview$lat[!is.na(traitsview$lat)]
39+
valid_lon <- traitsview$lon[!is.na(traitsview$lon)]
40+
41+
expect_true(all(valid_lat >= -90 & valid_lat <= 90))
42+
expect_true(all(valid_lon >= -180 & valid_lon <= 180))
43+
})
44+
45+
test_that("species dataset loads correctly", {
46+
data("species", package = "betydata")
47+
48+
expect_s3_class(species, "data.frame")
49+
expect_true("id" %in% names(species))
50+
expect_gt(nrow(species), 0)
51+
})
52+
53+
test_that("variables dataset loads correctly", {
54+
data("variables", package = "betydata")
55+
56+
expect_s3_class(variables, "data.frame")
57+
required_cols <- c("id", "name", "units")
58+
expect_true(all(required_cols %in% names(variables)))
59+
})
60+
61+
test_that("pfts dataset loads correctly", {
62+
data("pfts", package = "betydata")
63+
64+
expect_s3_class(pfts, "data.frame")
65+
expect_true(all(c("id", "name") %in% names(pfts)))
66+
})

tests/testthat/test-metadata.R

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# Tests for frictionless datapackage.json
2+
3+
context("Metadata validation")
4+
5+
test_that("datapackage.json exists and is valid JSON", {
6+
pkg_path <- system.file("metadata", "datapackage.json", package = "betydata")
7+
expect_true(file.exists(pkg_path))
8+
9+
dp <- jsonlite::read_json(pkg_path)
10+
expect_true("name" %in% names(dp))
11+
expect_equal(dp$name, "betydata")
12+
})
13+
14+
test_that("datapackage.json lists all datasets", {
15+
pkg_path <- system.file("metadata", "datapackage.json", package = "betydata")
16+
dp <- jsonlite::read_json(pkg_path)
17+
18+
resource_names <- vapply(dp$resources, function(r) r$name, character(1))
19+
20+
expected <- c("traitsview", "species", "sites", "variables", "citations",
21+
"pfts", "priors", "cultivars", "methods", "treatments")
22+
expect_true(all(expected %in% resource_names))
23+
})
24+
25+
test_that("traitsview schema fields match actual columns", {
26+
pkg_path <- system.file("metadata", "datapackage.json", package = "betydata")
27+
dp <- jsonlite::read_json(pkg_path)
28+
29+
tv_resource <- Filter(function(r) r$name == "traitsview", dp$resources)[[1]]
30+
schema_fields <- vapply(tv_resource$schema$fields, function(f) f$name, character(1))
31+
32+
data("traitsview", package = "betydata")
33+
expect_equal(sort(schema_fields), sort(names(traitsview)))
34+
})

0 commit comments

Comments
 (0)