public function testConstruct() {
$start_date = '2013/05/01';
$end_date = '2013/05/31';
+ $max_quantity = 6;
$details = array('1' => 'details 1', '2' => 'details', '3' => 'd3');
$splitter = new Splitter(array('detail' => $details
- , 'start_date'=> $start_date
- , 'end_date' => $end_date));
+ ,'start_date'=> $start_date
+ ,'end_date' => $end_date
+ ,'max_quantity' => $max_quantity));
$this->assertEquals($start_date, $splitter->start_date);
$this->assertEquals($end_date, $splitter->end_date);
+ $this->assertEquals($max_quantity, $splitter->max_quantity);
$this->assertEquals($splitter->days(), 30);
+ return $splitter;
+ }
+
+ /**
+ * @depends testConstruct
+ */
+ public function testSplit($splitter) {
+ $this->assertSplit($splitter, 15, 15, array());
+ $this->assertSplit($splitter, 5, 0, array("5 0 2013/05/01 2013/05/31"));
+ $this->assertSplit($splitter, 15, 11, array("12 11 2013/05/01 2013/05/21",
+ "3 0 2013/05/21 2013/05/31"));
+ $this->assertSplit($splitter, 31, 0, array("6 0 2013/05/01 2013/05/06",
+ "6 0 2013/05/06 2013/05/11",
+ "6 0 2013/05/11 2013/05/16",
+ "6 0 2013/05/16 2013/05/21",
+ "6 0 2013/05/21 2013/05/26",
+ "1 0 2013/05/26 2013/05/31",));
+ $this->assertSplit($splitter, 30, 24, array("24 24 2013/05/01 2013/05/25",
+ "6 0 2013/05/25 2013/05/31"));
+ $this->assertSplit($splitter, 10, 0 ,array("6 0 2013/05/01 2013/05/16"
+ ,"4 0 2013/05/16 2013/05/31"));
+ $this->assertSplit($splitter, 18, 10 ,array("12 10 2013/05/01 2013/05/21"
+ ,"6 0 2013/05/21 2013/05/31"));
+ }
+
+ public function assertSplit(Splitter $splitter, $quantity, $quantity_dispatched, array $expected_splits) {
+ $splits = $splitter->split(array('quantity' => $quantity, 'qty_sent' => $quantity_dispatched));
+
+ //print_r($splits);
+ if(empty($expected_splits)) return $this->assertEmpty($splits);
+ $this->assertEquals(array_map(function($ex) {
+ return explode(" ", $ex);
+ }, $expected_splits)
+ , array_map(function ($split) {
+ return array($split->quantity, $split->quantity_dispatched, $split->start_date, $split->end_date);
+ }, $splits));
}
}
?>