tests/testthat/test-asset_route.R

test_that('asset_route function returns AssetRoute object', {
  route <- asset_route("/assets", "fixtures/test_files")
  expect_s3_class(route, "AssetRoute")
  expect_equal(route$at, "/assets")
  expect_equal(route$path, "fixtures/test_files")
})

test_that('AssetRoute validates path exists', {
  expect_snapshot(
    AssetRoute$new(at = "/assets", path = "non/existent/path"),
    error = TRUE
  )
})

test_that('AssetRoute validates input parameters', {
  # Test at parameter validation
  expect_snapshot(
    AssetRoute$new(at = 123, path = "fixtures/test_files"),
    error = TRUE
  )

  # Test use_index parameter validation
  expect_snapshot(
    AssetRoute$new(at = "/assets", path = "fixtures/test_files", use_index = "yes"),
    error = TRUE
  )

  # Test fallthrough parameter validation
  expect_snapshot(
    AssetRoute$new(at = "/assets", path = "fixtures/test_files", fallthrough = "yes"),
    error = TRUE
  )

  # Test html_charset parameter validation
  expect_snapshot(
    AssetRoute$new(at = "/assets", path = "fixtures/test_files", html_charset = 123),
    error = TRUE
  )

  # Test headers parameter validation
  expect_snapshot(
    AssetRoute$new(at = "/assets", path = "fixtures/test_files", headers = list("Content-Type")),
    error = TRUE
  )

  # Test validation parameter validation
  expect_snapshot(
    AssetRoute$new(at = "/assets", path = "fixtures/test_files", validation = 123),
    error = TRUE
  )

  # Test except parameter validation
  expect_snapshot(
    AssetRoute$new(at = "/assets", path = "fixtures/test_files", except = 123),
    error = TRUE
  )
})

test_that('AssetRoute accessors work', {
  route <- asset_route("/assets", "fixtures/test_files")

  # Test getters
  expect_equal(route$at, "/assets")
  expect_equal(route$path, "fixtures/test_files")
  expect_true(route$use_index)
  expect_false(route$fallthrough)
  expect_equal(route$html_charset, "utf-8")
  expect_equal(route$headers, list())
  expect_null(route$validation)
  expect_equal(route$except, character(0))
  expect_equal(route$name, "asset_routr")

  # Test setters
  route$at <- "/static"
  expect_equal(route$at, "/static")

  route$path <- "fixtures"
  expect_equal(route$path, "fixtures")

  route$use_index <- FALSE
  expect_false(route$use_index)

  route$fallthrough <- TRUE
  expect_true(route$fallthrough)

  route$html_charset <- "UTF-16"
  expect_equal(route$html_charset, "UTF-16")

  route$headers <- list("X-Test" = "Value")
  expect_equal(route$headers, list("X-Test" = "Value"))

  route$validation <- "test-validation"
  expect_equal(route$validation, "test-validation")

  route$except <- c("/admin")
  expect_equal(route$except, c("/admin"))
})

test_that('AssetRoute path setter validates path exists', {
  route <- asset_route("/assets", "fixtures/test_files")

  expect_snapshot(
    route$path <- "non/existent/path",
    error = TRUE
  )
})

test_that('AssetRoute headers setter validates input', {
  route <- asset_route("/assets", "fixtures/test_files")

  # Test headers must be named
  expect_snapshot(
    route$headers <- list("Content-Type"),
    error = TRUE
  )

  # Test headers values must be strings
  expect_snapshot(
    route$headers <- list("Content-Type" = 123),
    error = TRUE
  )
})

test_that('is.AssetRoute correctly identifies AssetRoute objects', {
  route <- asset_route("/assets", "fixtures/test_files")
  not_route <- list()

  expect_true(is.AssetRoute(route))
  expect_false(is.AssetRoute(not_route))
})

test_that('AssetRoute on_attach method works', {
  route <- asset_route("/assets", "fixtures/test_files")

  # Mock a fiery app object
  app <- fiery::Fire$new()

  # Call on_attach
  app$attach(route)

  # Verify that the app's attach method was called
  expect_named(app$plugins, "asset_routr")
})

Try the routr package in your browser

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

routr documentation built on Aug. 21, 2025, 5:47 p.m.