# Build Temporary dataset for use in testing
testdat <- iris[1:100, ]

test_that("Check argument type, test if error message will show correctly", {
  expect_error(
    obj_rtf_border(tbl = testdat, border_left = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_right = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_top = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_bottom = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_color_left = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_color_right = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_color_top = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_color_bottom = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, cell_justification = 1),
    "The argument type did not match: character"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, border_width = "1"),
    "The argument type did not match: integer/numeric"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, cell_height = "1"),
    "The argument type did not match: integer/numeric"
  )
  expect_error(
    obj_rtf_border(tbl = testdat, cell_nrow = "1"),
    "The argument type did not match: integer/numeric"
  )
})

test_that("Check argument values, test if error message will show correctly", {
  expect_error(obj_rtf_border(tbl = testdat, border_left = "testing"))
  expect_error(obj_rtf_border(tbl = testdat, border_right = "testing"))
  expect_error(obj_rtf_border(tbl = testdat, border_top = "testing"))
  expect_error(obj_rtf_border(tbl = testdat, border_bottom = "testing"))
  expect_error(obj_rtf_border(tbl = testdat, border_color_left = "redd"))
  expect_error(obj_rtf_border(tbl = testdat, border_color_right = "redd"))
  expect_error(obj_rtf_border(tbl = testdat, border_color_top = "redd"))
  expect_error(obj_rtf_border(tbl = testdat, border_color_bottom = "redd"))
  expect_error(obj_rtf_border(tbl = testdat, cell_justification = "leftt"))
  expect_error(obj_rtf_border(tbl = testdat, border_width = -1))
  expect_error(obj_rtf_border(
    tbl = testdat, border_color_top = NULL,
    border_color_first = "red"
  ))
  expect_error(obj_rtf_border(
    tbl = testdat, border_color_bottom = NULL,
    border_color_last = "red"
  ))
})

test_that("Test if attributes are assigned correctly", {
  a <- obj_rtf_border(
    tbl = testdat, border_left = "single",
    border_right = "single",
    border_top = "single",
    border_bottom = "single",
    border_color_left = "red",
    border_color_right = "red",
    border_color_top = "red",
    border_color_bottom = "red",
    border_color_first = "red",
    border_color_last = "red",
    cell_justification = "l",
    border_width = 5,
    cell_height = 5,
    cell_nrow = 5
  )
  expect_equal(attr(a, "border_left")[1], "single")
  expect_equal(attr(a, "border_right")[1], "single")
  expect_equal(attr(a, "border_top")[1], "single")
  expect_equal(attr(a, "border_bottom")[1], "single")
  expect_equal(attr(a, "border_color_left")[1], "red")
  expect_equal(attr(a, "border_color_right")[1], "red")
  expect_equal(attr(a, "border_color_top")[1], "red")
  expect_equal(attr(a, "border_color_bottom")[1], "red")
  expect_equal(attr(a, "border_color_first")[1], "red")
  expect_equal(attr(a, "border_color_last")[1], "red")
  expect_equal(attr(a, "cell_justification")[1], "l")
  expect_equal(attr(a, "border_width")[1], 5)
  expect_equal(attr(a, "border_width")[1], 5)
  expect_equal(attr(a, "border_width")[1], 5)
})

test_that("Test if color_used is derived correctly", {
  a <- obj_rtf_border(
    tbl = testdat, border_left = "single",
    border_right = "single",
    border_top = "single",
    border_bottom = "single",
    border_color_left = "red",
    border_color_right = "red",
    border_color_top = "red",
    border_color_bottom = "red",
    border_color_first = "red",
    border_color_last = "red",
    cell_justification = "l",
    border_width = 5,
    cell_height = 5,
    cell_nrow = 5
  )
  expect_equal(attr(a, "use_color")[1], TRUE)

  a <- obj_rtf_border(
    tbl = testdat, border_left = "single",
    border_right = "single",
    border_top = "single",
    border_bottom = "single",
    border_color_left = "black",
    border_color_right = "black",
    border_color_top = "black",
    border_color_bottom = "black",
    border_color_first = "black",
    border_color_last = "black",
    cell_justification = "l",
    border_width = 5,
    cell_height = 5,
    cell_nrow = 5
  )
  expect_equal(attr(a, "use_color")[1], FALSE)
})

test_that("Test when input is a vector and attribute length is greater than 1", {
  expect_error(obj_rtf_border(
    tbl = iris[c(1:5), 1],
    border_top = c("single", "single")
  ))
})

test_that("Test when input is a vector and attribute length is equal to 1", {
  a <- obj_rtf_border(
    tbl = iris[c(1:5), 1],
    border_top = c("single")
  )
  expect_equal(attr(a, "border_top"), "single")
})
