+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
source("fakes/FakeRESTService.R")
context("Subcollection")
expect_that(animal$getRelativePath(), equals("animal"))
expect_that(fish$getRelativePath(), equals("animal/fish"))
-})
+})
test_that(paste("getFileListing by default returns sorted path of all files",
"relative to the current subcollection"), {
all(expectedResult == result)
expect_that(resultsMatch, is_true())
-})
+})
test_that(paste("getFileListing returns sorted names of all direct children",
"if fullPath is set to FALSE"), {
all(expectedResult == result)
expect_that(resultsMatch, is_true())
-})
+})
test_that("add adds content to inside collection tree", {
expect_that(animalContainsFish, is_true())
expect_that(animalContainsDog, is_true())
-})
+})
test_that("add raises exception if content name is empty string", {
throws_error("Content has invalid name.", fixed = TRUE))
})
-test_that(paste("add raises exception if ArvadosFile/Subcollection",
+test_that(paste("add raises exception if ArvadosFile/Subcollection",
"with same name already exists in the subcollection"), {
animal <- Subcollection$new("animal")
expect_that(animal$add(thirdFish),
throws_error(paste("Subcollection already contains ArvadosFile or",
"Subcollection with same name."), fixed = TRUE))
-})
+})
-test_that(paste("add raises exception if passed argument is",
+test_that(paste("add raises exception if passed argument is",
"not ArvadosFile or Subcollection"), {
animal <- Subcollection$new("animal")
expect_that(animal$add(number),
throws_error(paste("Expected AravodsFile or Subcollection object,",
"got (numeric)."), fixed = TRUE))
-})
+})
-test_that(paste("add post content to a REST service",
+test_that(paste("add post content to a REST service",
"if subcollection belongs to a collection"), {
-
+
collectionContent <- c("animal", "animal/fish")
fakeREST <- FakeRESTService$new(collectionContent)
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
- collection <- Collection$new("fakeUUID")
- collection$setRESTService(fakeREST)
+ collection <- Collection$new(api, "myUUID")
animal <- collection$get("animal")
dog <- ArvadosFile$new("dog")
animal$add(dog)
expect_that(fakeREST$createCallCount, equals(1))
-})
+})
test_that("remove removes content from subcollection", {
returnValueAfterRemovalIsNull <- is.null(animal$get("fish"))
expect_that(returnValueAfterRemovalIsNull, is_true())
-})
+})
-test_that(paste("remove raises exception",
+test_that(paste("remove raises exception",
"if content to remove doesn't exist in the subcollection"), {
animal <- Subcollection$new("animal")
expect_that(animal$remove("fish"),
throws_error(paste("Subcollection doesn't contains ArvadosFile",
"or Subcollection with specified name.")))
-})
+})
test_that("remove raises exception if passed argument is not character vector", {
expect_that(animal$remove(number),
throws_error(paste("Expected character,",
"got (numeric)."), fixed = TRUE))
-})
+})
-test_that(paste("remove removes content from REST service",
+test_that(paste("remove removes content from REST service",
"if subcollection belongs to a collection"), {
-
+
collectionContent <- c("animal", "animal/fish", "animal/dog")
fakeREST <- FakeRESTService$new(collectionContent)
- collection <- Collection$new("fakeUUID")
- collection$setRESTService(fakeREST)
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+ collection <- Collection$new(api, "myUUID")
animal <- collection$get("animal")
animal$remove("fish")
expect_that(fakeREST$deleteCallCount, equals(1))
-})
+})
-test_that(paste("get returns ArvadosFile or Subcollection",
+test_that(paste("get returns ArvadosFile or Subcollection",
"if file or folder with given name exists"), {
animal <- Subcollection$new("animal")
expect_that(returnedDogIsArvadosFile, is_true())
expect_that(returnedDog$getName(), equals("dog"))
-})
+})
-test_that(paste("get returns NULL if file or folder",
+test_that(paste("get returns NULL if file or folder",
"with given name doesn't exists"), {
animal <- Subcollection$new("animal")
returnedDogIsNull <- is.null(animal$get("dog"))
expect_that(returnedDogIsNull, is_true())
-})
+})
test_that("getFirst returns first child in the subcollection", {
animal$add(fish)
expect_that(animal$getFirst()$getName(), equals("fish"))
-})
+})
test_that("getFirst returns NULL if subcollection contains no children", {
returnedElementIsNull <- is.null(animal$getFirst())
expect_that(returnedElementIsNull, is_true())
-})
+})
test_that(paste("setCollection by default sets collection",
"filed of subcollection and all its children"), {
expect_that(animal$getCollection(), equals("myCollection"))
expect_that(fish$getCollection(), equals("myCollection"))
-})
+})
test_that(paste("setCollection sets collection filed of subcollection only",
"if parameter setRecursively is set to FALSE"), {
expect_that(animal$getCollection(), equals("myCollection"))
expect_that(fishCollectionIsNull, is_true())
-})
+})
test_that(paste("move raises exception if subcollection",
"doesn't belong to any collection"), {
expect_that(animal$move("new/location"),
throws_error("Subcollection doesn't belong to any collection"))
-})
+})
test_that("move raises exception if new location contains content with the same name", {
"fish")
fakeREST <- FakeRESTService$new(collectionContent)
- collection <- Collection$new("fakeUUID")
- collection$setRESTService(fakeREST)
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+ collection <- Collection$new(api, "myUUID")
fish <- collection$get("animal/fish")
expect_that(fish$move("fish"),
throws_error("Destination already contains content with same name."))
-})
+})
test_that(paste("move raises exception if newLocationInCollection",
"parameter is invalid"), {
"ball")
fakeREST <- FakeRESTService$new(collectionContent)
- collection <- Collection$new("fakeUUID")
- collection$setRESTService(fakeREST)
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+
+ collection <- Collection$new(api, "myUUID")
fish <- collection$get("animal/fish")
expect_that(fish$move("objects/dog"),
- throws_error("Unable to get destination subcollection"))
-})
+ throws_error("Unable to get destination subcollection."))
+})
test_that("move moves subcollection inside collection tree", {
"ball")
fakeREST <- FakeRESTService$new(collectionContent)
- collection <- Collection$new("fakeUUID")
- collection$setRESTService(fakeREST)
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+ collection <- Collection$new(api, "myUUID")
fish <- collection$get("animal/fish")
fish$move("fish")
expect_that(fishIsNullOnOldLocation, is_true())
expect_that(fishExistsOnNewLocation, is_true())
-})
+})
test_that(paste("getSizeInBytes returns zero if subcollection",
"is not part of a collection"), {
animal <- Subcollection$new("animal")
expect_that(animal$getSizeInBytes(), equals(0))
-})
+})
test_that(paste("getSizeInBytes delegates size calculation",
"to REST service class"), {
returnSize <- 100
fakeREST <- FakeRESTService$new(collectionContent, returnSize)
- collection <- Collection$new("fakeUUID")
- collection$setRESTService(fakeREST)
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+ collection <- Collection$new(api, "myUUID")
animal <- collection$get("animal")
resourceSize <- animal$getSizeInBytes()
expect_that(resourceSize, equals(100))
-})
+})
+
+#########################
+test_that(paste("copy raises exception if subcollection",
+ "doesn't belong to any collection"), {
+
+ animal <- Subcollection$new("animal")
+
+ expect_that(animal$copy("new/location"),
+ throws_error("Subcollection doesn't belong to any collection."))
+})
+
+test_that("copy raises exception if new location contains content with the same name", {
+
+ collectionContent <- c("animal",
+ "animal/fish",
+ "animal/dog",
+ "animal/fish/shark",
+ "fish")
+ fakeREST <- FakeRESTService$new(collectionContent)
+
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+ collection <- Collection$new(api, "myUUID")
+ fish <- collection$get("animal/fish")
+
+ expect_that(fish$copy("fish"),
+ throws_error("Destination already contains content with same name."))
+
+})
+
+test_that(paste("copy raises exception if location parameter is invalid"), {
+
+ collectionContent <- c("animal",
+ "animal/fish",
+ "animal/dog",
+ "animal/fish/shark",
+ "ball")
+ fakeREST <- FakeRESTService$new(collectionContent)
+
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+
+ collection <- Collection$new(api, "myUUID")
+ fish <- collection$get("animal/fish")
+
+ expect_that(fish$copy("objects/dog"),
+ throws_error("Unable to get destination subcollection."))
+})
+
+test_that("copy copies subcollection inside collection tree", {
+
+ collectionContent <- c("animal",
+ "animal/fish",
+ "animal/dog",
+ "animal/fish/shark",
+ "ball")
+ fakeREST <- FakeRESTService$new(collectionContent)
+
+ api <- Arvados$new("myToken", "myHostName")
+ api$setRESTService(fakeREST)
+ collection <- Collection$new(api, "myUUID")
+ fish <- collection$get("animal/fish")
+
+ fish$copy("fish")
+ fishExistsOnOldLocation <- !is.null(collection$get("animal/fish"))
+ fishExistsOnNewLocation <- !is.null(collection$get("fish"))
+
+ expect_that(fishExistsOnOldLocation, is_true())
+ expect_that(fishExistsOnNewLocation, is_true())
+})
+
+test_that("duplicate performs deep cloning of Subcollection", {
+ foo <- ArvadosFile$new("foo")
+ bar <- ArvadosFile$new("bar")
+ sub <- Subcollection$new("qux")
+ sub$add(foo)
+ sub$add(bar)
+
+ newSub1 <- sub$duplicate()
+ newSub2 <- sub$duplicate("quux")
+
+ expect_that(newSub1$getFileListing(), equals(sub$getFileListing()))
+ expect_that(sort(newSub2$getFileListing()), equals(c("quux/bar", "quux/foo")))
+})