mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-28 21:07:16 +00:00
84 lines
2.1 KiB
Ruby
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
|