tests/testthat/test_loadDataADaMSDTM.R

context("Import SAS and xpt datasets")

library(tools)
library(haven)

test_that("A SAS dataset file is correctly imported", {
	
	# create dummy datasets
	data <- data.frame(
		USUBJID = sample.int(5),
		TRT = c("A", "B", "A", "B", "A")
	)
	pathSAS7bdat <- tempfile(fileext = ".sas7bdat")
	haven::write_sas(data = data, path = pathSAS7bdat)

	expect_message(adamData <- loadDataADaMSDTM(files = pathSAS7bdat, verbose = TRUE))
	listNames <- names(adamData)
			
	# Output expectations #
	expect_is(adamData, "list")
	expect_named(adamData)
	fileName <- tools::file_path_sans_ext(basename(pathSAS7bdat))
	isFileImported <- sapply(fileName, function(name) any(grepl(name, x = names(adamData), ignore.case = TRUE)))
	expect_true(all(isFileImported))
	
	datasets <- as.character(sapply(adamData, function(data) unique(data$DATASET)))
	isDatasetSet <- sapply(datasets, function(name) any(grepl(name, x = names(adamData), ignore.case = TRUE)))
	expect_true(all(isDatasetSet))
	
	tmp <- sapply(adamData, function(x) expect_is(x, class = "data.frame"))
	
})

test_that("A warning is generated if two SAS dataset with the same name are specified", {
			
	# create dummy datasets
	data <- data.frame(
		USUBJID = sample.int(5),
		TRT = c("A", "B", "A", "B", "A")
	)
	pathSAS7bdat <- tempfile(fileext = ".sas7bdat")
	haven::write_sas(data = data, path = pathSAS7bdat)
	expect_warning(
		expect_message(loadDataADaMSDTM(files = c(pathSAS7bdat, pathSAS7bdat))),
		regexp = "duplicated file name"
	)
	
})

test_that("An error is generated if the SAS data file has a wrong file extensions", {
			
	expect_error(
		expect_message(loadDataADaMSDTM("test.xlsx")),
		"File.*extension.*not supported"
	)
	
})

test_that("An error is generated if specified encoding doesn't exist", {
			
	data <- data.frame(
		USUBJID = sample.int(5),
		TRT = c("A", "B", "A", "B", "A")
	)
	pathSAS7bdat <- tempfile(fileext = ".sas7bdat")
	haven::write_sas(data = data, path = pathSAS7bdat)
	expect_error(
		expect_message(loadDataADaMSDTM(files = pathSAS7bdat, encoding = "test"))
	)
	
})

test_that("An argument is correctly passed to the internal import function", {
			
	data <- data.frame(
		USUBJID = sample.int(5),
		TRT = c("A", "B", "A", "B", "A")
	)
	pathSAS7bdat <- tempfile(fileext = ".sas7bdat")
	haven::write_sas(data = data, path = pathSAS7bdat)
	
	# pass arguments to 'read_sas'
	dataSubset <- loadDataADaMSDTM(files = pathSAS7bdat, n_max = 3)
	expect_equal(nrow(dataSubset[[1]]), 3)
			
})

test_that("Variable labels are correctly imported from a SAS dataset file", {
			
	# create dummy dataset
	data <- data.frame(
		USUBJID = structure(sample.int(5), label = "Subject ID"),
		TRT = structure(c("A", "B", "A", "B", "A"), label = "Treatment"),
		stringsAsFactors = FALSE
	)
	pathSAS7bdat <- tempfile(fileext = ".sas7bdat")
	haven::write_sas(data = data, path = pathSAS7bdat)		
		
	adamData <- loadDataADaMSDTM(files = pathSAS7bdat)	
	labelVars <- attr(adamData, "labelVars")
	
	expect_is(labelVars, "character")
	expect_named(labelVars)
	# all variables have labels, and all labels are present in the data:
	expect_setequal(setdiff(names(labelVars), "DATASET"), colnames(data))
			
})

test_that("Date variables are correctly imported from a SAS dataset file", {
			
	# create dummy dataset
	data <- data.frame(
		USUBJID = sample.int(3), 
		ADTC = c("2020-04-10", "2020-01-01", "2019-12-03"), 
		stringsAsFactors = FALSE
	)
	pathData <- tempfile(fileext = ".sas7bdat")
	haven::write_sas(data = data, path = pathData)				
	
	# variable in correct date format
	expect_message(
		adamData <- loadDataADaMSDTM(
			files = pathData, 
			convertToDate = TRUE, dateVars = "ADTC"
		),
		message = paste("Convert date to calendar date/time format")
	)
	expect_is(adamData[[1]]$ADTC, "POSIXct")
	
	wrongDateFmtVar <- "CMSTDTC"
	
	# create dummy dataset
	data <- data.frame(
		USUBJID = sample.int(3), 
		ADTC = c("20200410", "20200101", "20180309"), 
		stringsAsFactors = FALSE
	)
	pathData <- tempfile(fileext = ".sas7bdat")
	haven::write_sas(data = data, path = pathData)	
	
	expect_warning(
		adamData <- loadDataADaMSDTM(files = pathData, 
			convertToDate = TRUE, dateVars = "ADTC"),
		message = "Date is not of specified calendar date format"
	)
	expect_is(adamData[[1]]$ADTC, "character")
			
})

test_that("A warning is generated if the object to convert to date is not in the correct date format", {
			
	expect_warning(
		convertToDateTime(c("2020", "01-04-2020")), 
		regexp = "not of specified calendar date format"
	)
			
})
			

test_that("A date is correctly converted to a date/time object", {
	
	expect_message(
		dates <- convertToDateTime(c("2020-04-01")), 
		regexp = "Convert vector to calendar date/time format"
	)
	expect_is(dates, "POSIXt")
	
})

test_that("An error is generated if the specified object to convert to date is not a date", {
			
	# R > 4.2.2 support numeric for date conversion (in as.POSIXct), so test with a data.frame
	expect_error(convertToDateTime(data.frame()))
			
})
			

test_that("A SAS xpt file is correctly imported", {
			
	# create dummy dataset
	data <- data.frame(
		USUBJID = structure(sample.int(5), label = "Subject ID"),
		TRT = structure(c("A", "B", "A", "B", "A"), label = "Treatment"),
		stringsAsFactors = FALSE
	)
	pathXPTFile <- tempfile(fileext = ".xpt")
	haven::write_xpt(data = data, path = pathXPTFile)		
			
	expect_message(adamDataFromXpt <- loadDataADaMSDTM(files = pathXPTFile, verbose = TRUE))
	
	expect_is(adamDataFromXpt, "list")
	expect_named(adamDataFromXpt)
	fileName <- tools::file_path_sans_ext(basename(pathXPTFile))
	isFileImported <- sapply(fileName, function(name) any(grepl(name, x = names(adamDataFromXpt), ignore.case = TRUE)))
	expect_true(all(isFileImported))			
			
})

Try the clinUtils package in your browser

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

clinUtils documentation built on Jan. 6, 2023, 5:29 p.m.