Sha256: 92f5d7e5aeff27090365830d38c108f36b49508b3da165804fd932673e51e025
Contents?: true
Size: 1.95 KB
Versions: 10
Compression:
Stored size: 1.95 KB
Contents
require 'spec_helper' describe ActiveReporter::Dimension::Category do def author_dimension(report) described_class.new(:author, report, model: :authors, attribute: :name, relation: ->(r) { r.joins( "LEFT OUTER JOIN authors ON authors.id = posts.author_id") }) end describe '#filter' do it 'filters to rows matching at least one value' do p1 = create(:post, author: 'Alice') p2 = create(:post, author: 'Bob') p3 = create(:post, author: nil) def filter_by(author_values) report = OpenStruct.new( table_name: 'posts', params: { dimensions: { author: { only: author_values } } } ) dimension = author_dimension(report) dimension.filter(dimension.relate(Post)) end expect(filter_by(['Alice'])).to eq [p1] expect(filter_by([nil])).to eq [p3] expect(filter_by(['Alice', nil])).to eq [p1, p3] expect(filter_by(['Alice', 'Bob'])).to eq [p1, p2] expect(filter_by([])).to eq [] end end describe '#group' do it 'groups the relation by the exact value of the SQL expression' do p1 = create(:post, author: 'Alice') p2 = create(:post, author: 'Alice') p3 = create(:post, author: nil) p4 = create(:post, author: 'Bob') p5 = create(:post, author: 'Bob') p6 = create(:post, author: 'Bob') report = OpenStruct.new(table_name: 'posts', params: {}) dimension = author_dimension(report) results = dimension.group(dimension.relate(Post)).select("COUNT(*) AS count").map do |r| r.attributes.values_at(dimension.send(:sql_value_name), 'count') end expect(results).to eq [[nil, 1], ['Alice', 2], ['Bob', 3]] end end describe '#group_values' do it 'echoes filter_values if filtering' do dimension = author_dimension(OpenStruct.new(params: { dimensions: { author: { only: ['foo', 'bar'] } } })) expect(dimension.group_values).to eq %w(foo bar) end end end
Version data entries
10 entries across 10 versions & 1 rubygems