<?php declare(strict_types=1);
$dotenv = new Dotenv\Dotenv(__DIR__ . '/../');
$dotenv->load();

class WilayahTest extends BaseTest {
    const PREFIX = 'wilayah';

    protected function wilayahSuccessResponse($path, $successMessage) {
        $response = $this->client->request(
            'GET',
            $path,
            [
                'query' => [
                    'query' => 'ACEH'
                ]
            ]
        );
        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), true);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse
        );
        $this->assertGreaterThan(0, sizeof($jsonResponse['data']));

        self::$messages = array_merge(self::$messages, [$successMessage]);
    }

    protected function wilayahRequiredResponse($path, $successMessage) {
        $this->doAPIShouldGiveRequiredResponse(
            'GET',
            $path,
            460,
            [
                'success' => false,
                'message' => "Validation Errors",
                "errors" => [
                    [
                        "field" => "query",
                        "message" => "Field query is required"
                    ]
                ]
            ],
            $successMessage
        );
    }

    public function testKorsupgahShouldGiveSuccessResponse(): void {
        $path = self::PREFIX . '/korsupgah';
        $this->wilayahSuccessResponse($path, "\ntestKorsupgahShouldGiveSuccessResponse PASSED");
    }

    public function testKorsupgahShouldGiveRequiredResponse(): void {
        $path = self::PREFIX . '/korsupgah';
        $this->wilayahRequiredResponse($path, "testKorsupgahShouldGiveRequiredResponse PASSED");
    }

    public function testElhkpnShouldGiveSuccessResponse(): void {
        $path = self::PREFIX . '/elhkpn';
        $this->wilayahSuccessResponse($path, "testElhkpnShouldGiveSuccessResponse PASSED");
    }

    public function testElhkpnShouldGiveRequiredResponse(): void {
        $path = self::PREFIX . '/elhkpn';
        $this->wilayahRequiredResponse($path, "testElhkpnShouldGiveRequiredResponse PASSED");
    }

    public function testGratifikasiShouldGiveSuccessResponse(): void {
        $path = self::PREFIX . '/gratifikasi';
        $this->wilayahSuccessResponse($path, "testGratifikasiShouldGiveSuccessResponse PASSED");
    }

    public function testGratifikasiShouldGiveRequiredResponse(): void {
        $path = self::PREFIX . '/gratifikasi';
        $this->wilayahRequiredResponse($path, "testGratifikasiShouldGiveRequiredResponse PASSED");
    }

    public function testDetailByCodeShouldGiveSuccessResponse(): void {
        $path = self::PREFIX . '/detail-by-code/11';
        $this->doAPIShouldGiveSubsetResponse(
            'GET',
            $path,
            200,
            [
                'data' => ['code' => '11']
            ],
            'testDetailByCodeShouldGiveSuccessResponse PASSED'
        );
    }

    public function testDetailByCodeShouldGiveNotFoundResponse(): void {
        $path = self::PREFIX . '/detail-by-code/01';
        $this->doAPIShouldGiveSubsetResponse(
            'GET',
            $path,
            200,
            [
                'success' => true,
                'data' => false
            ],
            'testDetailByCodeShouldGiveNotFoundResponse PASSED'
        );
    }
}
