diff --git a/lib/result_to_markdown.rb b/lib/result_to_markdown.rb index 59d6a10..a562a98 100644 --- a/lib/result_to_markdown.rb +++ b/lib/result_to_markdown.rb @@ -17,7 +17,7 @@ module ::DiscourseDataExplorer row.each_with_index do |col, col_index| col_name = pg_result.fields[col_index] - related = relations.dig(colrender[col_index].to_sym) if col_index < colrender.size + related = relations.dig(colrender[col_index].to_sym) unless colrender[col_index].nil? if related.is_a?(ActiveModel::ArraySerializer) related_row = related.object.find_by(id: col) @@ -30,7 +30,7 @@ module ::DiscourseDataExplorer if column.nil? row_data[col_index] = col else - row_data[col_index] = related_row[column] + row_data[col_index] = "#{related_row[column]} (#{col})" end else row_data[col_index] = col @@ -41,7 +41,7 @@ module ::DiscourseDataExplorer end table_headers = pg_result.fields.map { |c| " #{c.gsub("_id", "")} |" }.join - table_body = pg_result.fields.size.times.map { " :-----: |" }.join + table_body = pg_result.fields.size.times.map { " :----- |" }.join "|#{table_headers}\n|#{table_body}\n#{result_data.join}" end diff --git a/plugin.rb b/plugin.rb index c4b0a82..68c4835 100644 --- a/plugin.rb +++ b/plugin.rb @@ -100,7 +100,7 @@ after_initialize do script do |_, fields, automation| recipients = Array(fields.dig("recipients", "value")) query_id = fields.dig("query_id", "value") - query_params = fields.dig("query_params", "value") + query_params = fields.dig("query_params", "value") || {} unless SiteSetting.data_explorer_enabled Rails.logger.warn "#{DiscourseDataExplorer.plugin_name} - plugin must be enabled to run automation #{automation.id}" diff --git a/spec/result_to_markdown_spec.rb b/spec/result_to_markdown_spec.rb new file mode 100644 index 0000000..ab10142 --- /dev/null +++ b/spec/result_to_markdown_spec.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +describe DiscourseDataExplorer::ResultToMarkdown do + fab!(:user) { Fabricate(:user) } + fab!(:post) { Fabricate(:post) } + fab!(:query) { DiscourseDataExplorer::Query.find(-1) } + + let(:query_params) { [{ from_days_ago: 0 }, { duration_days: 15 }] } + let(:query_result) { DiscourseDataExplorer::DataExplorer.run_query(query, query_params) } + + before { SiteSetting.data_explorer_enabled = true } + + describe ".convert" do + it "format results as a markdown table with headers and columns" do + result = described_class.convert(query_result[:pg_result]) + + table = <<~MD + | liker_user | liked_user | count | + | :----- | :----- | :----- | + MD + + expect(result).to include(table) + end + + it "enriches result data within the table rows" do + PostActionCreator.new(user, post, PostActionType.types[:like]).perform + result = described_class.convert(query_result[:pg_result]) + + expect(result).to include( + "| #{user.username} (#{user.id}) | #{post.user.username} (#{post.user.id}) | 1 |\n", + ) + end + end +end