0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-11 02:59:07 +08:00
discourse/plugins/discourse-data-explorer/spec/lib/query_result_downloader_spec.rb
Natalie Tay b617df4fbd
FEATURE: Cache data explorer responses by query and param for quick results (#39118)
Query results are currently not cached, every page load requires users
to re-run queries. We want to cache results per query+params in redis
(24h ttl), show cached results on page load, and let users know when
they're viewing a cached result. Editing the query invalidates cache.




https://github.com/user-attachments/assets/09454e64-7579-4e74-a972-2c7b78059f6a
2026-04-07 11:57:33 +08:00

44 lines
1.3 KiB
Ruby
Vendored

# frozen_string_literal: true
describe DiscourseDataExplorer::QueryResultDownloader do
fab!(:admin)
fab!(:query) do
Fabricate(
:query,
sql:
"SELECT 1 AS id, 'tomtom' AS name UNION ALL SELECT 2, 'steak' UNION ALL SELECT 3, 'zorro'",
user: admin,
)
end
describe ".download" do
it "returns JSON results" do
result = described_class.download(query, nil, current_user: admin, format: :json)
expect(result[:error]).to be_nil
expect(result[:format]).to eq(:json)
expect(result[:data][:columns]).to eq(%w[id name])
expect(result[:data][:rows]).to eq([[1, "tomtom"], [2, "steak"], [3, "zorro"]])
end
it "returns CSV results" do
result = described_class.download(query, nil, current_user: admin, format: :csv)
expect(result[:error]).to be_nil
expect(result[:format]).to eq(:csv)
rows = result[:data].split("\n")
expect(rows[0]).to eq("id,name")
expect(rows[1]).to eq("1,tomtom")
expect(rows[2]).to eq("2,steak")
expect(rows[3]).to eq("3,zorro")
end
it "returns error for invalid queries" do
bad_query = Fabricate(:query, sql: "SELECT * FROM nonexistent_table_xyz")
result = described_class.download(bad_query, nil, current_user: admin)
expect(result[:error]).to be_present
end
end
end