# repo_auto_link --------------------------------------------------------- test_that("authors are automatically linked", { pkg <- list(repo = repo_meta(user = "TEST/")) # email addresses shouldn't get linked expect_equal(repo_auto_link(pkg, "x@y.com"), "x@y.com") # must have leading whitespace or open parens expect_equal(repo_auto_link(pkg, "@y"), "@y") expect_equal(repo_auto_link(pkg, " @y"), " @y") expect_equal(repo_auto_link(pkg, "(@y)"), "(@y)") expect_equal(repo_auto_link(pkg, "
@y some other text.
"), "@y some other text.
") }) test_that("issues are automatically linked", { pkg <- list(repo = repo_meta(issue = "TEST/")) expect_equal(repo_auto_link(pkg, "(#123"), "(#123") expect_equal(repo_auto_link(pkg, "in #123"), "in #123") expect_equal(repo_auto_link(pkg, "#123 some other text.
"), "#123 some other text.
") expect_equal(repo_auto_link(pkg, ""), "") }) test_that("already linked issues aren't re-linked", { pkg <- list(repo = repo_meta(issue = "TEST/")) expect_equal(repo_auto_link(pkg, ""), "") }) test_that("URLs with hash (#) are preserved", { pkg <- list(repo = repo_meta(issue = "TEST/")) expect_equal( repo_auto_link(pkg, "[example 5.4](https:/my.site#5-4-ad)"), "[example 5.4](https:/my.site#5-4-ad)" ) }) test_that("Jira issues are automatically linked", { pkg <- list(repo = repo_meta(issue = "TEST/")) pkg$repo$jira_projects <- c("JIRA", "OTHER") expect_equal(repo_auto_link(pkg, "JIRA-123"), "JIRA-123") expect_equal(repo_auto_link(pkg, "OTHER-4321"), "OTHER-4321") # but only the jira projects specified are caught expect_equal(repo_auto_link(pkg, "NOPE-123"), "NOPE-123") }) # repo_source ------------------------------------------------------------- test_that("repo_source() truncates automatically", { withr::local_envvar(GITHUB_HEAD_REF = "HEAD") pkg <- list(repo = repo_meta_gh_like("https://github.com/r-lib/pkgdown")) expect_snapshot({ cat(repo_source(pkg, character())) cat(repo_source(pkg, "a")) cat(repo_source(pkg, letters[1:10])) }) }) test_that("repo_source() is robust to trailing slash", { pkg <- list(repo = repo_meta_gh_like("https://github.com/r-lib/pkgdown")) meta <- function(x) { list(repo = list(url = list(source = x))) } source <- "Source:a
"
expect_equal(repo_source(meta("http://example.com"), "a"), source)
expect_equal(repo_source(meta("http://example.com/"), "a"), source)
})
test_that("repo_source() uses the branch setting in meta", {
pkg <- local_pkgdown_site(
meta = list(repo = list(branch = "main")),
desc = list(URL = "https://github.com/r-lib/pkgdown")
)
expect_match(
repo_source(pkg, "a"),
"https://github.com/r-lib/pkgdown/blob/main/a"
)
})
# package_repo ------------------------------------------------------------
test_that("can find github from BugReports or URL", {
withr::local_envvar(GITHUB_HEAD_REF = "HEAD")
expected <- repo_meta_gh_like("https://github.com/r-lib/pkgdown")
pkg <- local_pkgdown_site(desc = list(
URL = "https://github.com/r-lib/pkgdown"
))
expect_equal(package_repo(pkg), expected)
# BugReports beats URL
pkg <- local_pkgdown_site(desc = list(
URL = "https://github.com/r-lib/BLAHBLAH",
BugReports = "https://github.com/r-lib/pkgdown/issues"
))
expect_equal(package_repo(pkg), expected)
# URL can be in any position
pkg <- local_pkgdown_site(desc = list(
URL = "https://pkgdown.r-lib.org, https://github.com/r-lib/pkgdown"
))
expect_equal(package_repo(pkg), expected)
})
test_that("can find gitlab url", {
withr::local_envvar(GITHUB_HEAD_REF = "HEAD")
url <- "https://gitlab.com/msberends/AMR"
pkg <- local_pkgdown_site(desc = list(URL = url))
expect_equal(package_repo(pkg), repo_meta_gh_like(url))
})
test_that("uses GITHUB env vars if set", {
withr::local_envvar(GITHUB_HEAD_REF = NA, GITHUB_REF_NAME = "abc")
expect_equal(
repo_meta_gh_like("https://github.com/r-lib/pkgdown")$url$source,
"https://github.com/r-lib/pkgdown/blob/abc/"
)
withr::local_envvar(GITHUB_HEAD_REF = "xyz")
expect_equal(
repo_meta_gh_like("https://github.com/r-lib/pkgdown")$url$source,
"https://github.com/r-lib/pkgdown/blob/xyz/"
)
})
test_that("GitLab subgroups are properly parsed", {
issue_url <- function(...) {
pkg <- local_pkgdown_site(desc = list(...))
pkg$repo$url$issue
}
base <- "https://gitlab.com/salim_b/r/pkgs/pal"
expected <- paste0(base, "/issues/")
expect_equal(issue_url(URL = base), expected)
expect_equal(issue_url(URL = paste0(base, "/")), expected)
expect_equal(issue_url(BugReports = paste0(base, "/issues")), expected)
expect_equal(issue_url(BugReports = paste0(base, "/issues/")), expected)
})
test_that("can find github enterprise url", {
withr::local_envvar(GITHUB_HEAD_REF = "HEAD")
url <- "https://github.acme.com/roadrunner/speed"
pkg <- local_pkgdown_site(desc = list(BugReports = url))
expect_equal(package_repo(pkg), repo_meta_gh_like(url))
})
test_that("meta overrides autodetection", {
pkg <- local_pkgdown_site(
meta = list(repo = list(url = list(home = "http://one.com"))),
desc = list(URL = "http://two.com")
)
expect_equal(package_repo(pkg)$url$home, "http://one.com")
})
test_that("returns NULL if no urls found", {
pkg <- local_pkgdown_site(desc = list(URL = "https://pkgdown.r-lib.org"))
expect_null(package_repo(pkg))
})
test_that("repo_type detects repo type", {
repo_type2 <- function(url) {
repo_type(list(repo = list(url = list(home = url))))
}
expect_equal(repo_type2("https://github.com/r-lib/pkgdown"), "github")
expect_equal(repo_type2("https://github.r-lib.com/pkgdown"), "github")
expect_equal(repo_type2("https://gitlab.com/r-lib/pkgdown"), "gitlab")
expect_equal(repo_type2("https://gitlab.r-lib.com/pkgdown"), "gitlab")
expect_equal(repo_type2(NULL), "other")
})