tests/testthat/test_edit_attribute.R

context("Edit attributes")

eml_path <- system.file("dummy_eml_w_attributes.xml", package = "datamgmt")
doc <- EML::read_eml(eml_path)

doc_key_path <- system.file("key_eml_w_attributes.xml", package = "datamgmt")
doc_key <- EML::read_eml(doc_key_path)


test_that("inputs are correct", {
    expect_error(edit_attribute(7))
    expect_error(edit_attribute("test"))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[1]],
                                attributeName = 7))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[1]],
                                domain = ""))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[1]],
                                domain = "text"))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[1]],
                                measurementScale = "other"))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[1]],
                                numberType = "other"))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[1]],
                                missingValueCode = "NA"))
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[1]],
                                missingValueCodeExplanation = "data unavailable"))
})


test_that("attributes are updated in correct slots", {
    new_attribute <- edit_attribute(doc$dataset$dataTable$attributeList$attribute[[2]],
                                    attributeDefinition = "test definition",
                                    domain = "numericDomain",
                                    measurementScale = "ratio",
                                    unit = "dimensionless",
                                    numberType = "whole",
                                    definition = NA)

    doc_attr_key <- doc_key$dataset$dataTable$attributeList$attribute[[2]]

    expect_match(new_attribute$attributeDefinition,
                 "test definition")

    expect_equivalent(new_attribute$measurementScale$ratio$unit,
                      doc_attr_key$measurementScale$ratio$unit)

    expect_match(new_attribute$measurementScale$ratio$numericDomain$numberType,
                 "whole")
})


test_that("existing attributes that are not changed in update are retained", {
    new_attribute <- edit_attribute(doc$dataset$dataTable$attributeList$attribute[[2]],
                                    attributeDefinition = "test definition",
                                    domain = "numericDomain",
                                    measurementScale = "ratio",
                                    unit = "dimensionless",
                                    numberType = "whole",
                                    definition = NA)

    expect_match(new_attribute$attributeName,
                 "col2")
})


test_that("slots that no longer apply to updated domain type are gone", {
    new_attribute <- edit_attribute(doc$dataset$dataTable$attributeList$attribute[[2]],
                                    attributeDefinition = "test definition",
                                    domain = "numericDomain",
                                    measurementScale = "ratio",
                                    unit = "dimensionless",
                                    numberType = "whole",
                                    definition = NA)
#!
    expect_equal(new_attribute$measurementScale$nominal$nonNumericDomain$textDomain[[1]]$definition, NULL)
})


test_that("error occurs if incorrect combinations occur between measurementScale and domain", {
    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[2]],
                                attributeDefinition = "test definition",
                                domain = "textDomain",
                                measurementScale = "ratio",
                                unit = "dimensionless",
                                numberType = "whole",
                                definition = NA))

    expect_error(edit_attribute(doc$dataset$dataTable$attributeList$attribute[[2]],
                                attributeDefinition = "test definition",
                                domain = "numericDomain",
                                measurementScale = "dateTime",
                                unit = "dimensionless",
                                numberType = "whole",
                                definition = NA))
})
NCEAS/datamgmt documentation built on June 5, 2023, 6:14 a.m.