# Copyright (C) The Arvados Authors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0

context("Utility function")

test_that("listAll always returns all resource items from server", {

    serverResponseLimit <- 3
    itemsAvailable <- 8
    items <- list("collection1", "collection2", "collection3", "collection4",
                  "collection5", "collection6", "collection7", "collection8")

    testFunction <- function(offset, ...)
    {
        response <- list()
        response$items_available <- itemsAvailable

        maxIndex <- offset + serverResponseLimit
        lastElementIndex <- if(maxIndex < itemsAvailable) maxIndex else itemsAvailable

        response$items <- items[(offset + 1):lastElementIndex]
        response
    }

    result <- listAll(testFunction)

    expect_that(length(result), equals(8))
})

test_that("trimFromStart trims string correctly if string starts with trimCharacters", {

    sample <- "./something/random"
    trimCharacters <- "./something/"

    result <- trimFromStart(sample, trimCharacters)

    expect_that(result, equals("random"))
})

test_that("trimFromStart returns original string if string doesn't starts with trimCharacters", {

    sample <- "./something/random"
    trimCharacters <- "./nothing/"

    result <- trimFromStart(sample, trimCharacters)

    expect_that(result, equals("./something/random"))
})

test_that("trimFromEnd trims string correctly if string ends with trimCharacters", {

    sample <- "./something/random"
    trimCharacters <- "/random"

    result <- trimFromEnd(sample, trimCharacters)

    expect_that(result, equals("./something"))
})

test_that("trimFromEnd returns original string if string doesn't end with trimCharacters", {

    sample <- "./something/random"
    trimCharacters <- "specific"

    result <- trimFromStart(sample, trimCharacters)

    expect_that(result, equals("./something/random"))
})

test_that("RListToPythonList converts nested R list to char representation of Python list", {

    sample <- list("insert", list("random", list("text")), list("here"))

    result              <- RListToPythonList(sample)
    resultWithSeparator <- RListToPythonList(sample, separator = ",+")

    expect_that(result, equals("[\"insert\", [\"random\", \"text\"], \"here\"]"))
    expect_that(resultWithSeparator,
                equals("[\"insert\",+[\"random\",+\"text\"],+\"here\"]"))
})

test_that("appendToStartIfNotExist appends characters to beginning of a string", {

    sample <- "New Year"
    charactersToAppend <- "Happy "

    result <- appendToStartIfNotExist(sample, charactersToAppend)

    expect_that(result, equals("Happy New Year"))
})

test_that(paste("appendToStartIfNotExist returns original string if string",
                "doesn't start with specified characters"), {

    sample <- "Happy New Year"
    charactersToAppend <- "Happy"

    result <- appendToStartIfNotExist(sample, charactersToAppend)

    expect_that(result, equals("Happy New Year"))
})

test_that(paste("splitToPathAndName splits relative path to file/folder",
                "name and rest of the path"), {

    relativePath <- "path/to/my/file.exe"

    result <- splitToPathAndName( relativePath)

    expect_that(result$name, equals("file.exe"))
    expect_that(result$path, equals("path/to/my"))
})