<?php

namespace NoahVet\Reef\Contract\Phpunit;

interface EndpointTestResponseInterface
{
    public function assertStatus(int $code): static;

    public function assertOk(): static;

    public function assertCreated(): static;

    public function assertNoContent(): static;

    public function assertUnauthorized(): static;

    public function assertForbidden(): static;

    public function assertNotFound(): static;

    public function assertUnprocessable(): static;

    public function assertMatchesExpectedBody(): static;

    /** @param list<string> $fields */
    public function assertExcluding(array $fields): static;

    /** @param array<mixed> $subset */
    public function assertJsonContains(array $subset): static;

    public function assertJsonHasKey(string $key): static;

    public function json(?string $key = null): mixed;

    public function content(): string;

    public function assertBinaryContent(string $expected): static;

    public function header(string $name): ?string;

    public function assertHeader(string $name, string $value): static;

    public function assertHeaderContains(string $name, string $value): static;
}
