Running ‘testthat.R’ [30s/20s]
Running the tests in ‘tests/testthat.R’ failed.
Complete output:
  > # This file is part of the standard setup for testthat.
  > # It is recommended that you do not modify it.
  > #
  > # Where should you do additional test configuration?
  > # Learn more about the roles of various files in:
  > # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview
  > # * https://testthat.r-lib.org/articles/special-files.html
  > 
  > library(testthat)
  > library(querychat)
  > 
  > test_check("querychat")
  Starting 2 test processes.
  Saving _problems/test-DataFrameSource-195.R
  Saving _problems/test-DataSource-37.R
  Saving _problems/test-DataSource-66.R
  Saving _problems/test-DataSource-80.R
  Saving _problems/test-DataSource-102.R
  Saving _problems/test-DataSource-124.R
  Saving _problems/test-DataSource-319.R
  Saving _problems/test-DataSource-339.R
  Saving _problems/test-DataSource-351.R
  Saving _problems/test-DataSource-373.R
  Saving _problems/test-DataSource-389.R
  Saving _problems/test-DataSource-429.R
  Saving _problems/test-DataSource-445.R
  > test-QueryChat.R: i The package "duckdb" is required.
  > test-QueryChat.R: x Would you like to install it?
  Saving _problems/test-QueryChatSystemPrompt-256.R
  Saving _problems/test-QueryChatSystemPrompt-360.R
  Saving _problems/test-QueryChatSystemPrompt-400.R
  Saving _problems/test-QueryChatSystemPrompt-418.R
  Saving _problems/test-QueryChatSystemPrompt-419.R
  Saving _problems/test-QueryChat-17.R
  Saving _problems/test-QueryChat-673.R
  Saving _problems/test-querychat_tools-6.R
  Saving _problems/test-querychat_tools-96.R
  Saving _problems/test-querychat_tools-111.R
  Saving _problems/test-querychat_tools-129.R
  Saving _problems/test-querychat_tools-143.R
  Saving _problems/test-querychat_tools-157.R
  Saving _problems/test-querychat_tools-171.R
  Saving _problems/test-querychat_tools-187.R
  Saving _problems/test-querychat_tools-206.R
  Saving _problems/test-querychat_tools-220.R
  Saving _problems/test-querychat_tools-233.R
  Saving _problems/test-querychat_tools-246.R
  Saving _problems/test-querychat_tools-265.R
  Saving _problems/test-querychat_tools-277.R
  Saving _problems/test-querychat_tools-293.R
  Saving _problems/test-querychat_tools-301.R
  Saving _problems/test-querychat_tools-309.R
  Saving _problems/test-querychat_tools-324.R
  Saving _problems/test-querychat_tools-333.R
  Saving _problems/test-querychat_tools-342.R
  Saving _problems/test-querychat_tools-384.R
  Saving _problems/test-querychat_tools-394.R
  Saving _problems/test-querychat_tools-412.R
  [ FAIL 43 | WARN 0 | SKIP 45 | PASS 246 ]
  
  ══ Skipped tests (45) ══════════════════════════════════════════════════════════
  • On CRAN (12): 'test-DBISource.R:11:3', 'test-DBISource.R:25:3',
    'test-DBISource.R:41:3', 'test-DataFrameSource.R:15:3',
    'test-DataFrameSource.R:24:3', 'test-DataFrameSource.R:153:5',
    'test-DataSource.R:2:3', 'test-QueryChat.R:81:3', 'test-QueryChat.R:464:1',
    'test-QueryChat.R:637:3', 'test-querychat_tools.R:14:1',
    'test-querychat_tools.R:18:1'
  • {duckdb} is not installed (33): 'test-DataFrameSource.R:39:5',
    'test-DataFrameSource.R:136:7', 'test-DataFrameSource.R:168:7',
    'test-TblSqlSource.R:3:5', 'test-TblSqlSource.R:13:5',
    'test-TblSqlSource.R:26:5', 'test-TblSqlSource.R:39:5',
    'test-TblSqlSource.R:47:5', 'test-TblSqlSource.R:57:5',
    'test-TblSqlSource.R:69:5', 'test-TblSqlSource.R:86:5',
    'test-TblSqlSource.R:97:5', 'test-TblSqlSource.R:109:5',
    'test-TblSqlSource.R:118:5', 'test-TblSqlSource.R:128:5',
    'test-TblSqlSource.R:137:5', 'test-TblSqlSource.R:147:5',
    'test-TblSqlSource.R:158:5', 'test-TblSqlSource.R:171:5',
    'test-TblSqlSource.R:183:5', 'test-TblSqlSource.R:203:5',
    'test-TblSqlSource.R:223:5', 'test-TblSqlSource.R:236:5',
    'test-TblSqlSource.R:248:5', 'test-TblSqlSource.R:264:5',
    'test-TblSqlSource.R:284:5', 'test-TblSqlSource.R:305:5',
    'test-TblSqlSource.R:319:5', 'test-TblSqlSource.R:333:5',
    'test-TblSqlSource.R:342:5', 'test-TblSqlSource.R:353:5',
    'test-TblSqlSource.R:364:5', 'test-TblSqlSource.R:375:5'
  
  ══ Failed tests ════════════════════════════════════════════════════════════════
  ── Error ('test-DataFrameSource.R:195:3'): DataFrameSource$test_query() ────────
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(test_df, "test_table") at test-DataFrameSource.R:195:3
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:37:5'): DataSource$get_schema() / returns proper schema for DataFrameSource ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_mixed_types_df()) at test-DataSource.R:37:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:66:5'): DataSource$get_schema() / correctly reports min/max values for numeric columns ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_metrics_df()) at test-DataSource.R:66:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:80:5'): DataSource$get_db_type() / returns correct database type for DataFrameSource ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:80:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:102:5'): DataSource$get_data() / returns all data for both DataFrameSource and DBISource ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(test_df) at test-DataSource.R:102:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:124:3'): DataSource$execute_query() ───────────────
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(test_df) at test-DataSource.R:124:3
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:319:5'): test_query() column validation / allows all columns through, regardless of order ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:319:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:339:5'): test_query() column validation / allows additional computed columns when require_all_columns=TRUE ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:339:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:351:5'): test_query() column validation / fails when columns are missing and require_all_columns=TRUE ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:351:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:373:5'): test_query() column validation / does not validate when require_all_columns=FALSE (default) ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:373:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:389:5'): test_query() column validation / provides helpful error message listing missing columns ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:389:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:429:5'): test_query() column validation / handles empty result sets correctly ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:429:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-DataSource.R:445:3'): check_query() blocks dangerous operations ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-DataSource.R:445:3
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Failure ('test-QueryChatSystemPrompt.R:256:5'): QueryChatSystemPrompt$render() / includes db_type in rendered output ──
  Expected `grepl("DuckDB", result)` to be TRUE.
  Differences:
  `actual`:   FALSE
  `expected`: TRUE 
  
  ── Failure ('test-QueryChatSystemPrompt.R:360:5'): QueryChatSystemPrompt$render() / detects DuckDB correctly ──
  Expected `grepl("DuckDB detected", result)` to be TRUE.
  Differences:
  `actual`:   FALSE
  `expected`: TRUE 
  
  ── Failure ('test-QueryChatSystemPrompt.R:400:5'): QueryChatSystemPrompt with full prompt.md template / renders full template with data_description ──
  Expected `prompt` to match regexp "Table: test_table".
  Actual text:
  x | You are a data dashboard chatbot that operates in a sidebar interface. Your role is to help users interact with their data through filtering, sorting, and answering questions.
    | 
    | You have access to a SQLite SQL database with the following schema:
    | 
    | <database_schema>
    | Table: `test_table`
    | Columns:
    | - id (INTEGER)
    |   Range: 1 to 3
    | - name (TEXT)
    |   Categorical values: 'A', 'B', 'C'
    | - value (FLOAT)
    |   Range: 10 to 30
    | </database_schema>
    | 
    | Here is additional information about the data:
    | 
    | <data_description>
    | A test dataframe
    | </data_description>
    | 
    | For security reasons, you may only query this specific table.
    | 
    | ## Your Capabilities
    | 
    | You can handle these types of requests:
    | 
    | ### Questions About Data
    | 
    | You cannot query or analyze the data. If users ask questions about data values, statistics, or calculations (e.g., "What is the average ____?" or "How many ____ are there?"), explain that you're not able to run queries on this data. Do not attempt to answer based on your own knowledge or assumptions about the data, even if the dataset seems familiar.
    | 
    | ### Providing Suggestions for Next Steps
    | 
    | #### Suggestion Syntax
    | 
    | Use `<span class="suggestion">` tags to create clickable prompt buttons in the UI. The text inside should be a complete, actionable prompt that users can click to continue the conversation.
    | 
    | #### Syntax Examples
    | 
    | **List format (most common):**
    | ```md
    | * <span class="suggestion">Show me examples of …</span>
    | * <span class="suggestion">What are the key differences between …</span>
    | * <span class="suggestion">Explain how …</span>
    | ```
    | 
    | **Inline in prose:**
    | ```md
    | You might want to <span class="suggestion">explore the advanced features</span> or <span class="suggestion">show me a practical example</span>.
    | ```
    | 
    | **Nested lists:**
    | ```md
    | * Analyze the data
    |   * <span class="suggestion">What's the average …?</span>
    |   * <span class="suggestion">How many …?</span>
    | * Filter and sort
    |   * <span class="suggestion">Show records from the year …</span>
    |   * <span class="suggestion">Sort the ____ by ____ …</span>
    | ```
    | 
    | #### When to Include Suggestions
    | 
    | **Always provide suggestions:**
    | - At the start of a conversation
    | - When beginning a new line of exploration
    | - After completing a topic (to suggest new directions)
    | 
    | **Use best judgment for:**
    | - Mid-conversation responses (include when they add clear value)
    | - Follow-up answers (include if multiple paths forward exist)
    | 
    | **Avoid when:**
    | - The user has asked a very specific question requiring only a direct answer
    | - The conversation is clearly wrapping up
    | 
    | #### Suggestion Guidelines
    | 
    | - Suggestions can appear **anywhere** in your response—not just at the end
    | - Use list format at the end for 2-4 follow-up options (most common pattern)
    | - Use inline suggestions within prose when contextually appropriate
    | - Write suggestions as complete, natural prompts (not fragments)
    | - Only suggest actions you can perform with your tools and capabilities
    | - Never duplicate the suggestion text in your response
    | - Never use generic phrases like "If you'd like to..." or "Would you like to explore..." — instead, provide concrete suggestions
    | - Never refer to suggestions as "prompts" – call them "suggestions" or "ideas" or similar
    | 
    | ## Important Guidelines
    | 
    | - **Ask for clarification** if any request is unclear or ambiguous
    | - **Be concise** due to the constrained interface
    | - **Only answer data questions using your tools** - never use prior knowledge or assumptions about the data, even if the dataset seems familiar
    | - **Use Markdown tables** for any tabular or structured data in your responses
    | 
    | 
  ── Failure ('test-QueryChatSystemPrompt.R:418:5'): QueryChatSystemPrompt with full prompt.md template / includes DuckDB-specific content for DuckDB sources ──
  Expected `ds$get_db_type()` to equal "DuckDB".
  Differences:
  `actual`:   "SQLite"
  `expected`: "DuckDB"
  
  ── Failure ('test-QueryChatSystemPrompt.R:419:5'): QueryChatSystemPrompt with full prompt.md template / includes DuckDB-specific content for DuckDB sources ──
  Expected `grepl("DuckDB SQL Tips", sys_prompt, fixed = TRUE)` to be TRUE.
  Differences:
  `actual`:   FALSE
  `expected`: TRUE 
  
  ── Error ('test-QueryChat.R:17:5'): QueryChat$new() / accepts DataFrameSource directly ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df(), "test_source") at test-QueryChat.R:17:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-QueryChat.R:673:5'): querychat_app() only cleans up data frame sources on exit ──
  Error in `utils::menu(c("Yes", "No"))`: menu() cannot be used non-interactively
  Backtrace:
      ▆
   1. ├─withr::with_options(...) at test-QueryChat.R:672:3
   2. │ └─base::force(code)
   3. └─querychat:::local_data_frame_source(new_test_df()) at test-QueryChat.R:673:5
   4.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   5.     └─querychat (local) initialize(...)
   6.       └─rlang::check_installed("duckdb")
   7.         └─utils::menu(c("Yes", "No"))
  ── Error ('test-querychat_tools.R:6:3'): tool_update_dashboard() checks inputs ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:6:3
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:96:5'): querychat_tool_result() / returns successful result for valid query action ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:96:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:111:5'): querychat_tool_result() / returns successful result for valid update action ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:111:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:129:5'): querychat_tool_result() / returns successful result for reset action ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:129:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:143:5'): querychat_tool_result() / handles query errors appropriately ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:143:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:157:5'): querychat_tool_result() / handles update errors appropriately ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:157:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:171:5'): querychat_tool_result() / formats query results with details block ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:171:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:187:5'): querychat_tool_result() / formats update results with button HTML ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:187:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:206:5'): querychat_tool_result() / formats reset results with button HTML ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:206:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:220:5'): querychat_tool_result() / includes title in extra display metadata for update action ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:220:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:233:5'): querychat_tool_result() / does not include title for query action ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:233:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:246:5'): querychat_tool_result() / sets open state based on action and tool details option ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:246:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:265:5'): querychat_tool_result() / shows request on error ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:265:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:277:5'): querychat_tool_result() / hides request on success ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:277:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:293:5'): tool_query() / returns an ellmer tool object ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:293:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:301:5'): tool_query() / includes database type in description ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:301:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:309:5'): tool_query() / creates a working tool function ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:309:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:324:5'): tool_update_dashboard() / returns an ellmer tool object ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:324:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:333:5'): tool_update_dashboard() / includes database type in description ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:333:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:342:5'): tool_update_dashboard() / creates a working tool function ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:342:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:384:5'): tool_update_dashboard_impl() / returns a function ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:384:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:394:5'): tool_update_dashboard_impl() / updates reactive values on successful query ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:394:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  ── Error ('test-querychat_tools.R:412:5'): tool_update_dashboard_impl() / does not update reactive values on query error ──
  <rlib_error_package_not_found/rlang_error/error/condition>
  Error in `initialize(...)`: The package "duckdb" is required.
  Backtrace:
      ▆
   1. └─querychat:::local_data_frame_source(new_test_df()) at test-querychat_tools.R:412:5
   2.   └─DataFrameSource$new(data, table_name, engine = engine) at ./helper-fixtures.R:88:3
   3.     └─querychat (local) initialize(...)
   4.       └─rlang::check_installed("duckdb")
  
  [ FAIL 43 | WARN 0 | SKIP 45 | PASS 246 ]
  Error:
  ! Test failures.
  Execution halted