jzimmek-reportme 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
- data/lib/reportme/report.rb +3 -3
- data/test/reportme_test.rb +81 -7
- metadata +1 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.11
|
data/lib/reportme/report.rb
CHANGED
@@ -12,10 +12,10 @@ module Reportme
|
|
12
12
|
@source = block
|
13
13
|
end
|
14
14
|
|
15
|
-
def periods(
|
16
|
-
unless
|
15
|
+
def periods(wanted_periods=[])
|
16
|
+
unless wanted_periods.blank?
|
17
17
|
@periods.clear
|
18
|
-
|
18
|
+
wanted_periods.each do |period|
|
19
19
|
@periods << period
|
20
20
|
end
|
21
21
|
end
|
data/test/reportme_test.rb
CHANGED
@@ -17,14 +17,23 @@ class ReportmeTest < Test::Unit::TestCase
|
|
17
17
|
SQL
|
18
18
|
end
|
19
19
|
|
20
|
-
def create_visit_report_factory
|
20
|
+
def create_visit_report_factory(opts={})
|
21
21
|
|
22
|
-
|
22
|
+
defaults = {
|
23
|
+
:periods => [],
|
24
|
+
:since => DateTime.now
|
25
|
+
}
|
26
|
+
|
27
|
+
opts = defaults.merge(opts)
|
28
|
+
|
29
|
+
@rme = Reportme::ReportFactory.create opts[:since] do
|
23
30
|
report :visits do
|
31
|
+
periods opts[:periods]
|
24
32
|
source do |von, bis|
|
25
33
|
<<-SQL
|
26
34
|
select
|
27
|
-
|
35
|
+
'#{von}' as von,
|
36
|
+
date(created_at) as datum,
|
28
37
|
channel,
|
29
38
|
count(1) as cnt
|
30
39
|
from
|
@@ -38,7 +47,6 @@ class ReportmeTest < Test::Unit::TestCase
|
|
38
47
|
end
|
39
48
|
end
|
40
49
|
end
|
41
|
-
|
42
50
|
@rme
|
43
51
|
end
|
44
52
|
|
@@ -51,8 +59,10 @@ class ReportmeTest < Test::Unit::TestCase
|
|
51
59
|
end
|
52
60
|
|
53
61
|
def teardown
|
54
|
-
@
|
55
|
-
|
62
|
+
unless @debug
|
63
|
+
@rme.reset if @rme
|
64
|
+
exec("truncate visits;");
|
65
|
+
end
|
56
66
|
end
|
57
67
|
|
58
68
|
should "create one visitor in the today report for channel sem" do
|
@@ -85,11 +95,75 @@ class ReportmeTest < Test::Unit::TestCase
|
|
85
95
|
exec("insert into visits values (null, 'seo', date_sub(curdate(), interval 1 day));");
|
86
96
|
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 1 day));");
|
87
97
|
exec("insert into visits values (null, 'seo', date_sub(curdate(), interval 1 day));");
|
88
|
-
create_visit_report_factory.run
|
98
|
+
create_visit_report_factory(:periods => [:today, :day]).run
|
89
99
|
assert_equal 2, one("select cnt from visits_day where channel = 'seo' and datum = date_sub(curdate(), interval 1 day)")["cnt"].to_i
|
90
100
|
assert_equal 3, one("select cnt from visits_day where channel = 'sem' and datum = date_sub(curdate(), interval 1 day)")["cnt"].to_i
|
91
101
|
end
|
92
102
|
|
103
|
+
should "report a week as 7 days since yesterday ignoring days before or after this" do
|
104
|
+
|
105
|
+
# today should be ignored
|
106
|
+
exec("insert into visits values (null, 'sem', curdate());");
|
107
|
+
|
108
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 1 day));");
|
109
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 2 day));");
|
110
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 3 day));");
|
111
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 4 day));");
|
112
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 5 day));");
|
113
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 6 day));");
|
114
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 7 day));");
|
115
|
+
|
116
|
+
# 8 days ago should be ignored
|
117
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 8 day));");
|
118
|
+
|
119
|
+
create_visit_report_factory(:periods => [:week]).run
|
120
|
+
assert_equal 7, one("select count(1) as cnt from visits_week where channel = 'sem' and von = date_sub(curdate(), interval 7 day)")["cnt"].to_i
|
121
|
+
end
|
122
|
+
|
123
|
+
should "create a daily report for the previous 3 days" do
|
124
|
+
|
125
|
+
#should be ignored
|
126
|
+
exec("insert into visits values (null, 'sem', curdate());");
|
127
|
+
|
128
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 1 day));");
|
129
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 2 day));");
|
130
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 3 day));");
|
131
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 4 day));");
|
132
|
+
|
133
|
+
# should be ignored
|
134
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 5 day));");
|
135
|
+
|
136
|
+
create_visit_report_factory(:since => 3.days.ago,:periods => [:day]).run
|
137
|
+
assert_equal 4, one("select count(1) as cnt from visits_day where von between date_sub(curdate(), interval 4 day) and date_sub(curdate(), interval 1 day)")["cnt"].to_i
|
138
|
+
end
|
139
|
+
|
140
|
+
should "create the weekly report by using 7 daily reports" do
|
141
|
+
|
142
|
+
# should be ignored in weekly
|
143
|
+
exec("insert into visits values (null, 'sem', curdate());");
|
144
|
+
|
145
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 1 day));");
|
146
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 2 day));");
|
147
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 3 day));");
|
148
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 4 day));");
|
149
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 5 day));");
|
150
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 6 day));");
|
151
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 7 day));");
|
152
|
+
|
153
|
+
# should be ignored in weekly
|
154
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 8 day));");
|
155
|
+
# should be ignored in weekly
|
156
|
+
exec("insert into visits values (null, 'sem', date_sub(curdate(), interval 9 day));");
|
157
|
+
|
158
|
+
create_visit_report_factory(:since => 10.days.ago,:periods => [:day]).run
|
159
|
+
|
160
|
+
exec("truncate visits;")
|
161
|
+
|
162
|
+
create_visit_report_factory(:periods => [:week]).run
|
163
|
+
|
164
|
+
assert_equal 7, one("select count(1) as cnt from visits_week where von between date_sub(curdate(), interval 7 day) and date_sub(curdate(), interval 1 day)")["cnt"].to_i
|
165
|
+
end
|
166
|
+
|
93
167
|
# should "handle today and day periods but nothing else" do
|
94
168
|
# end
|
95
169
|
|