Exemple #1
0
 /**
  * @covers Model_Shipping_Item::filter_discounted_items
  * @dataProvider data_filter_discounted_items
  */
 public function test_filter_discounted_items($items, $expected_ids)
 {
     $total = new Jam_Price(10, 'GBP');
     $shipping_items = array();
     foreach ($items as $id => $return_is_discounted) {
         $shipping_group = $this->getMock('Model_Shipping_Group', array('is_discounted'), array('shipping_group'));
         $shipping_group->expects($this->once())->method('is_discounted')->with($this->identicalTo($total))->will($this->returnValue($return_is_discounted));
         $shipping_item = Jam::build('shipping_item', array('id' => $id, 'shipping_group' => $shipping_group));
         $shipping_items[] = $shipping_item;
     }
     $filtered = Model_Shipping_Item::filter_discounted_items($shipping_items, $total);
     $this->assertEquals($expected_ids, $this->ids($filtered));
 }
Exemple #2
0
 public function total_price()
 {
     $total = $this->total_purchase_price();
     $items = $this->available_items();
     $items = Model_Shipping_Item::filter_discounted_items($items, $total);
     $groups = Array_Util::group_by($items, function ($item) {
         return $item->group_key();
     });
     $group_prices = array_map(function ($grouped_items) use($total) {
         $prices = Model_Shipping_Item::relative_prices($grouped_items);
         return Jam_Price::sum($prices, $total->currency(), $total->monetary(), $total->display_currency());
     }, $groups);
     return Jam_Price::sum($group_prices, $total->currency(), $total->monetary(), $total->display_currency());
 }