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()); }
/** * @dataProvider data_relative_prices * @covers Model_Shipping_Item::relative_prices */ public function test_relative_prices($params, $expected) { $items = $this->getMockModelArray('shipping_item', $params); $prices = Model_Shipping_Item::relative_prices($items); $this->assertEquals($expected, $prices); }