tests/testthat/test_clone_package.R

context("Clone package")

# Set test node
d1c_test <- dataone::D1Client("STAGING", "urn:node:mnTestARCTIC")

test_that("clone_package errors gracefully", {
    expect_error(clone_package(5, d1c_test, d1c_test))

    expect_error(clone_package("Dummy pid",
                 "Dummy Node",
                 d1c_test))

    expect_error(clone_package("Dummy pid",
                               d1c_test))

    suppressWarnings(expect_error(clone_package("Dummy pid", d1c_test, d1c_test)))
})

test_that("we can clone a package", {
    if (!arcticdatautils::is_token_set(d1c_test@mn)) {
        skip("No token set. Skipping test.")
    }

    pkg <- arcticdatautils::create_dummy_package(d1c_test@mn)
    pkg2 <- clone_package(pkg$resource_map, d1c_test, d1c_test,
                          add_access_to = arcticdatautils:::get_token_subject(),
                          change_auth_node = TRUE,
                          public = TRUE,
                          new_pid = TRUE)

    expect_length(pkg2, 3)
})

test_that("we can copy a package", {
    if (!arcticdatautils::is_token_set(d1c_test@mn)) {
        skip("No token set. Skipping test.")
    }

    pkg <- arcticdatautils::create_dummy_package(d1c_test@mn)
    pkg2 <- copy_package(pkg$resource_map, d1c_test, d1c_test)

    expect_length(pkg2, 3)
})

test_that("clone_package copies a package w - w/o data and children", {
    if (!arcticdatautils::is_token_set(d1c_test@mn)) {
        skip("No token set. Skipping test.")
    }

    # Create a child
    child <- arcticdatautils::create_dummy_package(d1c_test@mn, size = 2)

    # Create a parent
    parent1 <- arcticdatautils::create_dummy_parent_package(d1c_test@mn, child$resource_map)

    # Create a parent
    parent2 <- arcticdatautils::create_dummy_parent_package(d1c_test@mn, parent1$parent)

    # Clone package
    clone <- clone_package(resource_map_pid = parent2$parent,
                         from = d1c_test,
                         to = d1c_test,
                         add_access_to = arcticdatautils:::get_token_subject(),
                         public = TRUE,
                         clone_children = TRUE,
                         new_pid = TRUE,
                         change_auth_node = FALSE)

    # Parent2 Test
    expect_named(clone, c("metadata", "data", "child_packages", "resource_map"))
    expect_true(all(arcticdatautils::object_exists(d1c_test@mn, unlist(clone))))
    expect_length(clone$data, 0) # 0 Data
    expect_length(clone$metadata, 1) # 1 Metadata file
    expect_length(clone$child_packages, 1) # 1 Child
    expect_length(clone$resource_map, 1) # 1 Resource Map

    # Parent1 Test
    clone_parent1 <- arcticdatautils::get_package(d1c_test@mn, clone$child_packages)
    expect_true(all(arcticdatautils::object_exists(d1c_test@mn, unlist(clone_parent1))))
    expect_length(clone_parent1$data, 0) # No Data
    expect_length(clone_parent1$metadata, 1) # 1 Metadata file
    expect_length(clone_parent1$child_packages, 1) # 1 Child
    expect_length(clone_parent1$resource_map, 1) # 1 Resource Map

    # Child Test
    clone_child <- arcticdatautils::get_package(d1c_test@mn, clone_parent1$child_packages)
    expect_true(all(arcticdatautils::object_exists(d1c_test@mn, unlist(clone_child))))
    expect_length(clone_child$data, 1) # 1 Data
    expect_length(clone_child$metadata, 1) # 1 Metadata file
    expect_length(clone_child$child_packages, 0) # 0 Child
    expect_length(clone_child$resource_map, 1) # 1 Resource Map

    # Child Data Test
    dataobj1 <- dataone::getObject(d1c_test@mn, child$data)
    cloneobj1 <- dataone::getObject(d1c_test@mn, clone_child$data)
    expect_equal(dataobj1, cloneobj1) #cloned data is the same
})
NCEAS/datamgmt documentation built on June 5, 2023, 6:14 a.m.