Skip to content

Commit 5805086

Browse files
committed
feat: add database server engine support
1 parent 6fa0ade commit 5805086

3 files changed

Lines changed: 74 additions & 20 deletions

File tree

src/Client.php

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -162,21 +162,19 @@ public function createDatabase(int $databaseServerId, string $name): Collection
162162
/**
163163
* {@inheritdoc}
164164
*/
165-
public function createDatabaseServer(int $networkId, string $name, string $type, ?int $storage = 50, bool $public = false): Collection
165+
public function createDatabaseServer(int $networkId, string $engine, string $name, string $type, ?bool $public = null, ?int $storage = null): Collection
166166
{
167-
if ('aurora-mysql' === $type && null !== $storage) {
168-
throw new \InvalidArgumentException('Cannot specify a "storage" value for "aurora-mysql" database server');
169-
} elseif ('aurora-mysql' === $type && $public) {
170-
throw new \InvalidArgumentException('An "aurora-mysql" database server cannot be public');
171-
}
172-
173167
$databaseServer = [
168+
'engine' => $engine,
174169
'name' => $name,
175170
'type' => $type,
176171
];
177172

178-
if ('aurora-mysql' !== $type) {
173+
if (null !== $public) {
179174
$databaseServer['publicly_accessible'] = $public;
175+
}
176+
177+
if (null !== $storage) {
180178
$databaseServer['storage'] = $storage;
181179
}
182180

src/ClientInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public function createDatabase(int $databaseServerId, string $name): Collection;
7373
/**
7474
* Create a new database server on the network.
7575
*/
76-
public function createDatabaseServer(int $networkId, string $name, string $type, ?int $storage = 50, bool $public = false): Collection;
76+
public function createDatabaseServer(int $networkId, string $engine, string $name, string $type, ?bool $public = null, ?int $storage = null): Collection;
7777

7878
/**
7979
* Create a new user on the database server.

tests/Unit/ClientTest.php

Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public function testCreateDatabase()
241241
(new Client($httpClient, 'base_url'))->createDatabase($databaseServerId, 'database-name');
242242
}
243243

244-
public function testCreateDatabaseServer()
244+
public function testCreateDatabaseServerWithAuroraMySql()
245245
{
246246
$httpClient = $this->createMock(GuzzleClientInterface::class);
247247
$networkId = $this->faker->randomDigitNotNull;
@@ -251,28 +251,84 @@ public function testCreateDatabaseServer()
251251
->with($this->callback(function (RequestInterface $request) use ($networkId) {
252252
$this->assertSame('POST', $request->getMethod());
253253
$this->assertSame("base_url/networks/{$networkId}/database-servers", (string) $request->getUri());
254-
$this->assertEquals(['name' => 'database-server-name', 'type' => 'database-server-type', 'publicly_accessible' => true, 'storage' => 42], json_decode($request->getBody()->getContents(), true));
254+
$this->assertEquals(['engine' => 'mysql', 'name' => 'database-server-name', 'type' => 'aurora-mysql'], json_decode($request->getBody()->getContents(), true));
255255

256256
return true;
257257
}));
258258

259-
(new Client($httpClient, 'base_url'))->createDatabaseServer($networkId, 'database-server-name', 'database-server-type', 42, true);
259+
(new Client($httpClient, 'base_url'))->createDatabaseServer($networkId, 'mysql', 'database-server-name', 'aurora-mysql');
260260
}
261261

262-
public function testCreateDatabaseServerWithAuroraMySqlAndPubliclyAccessibleSetToTrue()
262+
public function testCreateDatabaseServerWithAuroraPostgreSql()
263263
{
264-
$this->expectException(\InvalidArgumentException::class);
265-
$this->expectExceptionMessage('An "aurora-mysql" database server cannot be public');
264+
$httpClient = $this->createMock(GuzzleClientInterface::class);
265+
$networkId = $this->faker->randomDigitNotNull;
266+
267+
$httpClient->expects($this->once())
268+
->method('send')
269+
->with($this->callback(function (RequestInterface $request) use ($networkId) {
270+
$this->assertSame('POST', $request->getMethod());
271+
$this->assertSame("base_url/networks/{$networkId}/database-servers", (string) $request->getUri());
272+
$this->assertEquals(['engine' => 'postgresql', 'name' => 'database-server-name', 'type' => 'aurora-postgresql'], json_decode($request->getBody()->getContents(), true));
273+
274+
return true;
275+
}));
276+
277+
(new Client($httpClient, 'base_url'))->createDatabaseServer($networkId, 'postgresql', 'database-server-name', 'aurora-postgresql');
278+
}
279+
280+
public function testCreateDatabaseServerWithMySql()
281+
{
282+
$httpClient = $this->createMock(GuzzleClientInterface::class);
283+
$networkId = $this->faker->randomDigitNotNull;
284+
285+
$httpClient->expects($this->once())
286+
->method('send')
287+
->with($this->callback(function (RequestInterface $request) use ($networkId) {
288+
$this->assertSame('POST', $request->getMethod());
289+
$this->assertSame("base_url/networks/{$networkId}/database-servers", (string) $request->getUri());
290+
$this->assertEquals(['engine' => 'mysql', 'name' => 'database-server-name', 'type' => 'database-server-type', 'publicly_accessible' => true, 'storage' => 42], json_decode($request->getBody()->getContents(), true));
291+
292+
return true;
293+
}));
266294

267-
(new Client($this->createMock(GuzzleClientInterface::class), 'base_url'))->createDatabaseServer($this->faker->randomDigitNotNull, 'database-server-name', 'aurora-mysql', null, true);
295+
(new Client($httpClient, 'base_url'))->createDatabaseServer($networkId, 'mysql', 'database-server-name', 'database-server-type', true, 42);
268296
}
269297

270-
public function testCreateDatabaseServerWithAuroraMySqlAndStorageNotNull()
298+
public function testCreateDatabaseServerWithPostgreSql()
271299
{
272-
$this->expectException(\InvalidArgumentException::class);
273-
$this->expectExceptionMessage('Cannot specify a "storage" value for "aurora-mysql" database server');
300+
$httpClient = $this->createMock(GuzzleClientInterface::class);
301+
$networkId = $this->faker->randomDigitNotNull;
302+
303+
$httpClient->expects($this->once())
304+
->method('send')
305+
->with($this->callback(function (RequestInterface $request) use ($networkId) {
306+
$this->assertSame('POST', $request->getMethod());
307+
$this->assertSame("base_url/networks/{$networkId}/database-servers", (string) $request->getUri());
308+
$this->assertEquals(['engine' => 'postgresql', 'name' => 'database-server-name', 'type' => 'db.t3.micro', 'publicly_accessible' => true, 'storage' => 42], json_decode($request->getBody()->getContents(), true));
309+
310+
return true;
311+
}));
312+
313+
(new Client($httpClient, 'base_url'))->createDatabaseServer($networkId, 'postgresql', 'database-server-name', 'db.t3.micro', true, 42);
314+
}
315+
316+
public function testCreateDatabaseServerWithUnsupportedEngineAndType()
317+
{
318+
$httpClient = $this->createMock(GuzzleClientInterface::class);
319+
$networkId = $this->faker->randomDigitNotNull;
320+
321+
$httpClient->expects($this->once())
322+
->method('send')
323+
->with($this->callback(function (RequestInterface $request) use ($networkId) {
324+
$this->assertSame('POST', $request->getMethod());
325+
$this->assertSame("base_url/networks/{$networkId}/database-servers", (string) $request->getUri());
326+
$this->assertEquals(['engine' => 'postgres', 'name' => 'database-server-name', 'type' => 'rds'], json_decode($request->getBody()->getContents(), true));
327+
328+
return true;
329+
}));
274330

275-
(new Client($this->createMock(GuzzleClientInterface::class), 'base_url'))->createDatabaseServer($this->faker->randomDigitNotNull, 'database-server-name', 'aurora-mysql', 42);
331+
(new Client($httpClient, 'base_url'))->createDatabaseServer($networkId, 'postgres', 'database-server-name', 'rds');
276332
}
277333

278334
public function testCreateDatabaseUser()

0 commit comments

Comments
 (0)