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