context("cff_reader")
z <- system.file('extdata/citation.cff', package = "handlr")
test_that("cff_reader: works", {
skip_on_cran()
x <- cff_reader(z)
expect_is(cff_reader, "function")
expect_is(x, "handl")
expect_named(x)
expect_null(x[["key"]])
expect_is(x$keywords, "character")
expect_gt(length(x$keywords), 1)
expect_is(x$id, "character")
expect_equal(x$type, "SoftwareSourceCode")
expect_equal(x$bibtex_type, "misc")
expect_equal(x$citeproc_type, "article-journal")
expect_equal(x$ris_type, "COMP")
expect_equal(x$doi, "10.5281/zenodo.1234")
expect_is(x$title, "character")
expect_is(x$author, "list")
expect_is(x$author[[1]], "list")
expect_equal(x$author[[1]]$type, "Person")
expect_equal(attr(x, "from"), "cff")
expect_equal(attr(x, "source_type"), "file")
expect_match(attr(x, "file"), ".cff")
expect_false(attr(x, "many"))
})
# main field checks
test_that("cff_reader: required fields", {
skip_on_cran()
zy <- yaml::yaml.load_file(z)
zy$`cff-version` <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'cff-version' is required")
zy <- yaml::yaml.load_file(z)
zy$version <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'version' is required")
zy <- yaml::yaml.load_file(z)
zy$message <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'message' is required")
zy <- yaml::yaml.load_file(z)
zy$`date-released` <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'date-released' is required")
zy <- yaml::yaml.load_file(z)
zy$title <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'title' is required")
zy <- yaml::yaml.load_file(z)
zy$authors <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'authors' is required")
})
# reference checks
test_that("cff_reader: reference types are checked", {
skip_on_cran()
zy <- yaml::yaml.load_file(z)
zy$references[[1]]$type <- "foobar"
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "reference")
})
test_that("cff_reader: reference title type is checked", {
skip_on_cran()
zy <- yaml::yaml.load_file(z)
zy$references[[1]]$title <- 234
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'title' must be a string")
})
test_that("cff_reader: reference author elements each must be entity or person", {
skip_on_cran()
zy <- yaml::yaml.load_file(z)
names(zy$references[[1]]$authors[[1]])[1] <- "foobar"
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "each element in 'authors'")
})
test_that("cff_reader fails well", {
expect_error(cff_reader(), "argument \"x\" is missing")
expect_error(cff_reader(5), "x must be of class character")
})
test_that("cff_reader: works with 1.2.0", {
skip_on_cran()
z <- system.file("extdata/citation_1.2.0.cff", package = "handlr")
x <- cff_reader(z)
expect_is(cff_reader, "function")
expect_is(x, "handl")
expect_named(x)
expect_null(x[["software_version"]])
expect_null(x[["date_published"]])
expect_null(x[["key"]])
expect_is(x$keywords, "character")
expect_gt(length(x$keywords), 1)
expect_is(x$id, "character")
expect_equal(x$type, "SoftwareSourceCode")
expect_equal(x$bibtex_type, "misc")
expect_equal(x$citeproc_type, "article-journal")
expect_equal(x$ris_type, "COMP")
expect_equal(x$doi, "10.5281/zenodo.1234")
expect_is(x$title, "character")
expect_is(x$author, "list")
expect_is(x$author[[1]], "list")
expect_equal(x$author[[1]]$type, "Person")
expect_equal(attr(x, "from"), "cff")
expect_equal(attr(x, "source_type"), "file")
expect_match(attr(x, "file"), ".cff")
expect_false(attr(x, "many"))
})
test_that("cff_reader: works with CFF 1.2.0 original file", {
skip_on_cran()
z <- system.file("extdata/citation_1.2.0_project.cff", package = "handlr")
x <- cff_reader(z)
expect_is(cff_reader, "function")
expect_is(x, "handl")
expect_named(x)
expect_is(x[["software_version"]], "character")
expect_is(x[["date_published"]], "character")
expect_null(x[["key"]])
expect_is(x$keywords, "character")
expect_gt(length(x$keywords), 1)
expect_equal(x$type, "SoftwareSourceCode")
expect_equal(x$bibtex_type, "misc")
expect_equal(x$citeproc_type, "article-journal")
expect_equal(x$ris_type, "COMP")
expect_is(x$title, "character")
expect_is(x$author, "list")
expect_is(x$author[[1]], "list")
expect_equal(x$author[[1]]$type, "Person")
expect_equal(attr(x, "from"), "cff")
expect_equal(attr(x, "source_type"), "file")
expect_match(attr(x, "file"), ".cff")
expect_false(attr(x, "many"))
})
# main field checks
test_that("cff_reader: required fields v1.2.0", {
skip_on_cran()
z <- system.file("extdata/citation_1.2.0.cff", package = "handlr")
zy <- yaml::yaml.load_file(z)
zy$`cff-version` <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'cff-version' is required")
zy <- yaml::yaml.load_file(z)
zy$message <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'message' is required")
zy <- yaml::yaml.load_file(z)
zy$title <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'title' is required")
zy <- yaml::yaml.load_file(z)
zy$authors <- NULL
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'authors' is required")
# Switch to cff v1.1.0
zy <- yaml::yaml.load_file(z)
zy$`cff-version` <- "1.1.0"
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'date-released' is required")
zy <- yaml::yaml.load_file(z)
zy$`cff-version` <- "1.1.0"
zy$`date-released` <- "2000-01-01"
tf <- tempfile(fileext = ".yml")
yaml::write_yaml(zy, tf)
expect_error(cff_reader(tf), "'version' is required")
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.