/tests/core/Period/Range.test.php

https://github.com/quarkness/piwik · PHP · 504 lines · 456 code · 34 blank · 14 comment · 1 complexity · 4ade7c3fe2088eb9e6567c2f4c9915be MD5 · raw file

  1. <?php
  2. if(!defined('PIWIK_CONFIG_TEST_INCLUDED'))
  3. {
  4. require_once dirname(__FILE__)."/../../../tests/config_test.php";
  5. }
  6. class Test_Piwik_Period_Range extends UnitTestCase
  7. {
  8. function test_CustomRange_weekInside_endingToday()
  9. {
  10. $range = new Piwik_Period_Range( 'range', '2007-12-22,2008-01-03', 'UTC', Piwik_Date::factory('2008-01-03') );
  11. $correct = array(
  12. '2007-12-22',
  13. '2007-12-23',
  14. array(
  15. '2007-12-24',
  16. '2007-12-25',
  17. '2007-12-26',
  18. '2007-12-27',
  19. '2007-12-28',
  20. '2007-12-29',
  21. '2007-12-30',
  22. ),
  23. array(
  24. '2007-12-31',
  25. '2008-01-01',
  26. '2008-01-02',
  27. '2008-01-03',
  28. '2008-01-04',
  29. '2008-01-05',
  30. '2008-01-06',
  31. )
  32. );
  33. // var_dump($range->toString());
  34. //var_dump($correct);
  35. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  36. $this->assertEqual( $range->toString(), $correct);
  37. }
  38. function test_CustomRange_weekInside_endingYesterday()
  39. {
  40. $todays = array(
  41. Piwik_Date::factory('2008-01-04'),
  42. Piwik_Date::factory('2008-01-05'),
  43. Piwik_Date::factory('2008-01-14'),
  44. Piwik_Date::factory('2008-02-14'),
  45. Piwik_Date::factory('2009-02-14'),
  46. );
  47. foreach($todays as $today)
  48. {
  49. $range = new Piwik_Period_Range( 'range', '2007-12-22,2008-01-03', 'UTC', $today );
  50. $correct = array(
  51. '2007-12-22',
  52. '2007-12-23',
  53. array(
  54. '2007-12-24',
  55. '2007-12-25',
  56. '2007-12-26',
  57. '2007-12-27',
  58. '2007-12-28',
  59. '2007-12-29',
  60. '2007-12-30',
  61. ),
  62. '2007-12-31',
  63. '2008-01-01',
  64. '2008-01-02',
  65. '2008-01-03',
  66. );
  67. // var_dump($range->toString());
  68. //var_dump($correct);
  69. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  70. $this->assertEqual( $range->toString(), $correct);
  71. }
  72. }
  73. function test_CustomRange_onlyDaysLessThanOneWeek()
  74. {
  75. $range = new Piwik_Period_Range( 'range', '2007-12-30,2008-01-01' );
  76. $correct = array(
  77. '2007-12-30',
  78. '2007-12-31',
  79. '2008-01-01',
  80. );
  81. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  82. $this->assertEqual( $range->toString(), $correct);
  83. }
  84. function test_CustomRange_oneWeekOnly()
  85. {
  86. $range = new Piwik_Period_Range( 'range', '2007-12-31,2008-01-06' );
  87. $correct = array(
  88. array(
  89. '2007-12-31',
  90. '2008-01-01',
  91. '2008-01-02',
  92. '2008-01-03',
  93. '2008-01-04',
  94. '2008-01-05',
  95. '2008-01-06',
  96. )
  97. );
  98. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  99. $this->assertEqual( $range->toString(), $correct);
  100. }
  101. function test_CustomRange_startsWithWeek()
  102. {
  103. $range = new Piwik_Period_Range( 'range', '2007-12-31,2008-01-08' );
  104. $correct = array(
  105. array(
  106. '2007-12-31',
  107. '2008-01-01',
  108. '2008-01-02',
  109. '2008-01-03',
  110. '2008-01-04',
  111. '2008-01-05',
  112. '2008-01-06',
  113. ),
  114. '2008-01-07',
  115. '2008-01-08',
  116. );
  117. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  118. $this->assertEqual( $range->toString(), $correct);
  119. }
  120. function test_CustomRange_endsWithWeek()
  121. {
  122. $range = new Piwik_Period_Range( 'range', '2007-12-21,2008-01-06' );
  123. $correct = array(
  124. '2007-12-21',
  125. '2007-12-22',
  126. '2007-12-23',
  127. array(
  128. '2007-12-24',
  129. '2007-12-25',
  130. '2007-12-26',
  131. '2007-12-27',
  132. '2007-12-28',
  133. '2007-12-29',
  134. '2007-12-30',
  135. ),
  136. array(
  137. '2007-12-31',
  138. '2008-01-01',
  139. '2008-01-02',
  140. '2008-01-03',
  141. '2008-01-04',
  142. '2008-01-05',
  143. '2008-01-06',
  144. ),
  145. );
  146. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  147. $this->assertEqual( $range->toString(), $correct);
  148. }
  149. function test_CustomRange_containsMonthAndWeek()
  150. {
  151. $range = new Piwik_Period_Range( 'range', '2011-09-18,2011-11-02', 'UTC', Piwik_Date::factory('2012-01-01') );
  152. $correct = array(
  153. '2011-09-18',
  154. array(
  155. '2011-09-19',
  156. '2011-09-20',
  157. '2011-09-21',
  158. '2011-09-22',
  159. '2011-09-23',
  160. '2011-09-24',
  161. '2011-09-25',
  162. ),
  163. '2011-09-26',
  164. '2011-09-27',
  165. '2011-09-28',
  166. '2011-09-29',
  167. '2011-09-30',
  168. array(
  169. "2011-10-01",
  170. "2011-10-02",
  171. "2011-10-03",
  172. "2011-10-04",
  173. "2011-10-05",
  174. "2011-10-06",
  175. "2011-10-07",
  176. "2011-10-08",
  177. "2011-10-09",
  178. "2011-10-10",
  179. "2011-10-11",
  180. "2011-10-12",
  181. "2011-10-13",
  182. "2011-10-14",
  183. "2011-10-15",
  184. "2011-10-16",
  185. "2011-10-17",
  186. "2011-10-18",
  187. "2011-10-19",
  188. "2011-10-20",
  189. "2011-10-21",
  190. "2011-10-22",
  191. "2011-10-23",
  192. "2011-10-24",
  193. "2011-10-25",
  194. "2011-10-26",
  195. "2011-10-27",
  196. "2011-10-28",
  197. "2011-10-29",
  198. "2011-10-30",
  199. "2011-10-31",
  200. ),
  201. "2011-11-01",
  202. "2011-11-02",
  203. );
  204. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  205. $this->assertEqual( $range->toString(), $correct);
  206. }
  207. function test_CustomRange_containsSeveralMonthsAndWeeks_startingWithMonth()
  208. {
  209. // Testing when "today" is in the same month, or later in the future
  210. $todays = array(
  211. Piwik_Date::factory('2011-10-18'),
  212. Piwik_Date::factory('2011-10-19'),
  213. Piwik_Date::factory('2011-10-24'),
  214. Piwik_Date::factory('2011-11-01'),
  215. Piwik_Date::factory('2011-11-30'),
  216. Piwik_Date::factory('2011-12-31'),
  217. Piwik_Date::factory('2012-10-18')
  218. );
  219. foreach($todays as $today)
  220. {
  221. $range = new Piwik_Period_Range( 'range', '2011-08-01,2011-10-17', 'UTC', $today );
  222. $correct = array(
  223. array(
  224. "2011-08-01",
  225. "2011-08-02",
  226. "2011-08-03",
  227. "2011-08-04",
  228. "2011-08-05",
  229. "2011-08-06",
  230. "2011-08-07",
  231. "2011-08-08",
  232. "2011-08-09",
  233. "2011-08-10",
  234. "2011-08-11",
  235. "2011-08-12",
  236. "2011-08-13",
  237. "2011-08-14",
  238. "2011-08-15",
  239. "2011-08-16",
  240. "2011-08-17",
  241. "2011-08-18",
  242. "2011-08-19",
  243. "2011-08-20",
  244. "2011-08-21",
  245. "2011-08-22",
  246. "2011-08-23",
  247. "2011-08-24",
  248. "2011-08-25",
  249. "2011-08-26",
  250. "2011-08-27",
  251. "2011-08-28",
  252. "2011-08-29",
  253. "2011-08-30",
  254. "2011-08-31",
  255. ),
  256. array(
  257. "2011-09-01",
  258. "2011-09-02",
  259. "2011-09-03",
  260. "2011-09-04",
  261. "2011-09-05",
  262. "2011-09-06",
  263. "2011-09-07",
  264. "2011-09-08",
  265. "2011-09-09",
  266. "2011-09-10",
  267. "2011-09-11",
  268. "2011-09-12",
  269. "2011-09-13",
  270. "2011-09-14",
  271. "2011-09-15",
  272. "2011-09-16",
  273. "2011-09-17",
  274. "2011-09-18",
  275. "2011-09-19",
  276. "2011-09-20",
  277. "2011-09-21",
  278. "2011-09-22",
  279. "2011-09-23",
  280. "2011-09-24",
  281. "2011-09-25",
  282. "2011-09-26",
  283. "2011-09-27",
  284. "2011-09-28",
  285. "2011-09-29",
  286. "2011-09-30",
  287. ),
  288. "2011-10-01",
  289. "2011-10-02",
  290. array(
  291. "2011-10-03",
  292. "2011-10-04",
  293. "2011-10-05",
  294. "2011-10-06",
  295. "2011-10-07",
  296. "2011-10-08",
  297. "2011-10-09",
  298. ),
  299. array(
  300. "2011-10-10",
  301. "2011-10-11",
  302. "2011-10-12",
  303. "2011-10-13",
  304. "2011-10-14",
  305. "2011-10-15",
  306. "2011-10-16",
  307. ),
  308. "2011-10-17",
  309. );
  310. // var_dump( $range->toString() );
  311. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  312. $this->assertEqual( $range->toString(), $correct);
  313. }
  314. }
  315. function test_CustomRange_oneMonthOnly()
  316. {
  317. $range = new Piwik_Period_Range( 'range', '2011-09-01,2011-09-30' );
  318. $correct = array(
  319. array(
  320. "2011-09-01",
  321. "2011-09-02",
  322. "2011-09-03",
  323. "2011-09-04",
  324. "2011-09-05",
  325. "2011-09-06",
  326. "2011-09-07",
  327. "2011-09-08",
  328. "2011-09-09",
  329. "2011-09-10",
  330. "2011-09-11",
  331. "2011-09-12",
  332. "2011-09-13",
  333. "2011-09-14",
  334. "2011-09-15",
  335. "2011-09-16",
  336. "2011-09-17",
  337. "2011-09-18",
  338. "2011-09-19",
  339. "2011-09-20",
  340. "2011-09-21",
  341. "2011-09-22",
  342. "2011-09-23",
  343. "2011-09-24",
  344. "2011-09-25",
  345. "2011-09-26",
  346. "2011-09-27",
  347. "2011-09-28",
  348. "2011-09-29",
  349. "2011-09-30",
  350. ));
  351. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  352. $this->assertEqual( $range->toString(), $correct);
  353. }
  354. function test_CustomRange_startsWithWeek_EndsWithMonth()
  355. {
  356. $range = new Piwik_Period_Range( 'range', '2011-07-25,2011-08-31' );
  357. $correct = array(
  358. array(
  359. '2011-07-25',
  360. '2011-07-26',
  361. '2011-07-27',
  362. '2011-07-28',
  363. '2011-07-29',
  364. '2011-07-30',
  365. '2011-07-31',
  366. ),
  367. array(
  368. "2011-08-01",
  369. "2011-08-02",
  370. "2011-08-03",
  371. "2011-08-04",
  372. "2011-08-05",
  373. "2011-08-06",
  374. "2011-08-07",
  375. "2011-08-08",
  376. "2011-08-09",
  377. "2011-08-10",
  378. "2011-08-11",
  379. "2011-08-12",
  380. "2011-08-13",
  381. "2011-08-14",
  382. "2011-08-15",
  383. "2011-08-16",
  384. "2011-08-17",
  385. "2011-08-18",
  386. "2011-08-19",
  387. "2011-08-20",
  388. "2011-08-21",
  389. "2011-08-22",
  390. "2011-08-23",
  391. "2011-08-24",
  392. "2011-08-25",
  393. "2011-08-26",
  394. "2011-08-27",
  395. "2011-08-28",
  396. "2011-08-29",
  397. "2011-08-30",
  398. "2011-08-31",
  399. ),
  400. );
  401. //var_dump($range->toString());
  402. //var_dump($correct);
  403. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  404. $this->assertEqual( $range->toString(), $correct);
  405. }
  406. function test_CustomRange_beforeIsAfter_yeahRight()
  407. {
  408. $range = new Piwik_Period_Range( 'range', '2007-02-09,2007-02-01' );
  409. $this->assertEqual( $range->getNumberOfSubperiods(), 0);
  410. $this->assertEqual( $range->toString(), array());
  411. try {
  412. $range->getPrettyString();
  413. $this->fail();
  414. } catch(Exception $e) {
  415. $this->pass();
  416. }
  417. }
  418. function test_CustomRange_lastN()
  419. {
  420. $range = new Piwik_Period_Range( 'range', 'last4' );
  421. $range->setDefaultEndDate(Piwik_Date::factory('2008-01-03'));
  422. $correct = array(
  423. '2007-12-31',
  424. '2008-01-01',
  425. '2008-01-02',
  426. '2008-01-03',
  427. );
  428. //var_dump($range->toString());
  429. //var_dump($correct);
  430. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  431. $this->assertEqual( $range->toString(), $correct);
  432. }
  433. function test_CustomRange_previousN()
  434. {
  435. $range = new Piwik_Period_Range( 'range', 'previous3' );
  436. $range->setDefaultEndDate(Piwik_Date::factory('2008-01-03'));
  437. $correct = array(
  438. '2007-12-31',
  439. '2008-01-01',
  440. '2008-01-02',
  441. );
  442. //var_dump($range->toString());
  443. //var_dump($correct);
  444. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  445. $this->assertEqual( $range->toString(), $correct);
  446. }
  447. function test_CustomRange_previousN_endToday()
  448. {
  449. $range = new Piwik_Period_Range( 'range', 'previous3' );
  450. $correct = array(
  451. date('Y-m-d',time()-86400*3),
  452. date('Y-m-d',time()-86400*2),
  453. date('Y-m-d',time()-86400*1),
  454. );
  455. //var_dump($range->toString());
  456. //var_dump($correct);
  457. $this->assertEqual( $range->getNumberOfSubperiods(), count($correct));
  458. $this->assertEqual( $range->toString(), $correct);
  459. }
  460. function test_InvalidRange_throws()
  461. {
  462. try {
  463. $range = new Piwik_Period_Range( 'range', '0001-01-01,today' );
  464. echo $range->getLocalizedLongString();
  465. $this->fail();
  466. } catch(Exception $e) {
  467. $this->pass();
  468. }
  469. }
  470. }