All tests pass.
[order_line_extra.git] / tests / testSplitter.php
index fa42f7a32439c83cc6cd480fcb3ab52ae8211e96..2f5479e43660065961db304aacb823acae09d57f 100644 (file)
@@ -5,15 +5,54 @@ class splitterTest extends PHPUnit_Framework_TestCase {
        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));
        }
 }
 ?>