<?php

class KorsupgahIndikatorTest extends BaseTest
{
    public function testLogin()
    {
        $login = $this->login(getenv("TEST_ADMIN_USERNAME"), getenv("TEST_ADMIN_PASSWORD"));
        $this->assertContains(
            [
                'success' => true
            ],
            $login,
            "\nlogin Failed"
        );
        return $login['data']['token'];
    }

    /**
     * @depends testLogin
     * @param $token
     */
    public function testCreateShouldGiveSuccessResponse($token)
    {
        $areaIntervensi = $this->doAPIShouldGiveSuccessResponse(
            'GET',
            'korsupgah/area_intervensi/list',
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $token
                ]
            ],
            200,
            ''
        );
        $areaIntervensiId = $areaIntervensi['data']['result'][0]['id'];
        $res = $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'korsupgah/indikator/create',
            [
                'json' => [
                    'id_area_intervensi' => (int)$areaIntervensiId,
                    'nama' => 'Nama Indikator',
                    'presentase_bobot' => 20
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $token
                ]
            ],
            200,
            "\ncreate Passed"
        );

        return [
            'id' => (int)$res['data']['result'][0]['id'],
            'data' => $res['data']['result'][0],
            'token' => $token
        ];
    }

    /**
     * @depends testCreateShouldGiveSuccessResponse
     * @param $data
     */
    public function testDetailShouldGiveSuccessResponse($data)
    {
        $this->doAPIShouldGiveSuccessResponse(
            'GET',
            'korsupgah/indikator/detail/' . $data['id'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ],
            200,
            "\ndetail passed"
        );
    }

    /**
     * @depends testCreateShouldGiveSuccessResponse
     * @param $data
     */
    public function testUpdateShouldGiveSuccessResponse($data)
    {
        $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'korsupgah/indikator/update/' . $data['id'],
            [
                'json' => [
                    'id_area_intervensi' => (int)$data['data']['id_area_intervensi'],
                    'nama' => 'Nama Indikator Edited',
                    'presentase_bobot' => 30
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ],
            200,
            "\nupdate passed"
        );
    }

    /**
     * @depends testCreateShouldGiveSuccessResponse
     * @param $data
     */
    public function testDeleteShouldGiveSuccessResponse($data)
    {
        $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'korsupgah/indikator/delete/' . $data['id'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token'],
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "\ndelete passed"
        );
    }

    /**
     * @depends testCreateShouldGiveSuccessResponse
     * @param $data
     */
    public function testRestoreShouldGiveSuccessResponse($data)
    {
        $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'korsupgah/indikator/restore/' . $data['id'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token'],
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "\nrestore passed"
        );
    }

    /** @depends testLogin
     * @param $token
     */
    public function testListShouldGiveSuccessResponse($token)
    {
        $this->doAPIShouldGiveSuccessResponse(
            'GET',
            'korsupgah/indikator/list',
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $token
                ]
            ],
            200,
            "\nlist Passed"
        );
    }
}