From cfe6452d11d1c43f2dbe171d02d670bac863fa4f Mon Sep 17 00:00:00 2001 From: Vinoth Kannan Date: Wed, 26 Feb 2020 16:00:15 +0530 Subject: [PATCH] SPEC: limit maximum number of rows correctly. 96a8d1862e5d5206a9bfd5c1cdfc05470fcb4558 --- spec/controllers/queries_controller_spec.rb | 59 +++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/spec/controllers/queries_controller_spec.rb b/spec/controllers/queries_controller_spec.rb index abaa346..9c21118 100644 --- a/spec/controllers/queries_controller_spec.rb +++ b/spec/controllers/queries_controller_spec.rb @@ -248,6 +248,65 @@ describe DataExplorer::QueryController do post :run, params: { id: q.id, download: 1 }, format: :csv expect(response.status).to eq(200) end + + context "`limit` parameter" do + before do + create_post + create_post + create_post + end + + it "should limit the results in JSON response" do + begin + original_const = DataExplorer::QUERY_RESULT_DEFAULT_LIMIT + DataExplorer.send(:remove_const, "QUERY_RESULT_DEFAULT_LIMIT") + DataExplorer.const_set("QUERY_RESULT_DEFAULT_LIMIT", 2) + + q = make_query <<~SQL + SELECT id FROM posts + SQL + + run_query q.id + expect(response_json['rows'].count).to eq(2) + + post :run, params: { id: q.id, limit: 1 }, format: :json + expect(response_json['rows'].count).to eq(1) + + post :run, params: { id: q.id, limit: "ALL" }, format: :json + expect(response_json['rows'].count).to eq(3) + ensure + DataExplorer.send(:remove_const, "QUERY_RESULT_DEFAULT_LIMIT") + DataExplorer.const_set("QUERY_RESULT_DEFAULT_LIMIT", original_const) + end + end + + it "should limit the results in CSV download" do + begin + original_const = DataExplorer::QUERY_RESULT_MAX_LIMIT + DataExplorer.send(:remove_const, "QUERY_RESULT_MAX_LIMIT") + DataExplorer.const_set("QUERY_RESULT_MAX_LIMIT", 2) + + ids = Post.order(:id).pluck(:id) + + q = make_query <<~SQL + SELECT id FROM posts + SQL + + post :run, params: { id: q.id, download: 1 }, format: :csv + expect(response.body.split("\n").count).to eq(3) + + post :run, params: { id: q.id, download: 1, limit: 1 }, format: :csv + expect(response.body.split("\n").count).to eq(2) + + # The value `ALL` is not supported in csv exports. + post :run, params: { id: q.id, download: 1, limit: "ALL" }, format: :csv + expect(response.body.split("\n").count).to eq(1) + ensure + DataExplorer.send(:remove_const, "QUERY_RESULT_MAX_LIMIT") + DataExplorer.const_set("QUERY_RESULT_MAX_LIMIT", original_const) + end + end + end end end