Skip to content

Commit 01d28ce

Browse files
committed
Implement DbTest
1 parent 770fd0d commit 01d28ce

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

tests/Unit/DbTest.php

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tests\Unit;
6+
7+
use CodeMash\Db;
8+
use CodeMash\Exceptions\RequestValidationException;
9+
use Generator;
10+
11+
final class DbTest extends CodeMashTestCase
12+
{
13+
/** @var Db */
14+
private $db;
15+
16+
protected function setUp(): void
17+
{
18+
parent::setUp();
19+
20+
$this->db = new Db($this->client);
21+
}
22+
23+
/**
24+
* @dataProvider provideTestInsertOneFail
25+
*/
26+
public function testInsertOneFail(
27+
array $params,
28+
string $expectedException,
29+
string $expectedExceptionMessage
30+
): void {
31+
$this->expectException($expectedException);
32+
$this->expectExceptionMessage($expectedExceptionMessage);
33+
34+
$this->db->insertOne($params);
35+
}
36+
37+
public static function provideTestInsertOneFail(): Generator
38+
{
39+
yield 'Empty params' => [
40+
'$params' => [],
41+
'$expectedException' => RequestValidationException::class,
42+
'$expectedExceptionMessage' => '"collectionName" is required!',
43+
];
44+
45+
yield 'Missing document' => [
46+
'$params' => ['collectionName' => 'testCollection'],
47+
'$expectedException' => RequestValidationException::class,
48+
'$expectedExceptionMessage' => '"document" is required!',
49+
];
50+
}
51+
52+
public function testInsertOne(): void
53+
{
54+
$params = [
55+
'collectionName' => 'testCollection',
56+
'document' => 'testDocument',
57+
];
58+
59+
$expectedParams = [
60+
'collectionName' => 'testCollection',
61+
'document' => toJson('testDocument'),
62+
'bypassDocumentValidation' => false,
63+
'waitForFileUpload' => false,
64+
'ignoreTriggers' => false,
65+
];
66+
67+
$result = ['result' => '{}'];
68+
69+
$expectedResult = [];
70+
71+
$this->client
72+
->expects($this->once())
73+
->method('request')
74+
->with(
75+
'POST',
76+
'v2/db/testCollection',
77+
[
78+
'headers' => [
79+
'Accept' => 'application/json',
80+
'Content-Type' => 'application/json',
81+
],
82+
'body' => toJson($expectedParams),
83+
]
84+
)->willReturn($result);
85+
86+
$actualResult = $this->db->insertOne($params);
87+
88+
$this->assertSame($expectedResult, $actualResult);
89+
}
90+
}

0 commit comments

Comments
 (0)