tests/testthat/test-project.R

PROJECTS_COLS_CONCISE <- c("project_id", "project_name", "client_id", "billable", "archived")
PROJECTS_COLS <- c(
  "project_id", "project_name", "client_id", "workspace_id", "billable", "public", "archived", "template",
  "memberships", "time_estimate"
)

test_that("get projects", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  projects <- projects()

  expect_identical(names(projects), PROJECTS_COLS_CONCISE)
  expect_true(PROJECT_ID_CLOCKIFY %in% projects$project_id)
})

test_that("extended output", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  projects <- projects(concise = FALSE)

  expect_identical(names(projects), PROJECTS_COLS)
})

test_that("get project", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  emayili <- project(PROJECT_ID_EMAYILI)

  expect_identical(names(emayili), PROJECTS_COLS_CONCISE)
  expect_true(PROJECT_ID_EMAYILI %in% emayili$project_id)
})

test_that("create project", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  asana <- project_create("Asana", CLIENT_ID_RSTUDIO)

  expect_identical(names(asana), PROJECTS_COLS_CONCISE)
  expect_equal(CLIENT_ID_RSTUDIO, asana$client_id)

  PROJECT_ID_ASANA <<- asana$project_id
})

test_that("update user billable rate", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  RATE <- random_integer()

  project_update_billable_rate(PROJECT_ID_ASANA, USER_ID_AUTHENTICATED, RATE)

  expect_equal(
    project(PROJECT_ID_ASANA, concise = FALSE) %>%
      select(-project_id) %>%
      unnest(memberships) %>%
      filter(user_id == USER_ID_AUTHENTICATED) %>%
      pull(rate_amount),
    RATE
  )
})

test_that("update project time estimate", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  ESTIMATE <- "PT2H45M30S"

  project_update_estimate_time(PROJECT_ID_ASANA, ESTIMATE, TRUE, TRUE)

  expect_equal(
    project(PROJECT_ID_ASANA, concise = FALSE) %>% unnest(time_estimate) %>% pull(estimate),
    ESTIMATE
  )
})

test_that("update project membership", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  # Add member.
  memberships <- project_update_memberships(
    PROJECT_ID_EMAYILI,
    c(USER_ID_AUTHENTICATED, USER_ID_BOB)
  ) %>%
    select(-project_id) %>%
    unnest(memberships) %>%
    pull(user_id)
  expect_true(USER_ID_AUTHENTICATED %in% memberships && USER_ID_BOB %in% memberships)

  # Remove member.
  memberships <- project_update_memberships(
    PROJECT_ID_EMAYILI,
    USER_ID_AUTHENTICATED
  ) %>%
    select(-project_id) %>%
    unnest(memberships) %>%
    pull(user_id)
  expect_true(USER_ID_AUTHENTICATED %in% memberships && !(USER_ID_BOB %in% memberships))
})

test_that("update project", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  # Archive project.
  asana <- project_update(PROJECT_ID_ASANA, archived = TRUE)
  expect_true(asana$archived)
})

test_that("delete project", {
  skip_on_cran()
  skip_if(NO_API_KEY_IN_ENVIRONMENT)

  expect_true(project_delete(PROJECT_ID_ASANA))
  expect_false(PROJECT_ID_ASANA %in% projects()$project_id)
})

Try the clockify package in your browser

Any scripts or data that you put into this service are public.

clockify documentation built on Sept. 2, 2023, 9:08 a.m.