File: test-cache.R

package info (click to toggle)
r-cran-gitcreds 0.1.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 448 kB
  • sloc: sh: 13; makefile: 2
file content (94 lines) | stat: -rw-r--r-- 2,928 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

gc_test_that("gitcreds_cache_envvvar", {
  cases <- list(
    c("https://github.com", "GITHUB_PAT_GITHUB_COM"),
    c("https://api.github.com/path/to/endpoint", "GITHUB_PAT_GITHUB_COM"),
    c("https://jane@github.com", "GITHUB_PAT_JANE_AT_GITHUB_COM"),
    c("https://another.site.github.com", "GITHUB_PAT_ANOTHER_SITE_GITHUB_COM"),
    c("http://foo.bar", "GITHUB_PAT_FOO_BAR")
  )

  for (case in cases) {
    expect_equal(gitcreds_cache_envvar(case[[1]]), case[[2]])
  }

  # vectorized
  expect_equal(
    gitcreds_cache_envvar(vapply(cases, "[[", character(1), 1)),
    vapply(cases, "[[", character(1), 2)
  )

  # error
  expect_error(gitcreds_cache_envvar("foo.bar"), "Invalid URL")
})

gc_test_that("gitcreds_get_cache", {
  # single password
  withr::local_envvar(c(GITHUB_PAT_GITHUB_COM = "token"))
  cred <- gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM")
  expect_s3_class(cred, "gitcreds")
  expect_equal(cred$password, "token")

  # username + password
  withr::local_envvar(c(GITHUB_PAT_GITHUB_COM = "user:pass"))
  cred <- gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM")
  expect_s3_class(cred, "gitcreds")
  expect_equal(cred$username, "user")
  expect_equal(cred$password, "pass")

  # fall back to GITHUB_PAT
  withr::local_envvar(c(
    GITHUB_PAT_GITHUB_COM = NA_character_,
    GITHUB_PAT = "mytoken"
  ))
  cred <- gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM")
  expect_s3_class(cred, "gitcreds")
  expect_equal(cred$password, "mytoken")

  # fall back to GITHUB_TOKEN
  withr::local_envvar(c(
    GITHUB_PAT_GITHUB_COM = NA_character_,
    GITHUB_PAT = NA_character_,
    GITHUB_TOKEN = "mytoken3"
  ))
  cred <- gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM")
  expect_s3_class(cred, "gitcreds")
  expect_equal(cred$password, "mytoken3")

  # Not set
  withr::local_envvar(c(
    GITHUB_PAT_GITHUB_COM = NA_character_,
    GITHUB_PAT = NA_character_,
    GITHUB_TOKEN = NA_character_
  ))
  expect_null(gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM"))

  # Warn for invalid
  withr::local_envvar(c(GITHUB_PAT_GITHUB_COM = "what:is:this"))
  expect_warning(
    expect_null(gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM")),
    "Invalid gitcreds credentials in env var"
  )

  # fails if it has to
  withr::local_envvar(c(GITHUB_PAT_GITHUB_COM = "FAIL"))
  expect_error(
    gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM"),
    class = "gitcreds_no_credentials"
  )

  withr::local_envvar(c(GITHUB_PAT_GITHUB_COM = "FAIL:gitcreds_no_helper"))
  expect_error(
    gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM"),
    class = "gitcreds_no_helper"
  )
})

gc_test_that("gitcreds_set_cache", {
  # : is escaped
  gitcreds$gitcreds_set_cache("GITHUB_PAT_GITHUB_COM", list("x:y" = "a:b"))
  cred <- gitcreds$gitcreds_get_cache("GITHUB_PAT_GITHUB_COM")
  expect_s3_class(cred, "gitcreds")
  expect_equal(cred$username, "x:y")
  expect_equal(cred$password, "a:b")
})