getInvoiceModel(), '1,947.99', 5, 5, 1, 2, 2]; yield [$this->getInvoiceModelOneEntry(), '293.27', 1, 1, 0, 1, 0]; } /** * @dataProvider getTestModel */ public function testRender(InvoiceModel $model, $expectedRate, $expectedRows, $expectedDescriptions, $expectedUser1, $expectedUser2, $expectedUser3) { $document = new InvoiceDocument(new \SplFileInfo(__DIR__ . '/DebugRenderer.php')); $sut = new DebugRenderer(); /** @var Response $response */ $response = $sut->render($document, $model); $data = json_decode($response->getContent(), true); $this->assertModelStructure($data['model']); $rows = $data['entries']; $this->assertEquals($expectedRows, count($rows)); foreach($rows as $row) { $this->assertEntryStructure($row); } // TODO check values or formats? } protected function assertModelStructure(array $model) { $keys = [ 'invoice.due_date', 'invoice.date', 'invoice.number', 'invoice.currency', 'invoice.vat', 'invoice.tax', 'invoice.total_time', 'invoice.total', 'invoice.subtotal', 'template.name', 'template.company', 'template.address', 'template.title', 'template.payment_terms', 'template.due_days', 'query.begin', 'query.end', 'query.month', 'query.year', 'customer.address', 'customer.name', 'customer.contact', 'customer.company', 'customer.country', 'customer.number', 'customer.homepage', 'customer.comment', ]; foreach($keys as $key) { $this->assertArrayHasKey($key, $model); } $expectedKeys = array_merge([], $keys); sort($expectedKeys); $givenKeys = array_keys($model); sort($givenKeys); $this->assertEquals(count($keys), count($givenKeys)); $this->assertEquals($expectedKeys, $givenKeys); } protected function assertEntryStructure(array $model) { $keys = [ 'entry.description', 'entry.amount', 'entry.rate', 'entry.total', 'entry.duration', 'entry.duration_minutes', 'entry.begin', 'entry.begin_time', 'entry.begin_timestamp', 'entry.end', 'entry.end_time', 'entry.end_timestamp', 'entry.date', 'entry.user_id', 'entry.user_name', 'entry.user_alias', 'entry.activity', 'entry.activity_id', 'entry.project', 'entry.customer', 'entry.project_id', 'entry.customer_id', ]; foreach($keys as $key) { $this->assertArrayHasKey($key, $model); } $expectedKeys = array_merge([], $keys); sort($expectedKeys); $givenKeys = array_keys($model); sort($givenKeys); $this->assertEquals(count($keys), count($givenKeys)); $this->assertEquals($expectedKeys, $givenKeys); } }