Migrate tests to Pest
This commit is contained in:
96
tests/Integration/PostgreSQL/DocumentListTest.php
Normal file
96
tests/Integration/PostgreSQL/DocumentListTest.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* @author Daniel J. Summers <daniel@bitbadger.solutions>
|
||||
* @license MIT
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use BitBadger\PDODocument\{DocumentException, DocumentList, Query};
|
||||
use BitBadger\PDODocument\Mapper\DocumentMapper;
|
||||
use Test\Integration\PostgreSQL\ThrowawayDb;
|
||||
use Test\Integration\TestDocument;
|
||||
|
||||
pest()->group('integration', 'postgresql');
|
||||
|
||||
describe('::create()', function () {
|
||||
test('creates a document list', function () {
|
||||
$list = DocumentList::create(Query::selectFromTable(ThrowawayDb::TABLE), [],
|
||||
new DocumentMapper(TestDocument::class));
|
||||
expect($list)->not->toBeNull();
|
||||
$list = null; // free database result
|
||||
});
|
||||
});
|
||||
|
||||
describe('->items', function () {
|
||||
test('enumerates items in the list', function () {
|
||||
$list = DocumentList::create(Query::selectFromTable(ThrowawayDb::TABLE), [],
|
||||
new DocumentMapper(TestDocument::class));
|
||||
expect($list)->not->toBeNull();
|
||||
$count = 0;
|
||||
foreach ($list->items as $item) {
|
||||
expect(['one', 'two', 'three', 'four', 'five'])->toContain($item->id);
|
||||
$count++;
|
||||
}
|
||||
expect($count)->toBe(5);
|
||||
});
|
||||
test('fails when the list is exhausted', function () {
|
||||
$list = DocumentList::create(Query::selectFromTable(ThrowawayDb::TABLE), [],
|
||||
new DocumentMapper(TestDocument::class));
|
||||
expect($list)->not->toBeNull()->hasItems->toBeTrue();
|
||||
$ignored = iterator_to_array($list->items);
|
||||
expect($list)->hasItems->toBeFalse()
|
||||
->and(fn () => iterator_to_array($list->items))->toThrow(DocumentException::class);
|
||||
});
|
||||
});
|
||||
|
||||
describe('->hasItems', function () {
|
||||
test('returns false when no items are in the list', function () {
|
||||
expect(DocumentList::create(
|
||||
Query::selectFromTable(ThrowawayDb::TABLE) . " WHERE (data->>'num_value')::numeric < 0", [],
|
||||
new DocumentMapper(TestDocument::class)))
|
||||
->not->toBeNull()
|
||||
->hasItems->toBeFalse();
|
||||
});
|
||||
test('returns true when items are in the list', function () {
|
||||
$list = DocumentList::create(Query::selectFromTable(ThrowawayDb::TABLE), [],
|
||||
new DocumentMapper(TestDocument::class));
|
||||
expect($list)->not->toBeNull()->hasItems->toBeTrue();
|
||||
foreach ($list->items as $ignored) {
|
||||
expect($list)->hasItems->toBeTrue();
|
||||
}
|
||||
expect($list)->hasItems->toBeFalse();
|
||||
});
|
||||
});
|
||||
|
||||
describe('->map()', function () {
|
||||
test('transforms the list', function () {
|
||||
$list = DocumentList::create(Query::selectFromTable(ThrowawayDb::TABLE), [],
|
||||
new DocumentMapper(TestDocument::class));
|
||||
expect($list)->not->toBeNull()->hasItems->toBeTrue();
|
||||
foreach ($list->map(fn($doc) => strrev($doc->id)) as $mapped) {
|
||||
expect(['eno', 'owt', 'eerht', 'ruof', 'evif'])->toContain($mapped);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('->iter()', function () {
|
||||
test('walks the list', function () {
|
||||
$list = DocumentList::create(Query::selectFromTable(ThrowawayDb::TABLE), [],
|
||||
new DocumentMapper(TestDocument::class));
|
||||
expect($list)->not->toBeNull()->hasItems->toBeTrue();
|
||||
$splats = [];
|
||||
$list->iter(function ($doc) use (&$splats) { $splats[] = str_repeat('*', strlen($doc->id)); });
|
||||
expect(implode(' ', $splats))->toBe('*** *** ***** **** ****');
|
||||
});
|
||||
});
|
||||
|
||||
describe('->mapToArray()', function () {
|
||||
test('creates an associative array', function () {
|
||||
$list = DocumentList::create(Query::selectFromTable(ThrowawayDb::TABLE), [],
|
||||
new DocumentMapper(TestDocument::class));
|
||||
expect($list)->not->toBeNull()->hasItems->toBeTrue()
|
||||
->and($list->mapToArray(fn($it) => $it->id, fn($it) => $it->value))
|
||||
->toBe(['one' => 'FIRST!', 'two' => 'another', 'three' => '', 'four' => 'purple', 'five' => 'purple']);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user