library(sqlmapr)
library(mockable)
testthat::context("SQLTable")
mock_dbConnect <- function(drv, ...){
assertive::assert_is_s4(drv)
assertive::assert_all_are_true(class(drv) == "MySQLDriver")
conn_call <- stringr::str_c(
"DBI::dbConnect(drv = RMySQL::MySQL(), dbname = '", ..1, "', ",
"host = '", ..2, "', port = ", ..3, ", ",
"user = '", ..4, "', password = '", ..5, "')"
)
return(conn_call)
}
testthat::test_that(
"SQLTable initialisation with no params",
{
test_table <- SQLTable$new()
testthat::expect_is(test_table, 'R6')
testthat::expect_is(test_table, 'SQLTable')
testthat::expect_true(is.na(test_table$name))
testthat::expect_true(is.na(test_table$db_name))
testthat::expect_true(is.na(test_table$sql_snippet()))
testthat::expect_true(is.null(test_table$column_details))
testthat::expect_false(test_table$is_connected())
}
)
testthat::test_that(
"SQLTable initialisation with params",
{
col_df <- data.frame(
name = c('id', 'name'), type = c('INTEGER', 'VARCHAR(45)'),
is_pk = c(TRUE, FALSE), is_nn = c(TRUE, FALSE),
is_uq = c(0, 1), is_un = c(TRUE, FALSE), is_ai = c(FALSE, FALSE),
default = c(NA, 'tmp_name'),
stringsAsFactors = FALSE
)
test_table <- SQLTable$new(
name = 'test', db_name = 'test_db', column_details = col_df
)
testthat::expect_is(test_table, 'R6')
testthat::expect_is(test_table, 'SQLTable')
testthat::expect_equal(test_table$name, 'test')
testthat::expect_equal(test_table$db_name, 'test_db')
testthat::expect_equal(test_table$sql_snippet(), '`test_db`.`test` AS t')
testthat::expect_equal(test_table$column_details, col_df)
testthat::expect_false(test_table$is_connected())
}
)
testthat::test_that(
"SQLTable post initialisation assignment",
{
col_df <- data.frame(
name = c('id', 'name'), type = c('INTEGER', 'VARCHAR(45)'),
is_pk = c(TRUE, FALSE), is_nn = c(TRUE, FALSE),
is_uq = c(0, 1), is_un = c(TRUE, FALSE), is_ai = c(FALSE, FALSE),
default = c(NA, 'tmp_name'),
stringsAsFactors = FALSE
)
test_table <- SQLTable$new()
test_table$name <- 'test'
test_table$db_name <- 'test_db'
test_table$column_details <- col_df
testthat::expect_equal(test_table$name, 'test')
testthat::expect_equal(test_table$db_name, 'test_db')
testthat::expect_equal(test_table$sql_snippet(), '`test_db`.`test` AS t')
testthat::expect_equal(test_table$column_details, col_df)
}
)
testthat::test_that(
"SQLTable database connection",
{
sqlmapr:::dbConnect__ %mock% mock_dbConnect
col_df <- data.frame(
name = c('id', 'name'), type = c('INTEGER', 'VARCHAR(45)'),
is_pk = c(TRUE, FALSE), is_nn = c(TRUE, FALSE),
is_uq = c(0, 1), is_un = c(TRUE, FALSE), is_ai = c(FALSE, FALSE),
default = c(NA, 'tmp_name'),
stringsAsFactors = FALSE
)
test_table <- SQLTable$new(
name = 'test', db_name = 'test_db', column_details = col_df
)
cred <- list(
host = "host.hosts.com", port = "3306", database = "test_db",
user = "ruser", password = "pwd123"
)
test_table$connect(cred)
conn_call <- stringr::str_c(
"DBI::dbConnect(drv = RMySQL::MySQL(), dbname = 'test_db', ",
"host = 'host.hosts.com', port = 3306, user = 'ruser', ",
"password = 'pwd123')"
)
testthat::expect_equal(
test_table$.__enclos_env__[['private']]$conn_, conn_call
)
unmock(sqlmapr:::dbConnect__)
}
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.