test_that("synonyms returns the correct value", {
  skip_on_cran()
  vcr::use_cassette("synonyms_itis", {
    tt <- sw(synonyms("Poa annua", db = "itis", rows = 1,
      messages = FALSE))
  })

	expect_match(names(tt), "Poa annua")
	expect_match(tt[[1]][1, "syn_name"], "Poa annua var. aquatica")

	expect_is(tt, "synonyms")
	expect_equal(attr(tt, "db"), "itis")
	expect_is(tt[[1]], "data.frame")

	expect_gt(NROW(tt[[1]]), 1)
})

test_that("synonyms works with worms data", {
  skip_on_cran()
  # VCR bugging out on this one?
  # vcr::use_cassette("synonyms_worms", {
  #   tt <- synonyms('Pomatomus saltatrix', db = "worms",
  #     messages = FALSE)
  # })
  tt <- synonyms('Pomatomus saltatrix', db = "worms",
                 messages = FALSE)
  
  expect_match(names(tt), 'Pomatomus saltatrix')
  expect_match(tt$`Pomatomus saltatrix`$valid_name[1], 'Pomatomus saltatrix')

  expect_is(tt, "synonyms")
  expect_equal(attr(tt, "db"), "worms")
  expect_is(tt[[1]], "data.frame")
  expect_is(tt[[1]], "tbl_df")
})

# test_that("synonyms: data sources return consistent outputs", {
#   skip_on_cran()
#   if (Sys.getenv('IUCN_REDLIST_KEY') == "") {
#     skip("No IUCN api key so test not run.")
#   }
#   if (Sys.getenv('TROPICOS_KEY') == "") {
#     skip("No Tropicos api key so test not run.")
#   }
#   
#   # when name not found, returns NA
#   vcr::use_cassette("synonyms_name_not_found", {
#     aa <- synonyms("Foo bar", db="itis", messages = FALSE)
#     bb <- synonyms("Foo bar", db="tropicos", messages = FALSE)
#     cc <- synonyms("Foo barasdfasdf", db="nbn", messages = FALSE)
#     ee <- synonyms("Foo bar", db="worms", messages = FALSE)
#     gg <- synonyms("Foo bar", db="pow", messages = FALSE)
#   })
# 
#   vcr::use_cassette("synonyms_name_not_found_redlist", {
#     ff <- synonyms("Foo bar", db="iucn", messages = FALSE)
#   }, match_requests_on = c("method", "query"))
# 
#   for (i in list(aa, bb, cc, ee, ff, gg)) expect_true(is.na(i[[1]]))
#   
# 
#   # when name found, but no synonyms found, returns empty data.frame
#   vcr::use_cassette("synonyms_name_found_but_no_synonyms", {
#     gg <- synonyms("Epigonus thai", db="worms", messages = FALSE)
#     hh <- synonyms("Arctoa andersonii", db="nbn", rank = "species", rows=1, messages = FALSE)
#     # kk <- synonyms("Pinus balfouriana", db="itis", messages = FALSE)
#     ll <- synonyms("Pinus contorta", db="tropicos", messages = FALSE)
#     mm <- synonyms("Quercus ransomii", db="pow", accepted=FALSE, messages = FALSE)
#   })
# 
#   vcr::use_cassette("synonyms_name_found_but_no_synonyms_redlist", {
#     ii <- synonyms(get_iucn('Ursus americanus'), db="iucn", messages = FALSE)
#   }, match_requests_on = c("method", "query"))
#   
#   # type is data.frame
#   for (i in list(gg, hh, ii, ll, mm)) expect_is(i[[1]], "data.frame")
#   # no rows
#   for (i in list(gg, hh, ii, ll, mm)) expect_equal(NROW(i[[1]]), 0)
#   # no names
#   for (i in list(gg, hh, ii, ll, mm)) expect_equal(length(names(i[[1]])), 0)
# })

test_that("warn on mismatch 'db'", {
  skip_on_cran()
  vcr::use_cassette("synonyms_warn_on_db_mismatch", {
    expect_warning(
      synonyms(
        get_tsn("Poa annua"), db = "tropicos"))
  })
})
