| cumulated_report_spec.rb - reportable - Fork of reportable required by WarVox, … | |
| git clone git://jay.scot/reportable | |
| Log | |
| Files | |
| Refs | |
| README | |
| --- | |
| cumulated_report_spec.rb (6135B) | |
| --- | |
| 1 require File.join(File.dirname(File.dirname(File.expand_path(__FILE__)))… | |
| 2 | |
| 3 describe Saulabs::Reportable::CumulatedReport do | |
| 4 | |
| 5 before do | |
| 6 @report = Saulabs::Reportable::CumulatedReport.new(User, :cumulated_… | |
| 7 end | |
| 8 | |
| 9 describe '#run' do | |
| 10 | |
| 11 it 'should cumulate the data' do | |
| 12 @report.should_receive(:cumulate).once | |
| 13 | |
| 14 @report.run | |
| 15 end | |
| 16 | |
| 17 it 'should return an array of the same length as the specified limit… | |
| 18 @report = Saulabs::Reportable::CumulatedReport.new(User, :cumulate… | |
| 19 | |
| 20 @report.run.length.should == 10 | |
| 21 end | |
| 22 | |
| 23 it 'should return an array of the same length as the specified limit… | |
| 24 @report = Saulabs::Reportable::CumulatedReport.new(User, :cumulate… | |
| 25 | |
| 26 @report.run.length.should == 11 | |
| 27 end | |
| 28 | |
| 29 for grouping in [:hour, :day, :week, :month] do | |
| 30 | |
| 31 describe "for grouping #{grouping.to_s}" do | |
| 32 | |
| 33 [true, false].each do |live_data| | |
| 34 | |
| 35 describe "with :live_data = #{live_data}" do | |
| 36 | |
| 37 before(:all) do | |
| 38 User.delete_all | |
| 39 User.create!(:login => 'test 1', :created_at => Time.now, … | |
| 40 User.create!(:login => 'test 2', :created_at => Time.now -… | |
| 41 User.create!(:login => 'test 3', :created_at => Time.now -… | |
| 42 User.create!(:login => 'test 4', :created_at => Time.now -… | |
| 43 end | |
| 44 | |
| 45 describe 'the returned result' do | |
| 46 | |
| 47 before do | |
| 48 @grouping = Saulabs::Reportable::Grouping.new(grouping) | |
| 49 @report = Saulabs::Reportable::CumulatedReport.new(User,… | |
| 50 :grouping => grouping, | |
| 51 :limit => 10, | |
| 52 :live_data => live_data | |
| 53 ) | |
| 54 @result = @report.run | |
| 55 end | |
| 56 | |
| 57 it "should be an array starting reporting period (Time.now… | |
| 58 @result.first[0].should == Saulabs::Reportable::Reportin… | |
| 59 end | |
| 60 | |
| 61 if live_data | |
| 62 it "should be data ending with the current reporting per… | |
| 63 @result.last[0].should == Saulabs::Reportable::Reporti… | |
| 64 end | |
| 65 else | |
| 66 it "should be data ending with the reporting period befo… | |
| 67 @result.last[0].should == Saulabs::Reportable::Reporti… | |
| 68 end | |
| 69 end | |
| 70 | |
| 71 end | |
| 72 | |
| 73 it 'should return correct data for aggregation :count' do | |
| 74 @report = Saulabs::Reportable::CumulatedReport.new(User, :… | |
| 75 :aggregation => :count, | |
| 76 :grouping => grouping, | |
| 77 :limit => 10, | |
| 78 :live_data => live_data | |
| 79 ) | |
| 80 result = @report.run | |
| 81 | |
| 82 result[10][1].should == 4.0 if live_data | |
| 83 result[9][1].should == 3.0 | |
| 84 result[8][1].should == 2.0 | |
| 85 result[7][1].should == 2.0 | |
| 86 result[6][1].should == 0.0 | |
| 87 end | |
| 88 | |
| 89 it 'should return correct data for aggregation :sum' do | |
| 90 @report = Saulabs::Reportable::CumulatedReport.new(User, :… | |
| 91 :aggregation => :sum, | |
| 92 :grouping => grouping, | |
| 93 :value_column => :profile_visits, | |
| 94 :limit => 10, | |
| 95 :live_data => live_data | |
| 96 ) | |
| 97 result = @report.run() | |
| 98 | |
| 99 result[10][1].should == 8.0 if live_data | |
| 100 result[9][1].should == 6.0 | |
| 101 result[8][1].should == 5.0 | |
| 102 result[7][1].should == 5.0 | |
| 103 result[6][1].should == 0.0 | |
| 104 end | |
| 105 | |
| 106 it 'should return correct data for aggregation :count when c… | |
| 107 @report = Saulabs::Reportable::CumulatedReport.new(User, :… | |
| 108 :aggregation => :count, | |
| 109 :grouping => grouping, | |
| 110 :limit => 10, | |
| 111 :live_data => live_data | |
| 112 ) | |
| 113 result = @report.run(:conditions => ['login IN (?)', ['tes… | |
| 114 | |
| 115 result[10][1].should == 3.0 if live_data | |
| 116 result[9][1].should == 2.0 | |
| 117 result[8][1].should == 1.0 | |
| 118 result[7][1].should == 1.0 | |
| 119 result[6][1].should == 0.0 | |
| 120 end | |
| 121 | |
| 122 it 'should return correct data for aggregation :sum when cus… | |
| 123 @report = Saulabs::Reportable::CumulatedReport.new(User, :… | |
| 124 :aggregation => :sum, | |
| 125 :grouping => grouping, | |
| 126 :value_column => :profile_visits, | |
| 127 :limit => 10, | |
| 128 :live_data => live_data | |
| 129 ) | |
| 130 result = @report.run(:conditions => ['login IN (?)', ['tes… | |
| 131 | |
| 132 result[10][1].should == 6.0 if live_data | |
| 133 result[9][1].should == 4.0 | |
| 134 result[8][1].should == 3.0 | |
| 135 result[7][1].should == 3.0 | |
| 136 result[6][1].should == 0.0 | |
| 137 end | |
| 138 | |
| 139 end | |
| 140 | |
| 141 after(:all) do | |
| 142 User.destroy_all | |
| 143 end | |
| 144 | |
| 145 end | |
| 146 | |
| 147 end | |
| 148 | |
| 149 end | |
| 150 | |
| 151 after(:each) do | |
| 152 Saulabs::Reportable::ReportCache.destroy_all | |
| 153 end | |
| 154 | |
| 155 end | |
| 156 | |
| 157 describe '#cumulate' do | |
| 158 | |
| 159 it 'should correctly cumulate the given data' do | |
| 160 first = (Time.now - 1.week).to_s | |
| 161 second = Time.now.to_s | |
| 162 data = [[first, 1], [second, 2]] | |
| 163 | |
| 164 @report.send(:cumulate, data, @report.send(:options_for_run, {})).… | |
| 165 end | |
| 166 | |
| 167 end | |
| 168 | |
| 169 end |