<?php

require_once 'ABaseTest.php';

class StranasUkuranKeberhasilanTest extends BaseTest
{
    protected $token;
    protected $userId;

    public function setUp()
    {
        parent::setUp();
        $loginInfo = $this->doLogin();
        $this->token = $loginInfo['token'];
        $this->userId = $loginInfo['user_id'];
    }

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

    public function testIndexSuccess() {
        $this->doAPIShouldGiveSuccessResponse(
            'GET',
            'stranas/ukuran_keberhasilan',
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ]
            ],
            200,
            "\ntestIndexSuccess Passed"
        );
    }

    public function testFetchSubaksi() {
        $results = $this->doAPIShouldGiveSuccessResponse(
            'GET',
            'stranas/subaksi',
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ]
            ],
            200,
            "testFetchSubaksi Passed"
        );
        
        return $results['data']['result'][0];
    }

    /**
     * @depends testFetchSubaksi
     * @param $data
     * @return mixed
     */
    public function testCreateSuccess($data) {
        $results = $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'stranas/ukuran_keberhasilan/create',
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ],
                'json' => [
                    "id_subaksi" => $data['id'],
                    "nama" => "PHPUNIT",
                    "keterangan" => "Test create stranas ukuran keberhasilan dari PHPUnit",
                    "presentase_bobot" => 100
                ]
            ],
            200,
            "testCreateSuccess Passed"
        );

        return $results['data']['result'][0];
    }

    /**
     * @depends testCreateSuccess
     * @param $data
     * @return mixed
     */
    public function testEditSuccess($data) {
        $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'stranas/ukuran_keberhasilan/update/' . $data['id'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ],
                'json' => [
                    "id_subaksi" => $data['id_subaksi'],
                    "nama" => "PHPUNIT EDITED",
                    "keterangan" => "Test create stranas ukuran keberhasilan dari PHPUnit",
                    "presentase_bobot" => 100
                ]
            ],
            200,
            "testEditSuccess Passed"
        );

        return $data;
    }

    /**
     * @depends testEditSuccess
     * @param $data
     * @return mixed
     */
    public function testDetailSuccess($data) {
        $results = $this->doAPIShouldGiveSuccessResponse(
            'GET',
            'stranas/ukuran_keberhasilan/detail/' . $data['id'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token
                ]
            ],
            200,
            "testDetailSuccess Passed"
        );
        $result = $results['data']['result'][0];
        $this->assertEquals($result['id'], $data['id']);
        $this->assertEquals($result['nama'], 'PHPUNIT EDITED');

        return $data;
    }

    /**
     * @depends testDetailSuccess
     * @param $data
     * @return mixed
     */
    public function testDeleteSuccess($data) {
        $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'stranas/ukuran_keberhasilan/delete/' . $data['id'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token,
                    'Content-Type' => 'application/json'
                ],
            ],
            200,
            "testDeleteSuccess Passed"
        );

        return $data;
    }

    /**
     * @depends testDeleteSuccess
     * @param $data
     */
    public function testRestoreSuccess($data) {
        $this->doAPIShouldGiveSuccessResponse(
            'POST',
            'stranas/ukuran_keberhasilan/restore/' . $data['id'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $this->token,
                    'Content-Type' => 'application/json'
                ]
            ],
            200,
            "testRestoreSuccess Passed"
        );
    }
}
