tests/testthat/test-copyCdmTo-extra.R

# Tests for R/copyCdmTo.R

# Extra tests only run in test-coverage and local; skip on container CI
skip_on_cran()
skip_if(nzchar(Sys.getenv("CI_TEST_DB")), "Skipping extra tests on container CI")

test_that("copyCdmTo copies cdm to another duckdb connection", {
  skip_if_not_installed("duckdb")
  con1 <- local_eunomia_con()
  con2 <- DBI::dbConnect(duckdb::duckdb(), ":memory:")
  on.exit(DBI::dbDisconnect(con2, shutdown = TRUE), add = TRUE)

  cdm <- cdmFromCon(con1, cdmSchema = "main", writeSchema = "main", cdmName = "eunomia")

  newCdm <- copyCdmTo(con2, cdm, schema = c(schema = "main"), overwrite = TRUE)

  expect_s3_class(newCdm, "cdm_reference")
  expect_true("person" %in% names(newCdm))
  expect_true("observation_period" %in% names(newCdm))

  # Check data was actually copied
  person_count <- newCdm$person %>% dplyr::count() %>% dplyr::pull(n)
  expect_true(person_count > 0)
})

test_that("copyCdmTo preserves cdm name", {
  skip_if_not_installed("duckdb")
  con1 <- local_eunomia_con()
  con2 <- DBI::dbConnect(duckdb::duckdb(), ":memory:")
  on.exit(DBI::dbDisconnect(con2, shutdown = TRUE), add = TRUE)

  cdm <- cdmFromCon(con1, cdmSchema = "main", writeSchema = "main", cdmName = "TestCDM")

  newCdm <- copyCdmTo(con2, cdm, schema = c(schema = "main"), overwrite = TRUE)
  expect_equal(omopgenerics::cdmName(newCdm), "TestCDM")
})

test_that("copyCdmTo errors on invalid connection", {
  skip_if_not_installed("duckdb")
  con1 <- local_eunomia_con()
  con2 <- DBI::dbConnect(duckdb::duckdb(), ":memory:")
  DBI::dbDisconnect(con2, shutdown = TRUE)

  cdm <- cdmFromCon(con1, cdmSchema = "main", writeSchema = "main", cdmName = "eunomia")
  expect_error(copyCdmTo(con2, cdm, schema = c(schema = "main")))
})

test_that("copyCdmTo copies cohort tables", {
  skip_if_not_installed("duckdb")
  con1 <- local_eunomia_con()
  con2 <- DBI::dbConnect(duckdb::duckdb(), ":memory:")
  on.exit(DBI::dbDisconnect(con2, shutdown = TRUE), add = TRUE)

  cdm <- cdmFromCon(con1, cdmSchema = "main", writeSchema = "main", cdmName = "eunomia")
  cohort_set <- readCohortSet(system.file("cohorts1", package = "CDMConnector"))
  cdm <- generateCohortSet(cdm, cohort_set, name = "my_cohort", overwrite = TRUE)

  newCdm <- copyCdmTo(con2, cdm, schema = c(schema = "main"), overwrite = TRUE)

  expect_true("my_cohort" %in% names(newCdm))
  cohort_data <- newCdm$my_cohort %>% dplyr::collect()
  expect_true(nrow(cohort_data) >= 0)
})

Try the CDMConnector package in your browser

Any scripts or data that you put into this service are public.

CDMConnector documentation built on April 3, 2026, 9:09 a.m.