public function testAggregateHasMany()
{
$vat = 0.23;
$a = ['invoice' => [1 => ['id' => 1, 'ref_no' => 'INV203'], 2 => ['id' => 2, 'ref_no' => 'INV204'], 3 => ['id' => 3, 'ref_no' => 'INV205']], 'invoice_line' => [['total_net' => $n = 10, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 1], ['total_net' => $n = 30, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 1], ['total_net' => $n = 100, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 2], ['total_net' => $n = 25, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 3], ['total_net' => $n = 25, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1), 'invoice_id' => 3]]];
$this->setDB($a);
$db = new Persistence_SQL($this->db->connection);
$i = (new Model($db, 'invoice'))->addFields(['ref_no']);
$l = (new Model($db, 'invoice_line'))->addFields(['invoice_id', 'total_net', 'total_vat', 'total_gross']);
$i->hasMany('line', $l)->addFields([['total_vat', 'aggregate' => 'sum'], ['total_net', 'aggregate' => 'sum'], ['total_gross', 'aggregate' => 'sum']]);
$i->load('1');
$this->assertEquals(40, $i['total_net']);
$this->assertEquals(9.199999999999999, $i['total_vat']);
$this->assertEquals(49.2, $i['total_gross']);
$i->ref('line')->import([['total_net' => $n = 1, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1)], ['total_net' => $n = 2, 'total_vat' => $n * $vat, 'total_gross' => $n * ($vat + 1)]]);
$i->reload();
$this->assertEquals($n = 43, $i['total_net']);
$this->assertEquals($n * $vat, $i['total_vat']);
$this->assertEquals($n * ($vat + 1), $i['total_gross']);
}