Files
openfoodnetwork/spec/lib/reports/report_renderer_spec.rb
2021-11-04 14:55:23 +00:00

84 lines
2.1 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
describe Reporting::ReportRenderer do
let(:data) {
[
{ "id" => 1, "name" => "carrots", "quantity" => 3 },
{ "id" => 2, "name" => "onions", "quantity" => 6 }
]
}
let(:report_data) { ActiveRecord::Result.new(data.first.keys, data.map(&:values)) }
let(:report) { OpenStruct.new(report_data: report_data)
}
let(:service) { described_class.new(report) }
describe "#table_headers" do
it "returns the report's table headers" do
expect(service.table_headers).to eq ["id", "name", "quantity"]
end
end
describe "#table_rows" do
it "returns the report's table rows" do
expect(service.table_rows).to eq [
[1, "carrots", 3],
[2, "onions", 6]
]
end
end
describe "#as_json" do
it "returns the report's data as hashes" do
expect(service.as_json).to eq data.as_json
end
end
describe "#as_arrays" do
it "returns the report's data as arrays" do
expect(service.as_arrays).to eq [
["id", "name", "quantity"],
[1, "carrots", 3],
[2, "onions", 6]
]
end
end
describe "exporting to different formats" do
let(:spreadsheet_architect) { SpreadsheetArchitect }
before do
allow(spreadsheet_architect).to receive(:to_csv) {}
allow(spreadsheet_architect).to receive(:to_ods) {}
allow(spreadsheet_architect).to receive(:to_xlsx) {}
end
describe "#to_csv" do
it "exports as csv" do
service.to_csv
expect(spreadsheet_architect).to have_received(:to_csv).
with(headers: service.table_headers, data: service.table_rows)
end
end
describe "#to_ods" do
it "exports as ods" do
service.to_ods
expect(spreadsheet_architect).to have_received(:to_ods).
with(headers: service.table_headers, data: service.table_rows)
end
end
describe "#to_xslx" do
it "exports as xlsx" do
service.to_xlsx
expect(spreadsheet_architect).to have_received(:to_xlsx).
with(headers: service.table_headers, data: service.table_rows)
end
end
end
end