tests/testthat/test_sql_table.R

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__)
  }
)
EntirelyDS/sqlmapr documentation built on May 6, 2019, 3:48 p.m.