# This tests the permission setter functions 
# library(testthat); library(gypsum); source("setup.R"); source("test-permissions.R")

test_that("permission setting works as expected", {
    skip_if(is.na(gh_token))
    removeProject("test-R-perms", token=gh_token)
    createProject("test-R-perms", owners="LTLA", token=gh_token)

    until <- round(Sys.time() + 1000000)
    setPermissions("test-R-perms",
        owners="jkanche", 
        uploaders=list(
           list(id="lawremi", until=until)
        ),
        token=gh_token
    )

    perms <- fetchPermissions("test-R-perms")
    expect_identical(perms$owners, list("LTLA", "jkanche"))
    expect_identical(length(perms$uploaders), 1L)
    expect_identical(perms$uploaders[[1]]$id, "lawremi")
    expect_equal(perms$uploaders[[1]]$until, until)

    # Checking uploader appending, while also checking owners=NULL.
    setPermissions("test-R-perms", uploaders=list(list(id="ArtifactDB-bot", trusted=TRUE)), token=gh_token)
    perms <- fetchPermissions("test-R-perms")
    expect_identical(perms$owners, list("LTLA", "jkanche"))
    expect_identical(length(perms$uploaders), 2L)
    expect_identical(perms$uploaders[[1]]$id, "lawremi")
    expect_identical(perms$uploaders[[2]]$id, "ArtifactDB-bot")
    expect_true(perms$uploaders[[2]]$trusted)

    # Checking union of owners, and also that uploaders=NULL works.
    setPermissions("test-R-perms", owners=c("PeteHaitch", "LTLA"), token=gh_token)
    perms <- fetchPermissions("test-R-perms")
    expect_identical(perms$owners, list("LTLA", "jkanche", "PeteHaitch"))
    expect_identical(length(perms$uploaders), 2L)

    # Resetting the owners back.
    setPermissions("test-R-perms", owners="LTLA", append=FALSE, token=gh_token)
    perms <- fetchPermissions("test-R-perms")
    expect_identical(perms$owners, list("LTLA"))
    expect_identical(length(perms$uploaders), 2L)

    # Now resetting the uploaders. 
    setPermissions("test-R-perms", uploaders=list(), append=FALSE, token=gh_token)
    perms <- fetchPermissions("test-R-perms")
    expect_identical(perms$owners, list("LTLA"))
    expect_identical(length(perms$uploaders), 0L)
})