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

class SekolahTest extends BaseTest
{
    protected $token;

    /*public function setUp()
    {
        parent::setUp();
        $this->token = $this->doLogin();
    }*/

    public function doLogin()
    {
        $login = $this->login(getenv("TEST_ADMIN_USERNAME"), getenv("TEST_ADMIN_PASSWORD"));
        $this->assertContains(
            [
                'success' => true
            ],
            $login,
            "login Failed"
        );
        return $login['data']['token'];
    }

    public function testJenjangShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/jenjang', [], 200, "\n\t\t\tsekolah/search Passed");
    }

    public function testSearchShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/search',
        [
            "query" => [
                "jenjang" => 4,
                "kota" => "bre",
                "nama" => "SMKN 1"
            ]
        ],
        200, "\n\t\t\tsekolah/jenjang Passed");
    }

    public function testSearchShouldGiveNotFoundResponse() {
        $this->doAPIShouldGiveNotFoundResponse(
            'GET', 'sekolah/search',
            [
                "query" => [
                    "jenjang" => 1,
                    "kota" => "bandungs",
                    "nama" => "lagadar"
                ]
            ],
            200, "\t\t\tsekolah/search not found response Passed"
        );
    }

    public function testSearchShouldGiveMustBeNumericResponse() {
        $this->doShouldGiveMustBeNumericResponse('GET', 'sekolah/search',
            [
                'query' => [
                    "jenjang" => "abc",
                    'limit' => 'abc',
                    "offset" => "abc"
                ]
            ],
            460,
            [
                'success' => false,
                "errors" => [

                    [
                        "field" => "limit",
                        "message" => "Field limit must be numeric"
                    ],
                    [
                        "field" => "offset",
                        "message" => "Field offset must be numeric"
                    ],
                    [
                        "field" => "jenjang",
                        "message" => "Field jenjang must be numeric"
                    ]
                ]
            ],
            "\t\t\tsekolah/search must be numeric response Passed"
        );
    }

     public function testFasilitasShouldGiveSuccessResponse() {
         $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/fasilitas',
         [
             "query" => [
                 "npsn" => "20326427"
             ]
         ],
         200, "\n\t\t\tsekolah/fasilitas Passed");
     }

    public function testFasilitasShouldGiveNotFoundResponse() {
        $this->doAPIShouldGiveNotFoundResponse(
            'GET', 'sekolah/fasilitas',
            [
                "query" => [
                    "npsn" => "302046711"
                ]
            ],
            200, "\t\t\tsekolah/fasilitas not found response Passed"
        );
    }

    public function testFasilitasShouldGiveRequiredResponse() {
        $this->doAPIShouldGiveRequiredResponse('GET', 'sekolah/fasilitas', 460,
            [
                'success' => false,
                "errors" => [
                    [
                        "field" => "npsn",
                        "message" => "Field npsn is required"
                    ]
                ]
            ],
            "\t\t\tsekolah/fasilitas required response Passed"
        );
    }

    public function testJenjangAllShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/jenjang-all', [], 200, "\n\t\t\tsekolah/jenjang-all Passed");
    }

    public function testIndexShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah', [
            'query' => [
                'npsn' => '20326427'
            ]
        ], 200, "\n\t\t\tsekolah/index Passed");
    }

    public function testIndexShouldGiveRequiredResponse() {
        $this->doAPIShouldGiveRequiredResponse('GET', 'sekolah', 460, [
            'success' => false,
            'errors' => [
                [
                    'field' => 'npsn',
                    'message' => 'Field npsn is required'
                ]
            ]
        ], "\n\t\t\tsekolah/index required Passed");
    }

    public function testDetailShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/detail', [
            'query' => [
                'npsn' => '20326427'
            ]
        ], 200, "\n\t\t\tsekolah/detail Passed");
    }

    public function testDetailShouldGiveRequiredResponse() {
        $this->doAPIShouldGiveRequiredResponse('GET', 'sekolah/detail', 460, [
            'success' => false,
            'errors' => [
                [
                    'field' => 'npsn',
                    'message' => 'Field npsn is required'
                ]
            ]
        ], "\n\t\t\tsekolah/detail required Passed");
    }

    public function testAnggaranListProvinsiShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/anggaran_list_provinsi', [], 200, "\n\t\t\tsekolah/anggaran_list_provinsi Passed");
    }

    public function testAnggaranListKotaKabupatenShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/anggaran_list_kota_kabupaten', [
            'query' => [
                'provinsi' => 'Prov. Jawa Tengah'
            ]
        ], 200, "\n\t\t\tsekolah/anggaran_list_kota_kabupaten Passed");
    }

    public function testAnggaranListKotaKabupatenShouldGiveRequiredResponse() {
        $this->doAPIShouldGiveRequiredResponse('GET', 'sekolah/anggaran_list_kota_kabupaten', 460, [
            'success' => false,
            'errors' => [
                [
                    'field' => 'provinsi',
                    'message' => 'Field provinsi is required'
                ]
            ]
        ], "\n\t\t\tsekolah/anggaran_list_kota_kabupaten required Passed");
    }

    public function testAnggaranListSekolahShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/anggaran_list_sekolah', [
            'query' => [
                'provinsi' => 'Prov. Jawa Tengah',
                'kota_kabupaten' => 'Kab. Sragen'
            ]
        ], 200, "\n\t\t\tsekolah/anggaran_list_sekolah Passed");
    }

    public function testAnggaranListSekolahShouldGiveRequiredResponse() {
        $this->doAPIShouldGiveRequiredResponse('GET', 'sekolah/anggaran_list_sekolah', 460, [
            'success' => false,
            'errors' => [
                [
                    'field' => 'provinsi',
                    'message' => 'Field provinsi is required'
                ],
                [
                    'field' => 'kota_kabupaten',
                    'message' => 'Field kota_kabupaten is required'
                ]
            ]
        ], "\n\t\t\tsekolah/anggaran_list_sekolah required Passed");
    }

    public function testAnggaranShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/anggaran', [
            'query' => [
                'npsn' => '20326427'
            ]
        ], 200, "\n\t\t\tsekolah/anggaran Passed");
    }

    public function testAnggaranShouldGiveRequiredResponse() {
        $this->doAPIShouldGiveRequiredResponse('GET', 'sekolah/anggaran', 460, [
            'success' => false,
            'errors' => [
                [
                    'field' => 'npsn',
                    'message' => 'Field npsn is required'
                ]
            ]
        ], "\n\t\t\tsekolah/anggaran required Passed");
    }

    public function testListGuruShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSuccessResponse('GET', 'sekolah/list_guru', [
            'query' => [
                'npsn' => '20326427'
            ]
        ], 200, "\n\t\t\tsekolah/list_guru Passed");
    }

    public function testListGuruShouldGiveRequiredResponse() {
        $this->doAPIShouldGiveRequiredResponse('GET', 'sekolah/list_guru', 460, [
            'success' => false,
            'errors' => [
                [
                    'field' => 'npsn',
                    'message' => 'Field npsn is required'
                ]
            ]
        ], "\n\t\t\tsekolah/list_guru required Passed");
    }

    public function testLikeShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSimpleSuccessResponse(
            'POST',
            'sekolah/like/20531228',
            [
                'headers' => [
                    'Authorization' => "Bearer " . $this->doLogin(),
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "\n\t\t\tsekolah/like Passed"
        );
    }

    public function testUnLikeShouldGiveSuccessResponse() {
        $this->doAPIShouldGiveSimpleSuccessResponse(
            'POST',
            'sekolah/unlike/20531228',
            [
                'headers' => [
                    'Authorization' => "Bearer " . $this->doLogin(),
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "\n\t\t\tsekolah/unlike Passed"
        );
    }

    public function testListKegiatanFavoriteGiveSuccessResponse() {
        $this->doAPIShouldGiveSimpleSuccessResponse(
            'GET',
            'sekolah/list_sekolah_kegiatan_favorite',
            [
                'headers' => [
                    'Authorization' => "Bearer " . $this->doLogin(),
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "\n\t\t\tsekolah/list_sekolah_kegiatan_favorite Passed"
        );
    }

    public function testGetTotalKegiatanFavoriteGiveSuccessResponse() {
        $this->doAPIShouldGiveSimpleSuccessResponse(
            'GET',
            'sekolah/get_total_kegiatan_favorite',
            [
                'headers' => [
                    'Authorization' => "Bearer " . $this->doLogin(),
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "\n\t\t\tsekolah/get_total_kegiatan_favorite Passed"
        );
    }

    public function testTableauPAKGiveSuccessResponse() {
        $this->doAPIShouldGiveSimpleSuccessResponse(
            'GET',
            'sekolah/tableau_pak/1',
            [
                'headers' => [
                    'Authorization' => "Bearer " . $this->doLogin(),
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "\n\t\t\tsekolah/tableau_pak Passed"
        );
    }
}
