Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 22 additions & 13 deletions R/permissions.R
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,19 @@ setMethod("members<-", c("CrunchTeam", "character"), function(x, value) {
return(refresh(x))
})

promoteArtifact <- function(x, value) {
stopifnot(is.TRUEorFALSE(value))
if (is.public(x) == value) return(x)
if (!value) {
halt(
"It is no longer possible to demote a artifact to ",
"be private after it has been public."
)
}
crPOST(shojiURL(x, "catalogs", "promote"))
refresh(x)
}


#' View and modify the "public" attribute of artifacts
#'
Expand All @@ -99,20 +112,14 @@ setMethod("is.public", "CrunchFilter", function(x) x@body$is_public)

#' @rdname is-public
#' @export
setMethod("is.public<-", "CrunchFilter", function(x, value) {
stopifnot(is.TRUEorFALSE(value))
setEntitySlot(x, "is_public", value)
})
setMethod("is.public<-", "CrunchFilter", promoteArtifact)

#' @rdname is-public
#' @export
setMethod("is.public", "CrunchDeck", function(x) x@body$is_public)
#' @rdname is-public
#' @export
setMethod("is.public<-", "CrunchDeck", function(x, value) {
stopifnot(is.TRUEorFALSE(value))
setEntitySlot(x, "is_public", value)
})
setMethod("is.public<-", "CrunchDeck", promoteArtifact)
#' @rdname is-public
#' @export
setMethod("is.public", "MultitableCatalog", function(x) {
Expand All @@ -122,7 +129,11 @@ setMethod("is.public", "MultitableCatalog", function(x) {
#' @rdname is-public
#' @export
setMethod("is.public<-", "MultitableCatalog", function(x, value) {
setIndexSlotOnEntity(x, "is_public", value, what = logical(1))
mapply(
function(idx, val) promoteArtifact(x[[idx]], val),
idx = seq_along(x), val = value
)
refresh(x)
})

#' @rdname is-public
Expand All @@ -131,10 +142,8 @@ setMethod("is.public", "Multitable", function(x) x@body$is_public)

#' @rdname is-public
#' @export
setMethod("is.public<-", "Multitable", function(x, value) {
stopifnot(is.TRUEorFALSE(value))
setEntitySlot(x, "is_public", value)
})
setMethod("is.public<-", "Multitable", promoteArtifact)


#' Read and set edit privileges
#'
Expand Down
3 changes: 3 additions & 0 deletions mocks/app.crunch.io/api/datasets/1/filters/filter1.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
"element": "shoji:entity",
"self": "https://app.crunch.io/api/datasets/1/filters/filter1/",
"description": "Detail information for one filter",
"catalogs": {
"promote": "https://app.crunch.io/api/datasets/1/filters/filter1/promote/"
},
"body": {
"is_public": false,
"owner_id": "https://app.crunch.io/api/users/user1/",
Expand Down
3 changes: 3 additions & 0 deletions mocks/app.crunch.io/api/datasets/1/filters/filter2.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
"element": "shoji:entity",
"self": "https://app.crunch.io/api/datasets/1/filters/filter2/",
"description": "Detail information for one filter",
"catalogs": {
"promote": "https://app.crunch.io/api/datasets/1/filters/filter2/promote/"
},
"body": {
"is_public": true,
"owner_id": "https://app.crunch.io/api/users/user1/",
Expand Down
3 changes: 3 additions & 0 deletions mocks/app.crunch.io/api/datasets/1/multitables/4de322.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"element": "shoji:entity",
"self": "https://app.crunch.io/api/datasets/1/multitables/4de322/",
"catalogs": {
"promote": "https://app.crunch.io/api/datasets/1/multitables/4de322/promote/"
},
"views": {
"tabbook": "https://app.crunch.io/api/datasets/1/multitables/4de322/tabbook/",
"export": "https://app.crunch.io/api/datasets/1/multitables/4de322/export/"
Expand Down
3 changes: 3 additions & 0 deletions mocks/app.crunch.io/api/datasets/1/multitables/ed30c4.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"element": "shoji:entity",
"self": "https://app.crunch.io/api/datasets/1/multitables/ed30c4/",
"catalogs": {
"promote": "https://app.crunch.io/api/datasets/1/multitables/ed30c4/promote/"
},
"views": {
"tabbook": "https://app.crunch.io/api/datasets/1/multitables/ed30c4/tabbook/",
"export": "https://app.crunch.io/api/datasets/1/multitables/ed30c4/export/"
Expand Down
3 changes: 3 additions & 0 deletions mocks/app.crunch.io/api/datasets/1/multitables/f33123.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"element": "shoji:entity",
"self": "https://app.crunch.io/api/datasets/1/multitables/f33123/",
"catalogs": {
"promote": "https://app.crunch.io/api/datasets/1/multitables/f33123/promote/"
},
"views": {
"tabbook": "https://app.crunch.io/api/datasets/1/multitables/f33123/tabbook/",
"export": "https://app.crunch.io/api/datasets/1/multitables/f33123/export/"
Expand Down
3 changes: 2 additions & 1 deletion mocks/app.crunch.io/api/datasets/4/decks/8ad8.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
"element": "shoji:entity",
"self": "https://app.crunch.io/api/datasets/4/decks/8ad8/",
"catalogs": {
"slides": "https://app.crunch.io/api/datasets/4/decks/8ad8/slides/"
"slides": "https://app.crunch.io/api/datasets/4/decks/8ad8/slides/",
"promote": "https://app.crunch.io/api/datasets/4/decks/8ad8/promote/"
},
"views": {
"export": "https://app.crunch.io/api/datasets/4/decks/8ad8/export/"
Expand Down
5 changes: 2 additions & 3 deletions tests/testthat/test-decks.R
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,9 @@ with_mock_crunch({

test_that("is.public method for decks", {
expect_false(is.public(main_deck))
expect_PATCH(
expect_POST(
is.public(main_deck) <- TRUE,
"https://app.crunch.io/api/datasets/4/decks/8ad8/",
'{"is_public":true}'
"https://app.crunch.io/api/datasets/4/decks/8ad8/promote/"
)
expect_no_request(is.public(deck_cat[[2]]) <- FALSE)
})
Expand Down
5 changes: 2 additions & 3 deletions tests/testthat/test-filters.R
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,9 @@ with_mock_crunch({

test_that("Filter entity is.public", {
expect_false(is.public(filters(ds)[["Occasional Political Interest"]]))
expect_PATCH(
expect_POST(
is.public(filters(ds)[["Occasional Political Interest"]]) <- TRUE,
"https://app.crunch.io/api/datasets/1/filters/filter1/",
'{"is_public":true}'
"https://app.crunch.io/api/datasets/1/filters/filter1/promote/"
)
expect_no_request(is.public(filters(ds)[["Occasional Political Interest"]]) <- FALSE)
})
Expand Down
19 changes: 9 additions & 10 deletions tests/testthat/test-multitables.R
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,16 @@ if (tolower(Sys.info()[["sysname"]]) != "windows") {
expect_identical(is.public(mults[[2]]), FALSE)
expect_identical(is.public(mults[[3]]), TRUE)
## Note that this PATCHes the entity, not the catalog
expect_PATCH(
is.public(mults)[3] <- FALSE,
"https://app.crunch.io/api/datasets/1/multitables/4de322/",
'{"is_public":false}'
expect_POST(
is.public(mults)[2] <- TRUE,
"https://app.crunch.io/api/datasets/1/multitables/f33123/promote/"
)
with_PATCH(
NULL,
is.public(mults)[3] <- FALSE
expect_error(
is.public(mults)[3] <- FALSE,
"It is no longer possible to demote"
)
expect_no_request(is.public(mults)[3] <- TRUE)
expect_no_request(is.public(mults)[2] <- FALSE)
})

test_that("Multitable delete requires consent", {
Expand Down Expand Up @@ -104,10 +104,9 @@ if (tolower(Sys.info()[["sysname"]]) != "windows") {
"https://app.crunch.io/api/datasets/1/multitables/ed30c4/",
'{"name":"Another name"}'
)
expect_PATCH(
expect_POST(
is.public(mults[[1]]) <- TRUE,
"https://app.crunch.io/api/datasets/1/multitables/ed30c4/",
'{"is_public":true}'
"https://app.crunch.io/api/datasets/1/multitables/ed30c4/promote/"
)
expect_no_request(is.public(mults[[1]]) <- FALSE)
})
Expand Down
Loading