f <- function() {
  description <- "A two compartment model with a direct effect , no endpoints and no thetas"
  model({
    d / dt(central) <- -kel * central - k12 * central + k21 *
      peripheral1
    d / dt(peripheral1) <- k12 * central - k21 * peripheral1
    Cc <- central / vc
    effect <- Ek * Cc
  })
}

test_that("Test addBaselineConst function", {
  ui <- readModelDb("PK_2cmt_no_depot") |> addDirectLin()
  result <- addBaselineConst(ui)

  expect_s3_class(result, "rxUi")

  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb")

  # now with no theta and a description
  result <- addBaselineConst(f)
  expect_null(result$meta$description)
  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb")
  expect_equal(result$theta, c(uEb = 0.1))
  expect_equal(result$iniDf$label, "untransformed constant baseline (Eb)")
})

test_that("Test addBaselineExp function", {

  ui <- readModelDb("PK_3cmt") |> addDirectLin()
  result <- addBaselineExp(ui)
  expect_s3_class(result, "rxUi")
  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb * exp(-kb * time)")

  # now with no theta and a description
  result <- addBaselineExp(f)
  expect_null(result$meta$description)
  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb * exp(-kb * time)")
  expect_equal(result$theta, c(uEb = 0.1, lkb = 0.1))
  expect_equal(result$iniDf$label, c("untransformed constant baseline (Eb)",
    "baseline time-decay constant (kb)"))
})

test_that("Test addBaseline1exp function", {
  ui <- readModelDb("PK_2cmt") |> addDirectLin()
  result <- addBaseline1exp(ui)
  expect_s3_class(result, "rxUi")
  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb * (1 - exp(-kb * time))")

  # now with no theta and a description
  result <- addBaseline1exp(f)
  expect_null(result$meta$description)
  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb * (1 - exp(-kb * time))")
  expect_equal(result$theta, c(uEb = 0.1, lkb = 0.1))
  expect_equal(result$iniDf$label, c("untransformed constant baseline (Eb)",
    "baseline time-decay constant (kb)"))
})

test_that("Test addBaselineLin function", {
  ui <- readModelDb("PK_1cmt") |> addDirectLin()
  result <- addBaselineLin(ui)
  expect_s3_class(result, "rxUi")
  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb * time")

  # now with no theta and a description
  result <- addBaselineLin(f)
  expect_null(result$meta$description)
  expect_equal(rxode2::modelExtract(result, effect),
    "effect <- Ek * Cc + Eb * time")
  expect_equal(result$theta, c(uEb = 0.1))
  expect_equal(result$iniDf$label, "untransformed constant baseline (Eb)")

})
