tests/testthat/test-f7Dialog.R

library(shinytest2)

test_that("dialog R function", {
  session <- as.environment(list(
    ns = identity,
    sendCustomMessage = function(type, message) {
      session$lastCustomMessage <- list(type = type, message = message)
    }
  ))

  f7Dialog(
    title = "Dialog title",
    text = "This is an alert dialog",
    session = session
  )

  res <- session$lastCustomMessage
  res$message <- jsonlite::fromJSON(res$message)
  expect_length(res, 2)
  expect_equal(res$type, "dialog")
  expect_length(res$message, 3)
  expect_identical(res$message$title, "Dialog title")
  expect_identical(res$message$text, "This is an alert dialog")
  expect_identical(res$message$type, "alert")
})

test_that("dialog works as expected", {
  # Don't run these tests on the CRAN build servers
  skip_on_cran()
  shiny_app_path <-
    system.file("examples/dialog/app.R", package = "shinyMobile")
  app <- AppDriver$new(
    shiny_app_path,
    name = "dialog-app"
  )

  inputs <- c("comfirm_dialog", "prompt_dialog", "login_dialog")

  app$expect_values(input = inputs)
  app$click(selector = "#alert")
  app$wait_for_idle(2000)
  app$expect_values(input = inputs)
  app$click(selector = ".dialog-button")
  app$wait_for_idle(1000)

  app$click(selector = "#confirm")
  app$wait_for_idle(2000)
  app$click(selector = ".dialog-button:nth-child(1)")
  app$wait_for_idle(1000)
  app$expect_values(input = inputs)

  app$click(selector = "#confirm")
  app$wait_for_idle(2000)
  app$click(selector = ".dialog-button:nth-child(2)")
  app$wait_for_idle(1000)
  app$expect_values(input = inputs)

  app$click(selector = "#prompt")
  app$wait_for_idle(2000)
  app$run_js("$('.dialog-input').val('test');")
  app$click(selector = ".dialog-button:nth-child(2)")
  app$wait_for_idle(1000)
  app$expect_values(input = inputs)

  app$click(selector = "#login")
  app$wait_for_idle(2000)
  app$run_js("$('.dialog-input[name=\"dialog-username\"]').val('test');")
  app$run_js("$('.dialog-input[name=\"dialog-password\"]').val('test');")
  app$click(selector = ".dialog-button:nth-child(2)")
  app$wait_for_idle(1000)
  app$expect_values(input = inputs)
})
RinteRface/shinyMobile documentation built on Jan. 27, 2025, 5:40 p.m.