Finish implementing SqliteGateway
This commit is contained in:
parent
adeb7a1b51
commit
f85c48b4a9
@ -33,14 +33,11 @@ class SqliteGateway extends WebmentionGatewayInterface {
|
|||||||
|
|
||||||
public function get(int $id): ?Webmention
|
public function get(int $id): ?Webmention
|
||||||
{
|
{
|
||||||
$sql = "SELECT * FROM webmentions;";
|
$sql = "SELECT * FROM webmentions WHERE id=:id LIMIT 1;";
|
||||||
$statement = $this->connection->query($sql);
|
$statement = $this->connection->prepare($sql);
|
||||||
|
$statement->execute(["id" => $id]);
|
||||||
if ($statement == false) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$row = $statement->fetch(PDO::FETCH_ASSOC);
|
$row = $statement->fetch(PDO::FETCH_ASSOC);
|
||||||
|
$statement->closeCursor();
|
||||||
|
|
||||||
if ($row) {
|
if ($row) {
|
||||||
return new Webmention(
|
return new Webmention(
|
||||||
@ -57,7 +54,24 @@ class SqliteGateway extends WebmentionGatewayInterface {
|
|||||||
|
|
||||||
public function getByPost(string $post): array
|
public function getByPost(string $post): array
|
||||||
{
|
{
|
||||||
return [];
|
$sql = "SELECT * FROM webmentions WHERE target=:post";
|
||||||
|
$statement = $this->connection->prepare($sql);
|
||||||
|
$statement->execute(["post" => $post]);
|
||||||
|
|
||||||
|
$mentions = [];
|
||||||
|
|
||||||
|
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
|
||||||
|
$mentions[] = new Webmention(
|
||||||
|
$row["id"],
|
||||||
|
$row["target"],
|
||||||
|
$row["source"],
|
||||||
|
$row["content"],
|
||||||
|
$row["author"]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$statement->closeCursor();
|
||||||
|
|
||||||
|
return $mentions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function save(Webmention $webmention): ?int
|
public function save(Webmention $webmention): ?int
|
||||||
@ -78,8 +92,10 @@ class SqliteGateway extends WebmentionGatewayInterface {
|
|||||||
|
|
||||||
public function delete(Webmention $webmention): void
|
public function delete(Webmention $webmention): void
|
||||||
{
|
{
|
||||||
throw new Exception("Method " . SqliteGateway::class . "::delete not implemented");
|
$sql = "DELETE FROM webmentions WHERE id=:id;";
|
||||||
|
$statement = $this->connection->prepare($sql);
|
||||||
|
$statement->execute(["id" => $webmention->id]);
|
||||||
|
$statement->closeCursor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
@ -10,9 +10,15 @@ use PHPUnit\Framework\TestCase;
|
|||||||
|
|
||||||
class SqliteGatewayTest extends TestCase
|
class SqliteGatewayTest extends TestCase
|
||||||
{
|
{
|
||||||
|
private SqliteGateway $gateway;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
$this->gateway = new SqliteGateway(":memory:");
|
||||||
|
}
|
||||||
|
|
||||||
public function testCanInsertAWebmention()
|
public function testCanInsertAWebmention()
|
||||||
{
|
{
|
||||||
$gateway = new SqliteGateway(":memory:");
|
|
||||||
|
|
||||||
$webmention = new Webmention(
|
$webmention = new Webmention(
|
||||||
null,
|
null,
|
||||||
@ -22,13 +28,13 @@ class SqliteGatewayTest extends TestCase
|
|||||||
"Some Author Name"
|
"Some Author Name"
|
||||||
);
|
);
|
||||||
|
|
||||||
$webmention->id = $gateway->save($webmention);
|
$webmention->id = $this->gateway->save($webmention);
|
||||||
$this->assertNotNull($webmention->id);
|
$this->assertNotNull($webmention->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testCanRetrieveAWebmention()
|
public function testCanRetrieveAWebmention()
|
||||||
{
|
{
|
||||||
$gateway = new SqliteGateway(":memory:");
|
$this->gateway = new SqliteGateway(":memory:");
|
||||||
|
|
||||||
$webmention = new Webmention(
|
$webmention = new Webmention(
|
||||||
null,
|
null,
|
||||||
@ -38,10 +44,59 @@ class SqliteGatewayTest extends TestCase
|
|||||||
"Some Author Name"
|
"Some Author Name"
|
||||||
);
|
);
|
||||||
|
|
||||||
$webmention->id = $gateway->save($webmention);
|
$webmention->id = $this->gateway->save($webmention);
|
||||||
|
|
||||||
$retrieved = $gateway->get($webmention->id);
|
$retrieved = $this->gateway->get($webmention->id);
|
||||||
|
|
||||||
$this->assertEquals($webmention, $retrieved, ((string) $webmention). " " . ((string) $retrieved));
|
$this->assertEquals($webmention, $retrieved);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCanDeleteAWebmention()
|
||||||
|
{
|
||||||
|
$this->gateway = new SqliteGateway(":memory:");
|
||||||
|
|
||||||
|
$webmention = new Webmention(
|
||||||
|
null,
|
||||||
|
"https://lewisdale.dev/post/a-post",
|
||||||
|
"https://a-source.url",
|
||||||
|
"No content",
|
||||||
|
"Some Author Name"
|
||||||
|
);
|
||||||
|
|
||||||
|
$webmention->id = $this->gateway->save($webmention);
|
||||||
|
$this->gateway->delete($webmention);
|
||||||
|
|
||||||
|
$retrieved = $this->gateway->get($webmention->id);
|
||||||
|
|
||||||
|
$this->assertNull($retrieved);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCanGetByPost()
|
||||||
|
{
|
||||||
|
$this->gateway = new SqliteGateway(":memory:");
|
||||||
|
|
||||||
|
foreach(range(0, 4) as $_) {
|
||||||
|
$this->gateway->save(new Webmention(
|
||||||
|
null,
|
||||||
|
"https://lewisdale.dev/post/a-new-post",
|
||||||
|
"https://a-source.url",
|
||||||
|
"No content",
|
||||||
|
"Some Author Name"
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(range(0, 4) as $_) {
|
||||||
|
$this->gateway->save(new Webmention(
|
||||||
|
null,
|
||||||
|
"https://lewisdale.dev/post/a-different-post",
|
||||||
|
"https://a-source.url",
|
||||||
|
"No content",
|
||||||
|
"Some Author Name"
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
$mentions = $this->gateway->getByPost("https://lewisdale.dev/post/a-new-post");
|
||||||
|
|
||||||
|
$this->assertCount(5, $mentions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user