# Domain Operations Tests

test_that("domain_report validates input correctly", {
  expect_error(domain_report(), class = "virustotal_validation_error")
  expect_error(domain_report(NULL), class = "virustotal_validation_error")
  expect_error(domain_report(123), class = "virustotal_validation_error")
  expect_error(domain_report(""), class = "virustotal_validation_error")
  expect_error(
    domain_report("invalid..domain"),
    class = "virustotal_validation_error"
  )
})

test_that("domain cleaning works correctly", {
  expect_equal(gsub("^https?://", "", "http://example.com"), "example.com")
  expect_equal(gsub("^www\\.", "", "www.example.com"), "example.com")
  expect_equal(gsub("/.*$", "", "example.com/path"), "example.com")
})

test_that("get_domain_comments validates input correctly", {
  expect_error(get_domain_comments(), "Assertion on 'domain' failed")
  expect_error(get_domain_comments(NULL), "Assertion on 'domain' failed")
  expect_error(get_domain_comments(123), "Assertion on 'domain' failed")
  expect_error(
    get_domain_comments(""),
    "All elements must have at least 1 characters"
  )
})

test_that("post_domain_comments validates input correctly", {
  expect_error(post_domain_comments(), "Assertion on 'domain' failed")
  expect_error(
    post_domain_comments("example.com"),
    "Assertion on 'comment' failed"
  )
  expect_error(
    post_domain_comments("example.com", ""),
    "All elements must have at least 1 characters"
  )
})

test_that("get_domain_votes validates input correctly", {
  expect_error(get_domain_votes(), "Assertion on 'domain' failed")
  expect_error(get_domain_votes(NULL), "Assertion on 'domain' failed")
  expect_error(
    get_domain_votes(""),
    "All elements must have at least 1 characters"
  )
})

test_that("post_domain_votes validates input correctly", {
  expect_error(post_domain_votes(), "Assertion on 'domain' failed")
  expect_error(post_domain_votes("example.com"), "Assertion on 'vote' failed")
  expect_error(
    post_domain_votes("example.com", ""),
    "All elements must have at least 1 characters"
  )
})

test_that("get_domain_info validates input correctly", {
  expect_error(get_domain_info(), "Assertion on 'domain' failed")
  expect_error(get_domain_info(NULL), "Assertion on 'domain' failed")
  expect_error(
    get_domain_info(""),
    "All elements must have at least 1 characters"
  )
})

test_that("get_domain_relationship validates input correctly", {
  expect_error(get_domain_relationship(), "Assertion on 'domain' failed")
  expect_error(get_domain_relationship(NULL), "Assertion on 'domain' failed")
  expect_error(
    get_domain_relationship(""),
    "All elements must have at least 1 characters"
  )
})

test_that("rescan_domain validates input correctly", {
  expect_error(rescan_domain(), "Assertion on 'domain' failed")
  expect_error(rescan_domain(NULL), "Assertion on 'domain' failed")
  expect_error(
    rescan_domain(""),
    "All elements must have at least 1 characters"
  )
})

test_that("domain operations work with mocked responses", {
  skip_if_not_installed("httptest")
  skip_if(Sys.getenv("VirustotalToken") == "", "API key not set")

  expect_true(exists("domain_report"))
  expect_true(exists("get_domain_comments"))
  expect_true(exists("post_domain_comments"))
  expect_true(exists("get_domain_votes"))
  expect_true(exists("post_domain_votes"))
  expect_true(exists("get_domain_info"))
  expect_true(exists("get_domain_relationship"))
  expect_true(exists("rescan_domain"))
})
