Nothing
# Tests for task management functions
test_that("get_tasks returns a list", {
skip_on_cran()
skip_if_no_token()
tasks <- get_tasks()
expect_type(tasks, "list")
})
test_that("add_tasks_in_project adds simple tasks", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
unique_task <- paste0("Test_Task_", format(Sys.time(), "%H%M%S"))
result <- add_tasks_in_project(
project_id = proj_id,
tasks = unique_task,
verbose = FALSE
)
expect_type(result, "character")
# Verify task was created
proj_tasks <- get_tasks_of_project(project_id = proj_id)
task_names <- sapply(proj_tasks, function(x) x$content)
expect_true(unique_task %in% task_names)
})
test_that("add_tasks_in_project adds tasks with responsible and assigns correctly", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
unique_task <- paste0("Task_With_Responsible_", format(Sys.time(), "%H%M%S"))
# Get the expected user ID
all_users <- get_all_users()
expected_uid <- all_users$id[all_users$email == TEST_COLLABORATORS[1]]
# Create task with responsible
result <- add_tasks_in_project(
project_id = proj_id,
tasks = unique_task,
responsible = TEST_COLLABORATORS[1],
verbose = FALSE
)
expect_type(result, "character")
# Wait for API sync
Sys.sleep(1)
# Verify task was created WITH the correct responsible_uid
proj_tasks <- get_tasks_of_project(project_id = proj_id)
task_found <- FALSE
for (t in proj_tasks) {
if (t$content == unique_task) {
task_found <- TRUE
expect_equal(t$responsible_uid, expected_uid,
info = paste("Task should be assigned to", TEST_COLLABORATORS[1]))
break
}
}
expect_true(task_found, info = "Task should exist in project")
})
test_that("add_tasks_in_project adds tasks with due date", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
unique_task <- paste0("Task_With_Due_", format(Sys.time(), "%H%M%S"))
future_date <- format(Sys.Date() + 7, "%Y-%m-%d")
result <- add_tasks_in_project(
project_id = proj_id,
tasks = unique_task,
due = future_date,
verbose = FALSE
)
expect_type(result, "character")
})
test_that("add_tasks_in_project adds tasks with section", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
unique_task <- paste0("Task_With_Section_", format(Sys.time(), "%H%M%S"))
result <- add_tasks_in_project(
project_id = proj_id,
tasks = unique_task,
section_name = "Section A - Preparation",
verbose = FALSE
)
expect_type(result, "character")
})
test_that("add_tasks_in_project check_only returns dataframe without creating tasks", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
unique_task <- paste0("Check_Only_Task_", format(Sys.time(), "%H%M%S"))
# Get task count before
tasks_before <- get_tasks_of_project(project_id = proj_id)
count_before <- length(tasks_before)
# Run with check_only = TRUE
result <- add_tasks_in_project(
project_id = proj_id,
tasks = unique_task,
check_only = TRUE,
verbose = FALSE
)
# Should return a dataframe
expect_s3_class(result, "data.frame")
# Task count should be the same (no task added)
tasks_after <- get_tasks_of_project(project_id = proj_id)
expect_equal(length(tasks_after), count_before)
})
test_that("add_tasks_in_project_from_df adds tasks from dataframe", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
timestamp <- format(Sys.time(), "%H%M%S")
tasks_df <- data.frame(
tasks = c(
paste0("DF_Task_1_", timestamp),
paste0("DF_Task_2_", timestamp)
),
responsible = c(TEST_COLLABORATORS[1], TEST_COLLABORATORS[2]),
due = c(
format(Sys.Date() + 7, "%Y-%m-%d"),
format(Sys.Date() + 8, "%Y-%m-%d")
),
section_name = c("Section A - Preparation", "Section B - Execution"),
stringsAsFactors = FALSE
)
result <- add_tasks_in_project_from_df(
project_id = proj_id,
tasks_as_df = tasks_df,
verbose = FALSE
)
expect_type(result, "character")
})
test_that("get_tasks_of_project returns tasks for specific project", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
tasks <- get_tasks_of_project(project_id = proj_id)
expect_type(tasks, "list")
expect_true(length(tasks) > 0)
# All tasks should have required fields
if (length(tasks) > 0) {
first_task <- tasks[[1]]
expect_true("content" %in% names(first_task))
expect_true("project_id" %in% names(first_task))
expect_true("id" %in% names(first_task))
}
})
test_that("add_responsible_to_task assigns user to existing task", {
skip_on_cran()
skip_if_no_token()
skip_if_test_project_missing()
proj_id <- get_project_id(TEST_PROJECT_NAME, create = FALSE)
unique_task <- paste0("Task_For_Assignment_", format(Sys.time(), "%H%M%S"))
# First create a task without responsible
add_tasks_in_project(
project_id = proj_id,
tasks = unique_task,
verbose = FALSE
)
# Then assign a responsible
result <- add_responsible_to_task(
project_id = proj_id,
task = unique_task,
responsible = TEST_COLLABORATORS[1],
verbose = FALSE
)
# Function should complete without error
expect_true(TRUE)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.