<?php

require_once "ABaseTest.php";
class KeluhanBansosFlowTest extends BaseTest
{
    private $userNormal1 = 'user2156@mail.com'; //old Format
    // private $userNormal1 = 'user2179';
    // private $indexUserNormal1 = '2179';
    private $isNeedRegister = false;
    //Sesuaikan variabel di atas
    private $userNormal2 = 'user2155@mail.com';
    private $userVerifikator = 'user2161@mail.com';
    private $userPemdaBandung = 'user2159@mail.com';
    private $password = 'password12345';

    /**
     * Keluhan status
     */
    const NEW = 1;
    const CONFIRMED = 2;
    const ON_PROGRESS = 3;
    const DONE = 4;
    const CLOSED = 5;
    const NO_RESPONSE = 6;
    const CONFIRMED_TO_PEMDA = 20;
    const CONFIRMED_TO_KEMSOS = 21;
    const CONFIRMED_TO_DUMASKPK = 22;
    const CONFIRMED_TO_KEMENKOPUKM = 23;
    const DONE_BY_VERIFIKATOR = 40;

    //Register User
    public function testRegister()
    {
        if($this->isNeedRegister) {
            $response = $this->client->request('POST', 'auth/register',
                [
                    'multipart' => [
                        [
                            'name' => 'username',
                            'contents' => $this->userNormal1,
                        ],
                        [
                            'name' => 'password',
                            'contents' => $this->password,
                        ],
                        [
                            'name' => 'nama',
                            'contents' => 'Nama User ' . $this->indexUserNormal1,
                        ],
                        [
                            'name' => 'tempat_lahir',
                            'contents' => 'Jakarta',
                        ],
                        [
                            'name' => 'tgl_lahir',
                            'contents' => '1994-11-19',
                        ],
                        [
                            'name' => 'email',
                            'contents' => $this->userNormal1 . '@mail.com',
                        ],
                        [
                            'name' => 'jenis_kelamin',
                            'contents' => 'L',
                        ],
                        [
                            'name' => 'phone',
                            'contents' => '08121234' . $this->indexUserNormal1,
                        ],
                    ]
                ]
            );

            $statusCode = $response->getStatusCode();
            $jsonResponse = json_decode($response->getBody(), TRUE);
            $this->assertEquals(200, $statusCode);
            $this->assertContains(
                [
                    'success' => true
                ],
                $jsonResponse,
                "Error on auth/register"
            );
            //$this->assertEquals(0, $jsonResponse['data']['total_record']);
            self::$messages = array_merge(self::$messages, ["\n\t\t\tRegister Berhasil User [" . $this->userNormal1 . "]"]);
        }
        else {
            $this->assertEquals(1, 1);
        }
    }

    # region Scenario Keluhan Bansos #1
    // Scenario Keluhan Bansos #1 
    // -> Login Normal User 1 (2156)
    // -> Create Keluhan Bansos
    // -> Komen Keluhan Bansos
    // -> Login Normal User 2 (2155)
    // -> Komen Keluhan Bansos
    // -> Login User Verifikator (2161)
    // -> Change Status Diselesaikan oleh Verifikator
    // -> Cek Detail Keluhan
    // -> Cek Status Keluhan Bansos

    public function testLogin_1_1()
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userNormal1,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\n\t\t\tLogin Sukses User Pelapor [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_1_1
     */
    public function testSubmitKeluhan_1($data)
    {
        $response = $this->client->request('POST', 'bansos/report',
            [
                'multipart' => [
                    [
                        'name' => 'produk_id',
                        'contents' => '9',
                    ],
                    [
                        'name' => 'objek_id',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nama_objek',
                        'contents' => 'Pemerintah Kota Bandung',
                    ],
                    [
                        'name' => 'judul',
                        'contents' => 'Tes Keluhan Bansos Bandung dari TestUnit',
                    ],
                    [
                        'name' => 'is_anonymous',
                        'contents' => '0',
                    ],
                    [
                        'name' => 'konten_diskusi',
                        'contents' => 'Diskusi ini ada keluhan bansos kota bandung yang dibuat dari TestUnit',
                    ],
                    [
                        'name' => 'link_terkait',
                        'contents' => '',
                    ],
                    [
                        'name' => 'id_instansi',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nik',
                        'contents' => '1234567890123456,0;1234567890098765,0',
                    ],
                    [
                        'name' => 'id_topik',
                        'contents' => '7',
                    ],
                    [
                        'name' => 'phone',
                        'contents' => '081234567890',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on diskusi/submit"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tSubmit Keluhan Berhasil | UUID : [" . $jsonResponse['data']['diskusi_uuid'] . "]"]);
        $data['diskusi_id'] = $jsonResponse['data']['diskusi_id'];
        $data['diskusi_uuid'] = $jsonResponse['data']['diskusi_uuid'];

        return $data;
    }

    /**
     * @depends testSubmitKeluhan_1
     */
    public function testKirimKomentar_1_1($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKirim Komentar Pelapor Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testKirimKomentar_1_1
     */
    public function testLogin_1_2($data)
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userNormal2,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tLogin Sukses User Biasa [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_1_2
     */
    public function testKirimKomentar_1_2($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKirim Komentar User lain Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testKirimKomentar_1_2
     */
    public function testLogin_1_3($data)
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userVerifikator,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tLogin Sukses User Verifikator [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_1_3
     */
    public function testChangeStatus_1_1($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                    [
                        'name' => 'confirm_all_status',
                        'contents' => '40',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tGanti Status DoneByVerifikator Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testChangeStatus_1_1
     */
    public function testDetilDiskusi_1($data)
    {
        $response = $this->client->request('GET', 'diskusi/detil/' . $data['diskusi_uuid'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on diskusi/detil"
        );
        $this->assertGreaterThan(0, $jsonResponse['data']['total_record']);
        $this->assertArrayHasKey('id_diskusi_bansos', $jsonResponse['data']['result'][0]);
        $this->assertGreaterThan(0, $jsonResponse['data']['result'][0]['id_diskusi_bansos']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKeluhan Bansos Valid !!"]);
        $data['id_diskusi_bansos'] = $jsonResponse['data']['result'][0]['id_diskusi_bansos'];

        return $data;
    }

    /**
     * @depends testDetilDiskusi_1
     */
    public function testCekStatus_1($data)
    {
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on bansos/detail_info"
        );
        
        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(4, $jsonResponse['data']['status']); // Check Status Done
        self::$messages = array_merge(self::$messages, ["\t\t\tStatus Keluhan Done !!"]);
        //self::$messages = array_merge(self::$messages, ["\t\t\t" . $jsonResponse['data']['status']]);

        return $data;
    }
    
    #endregion

    #region Scenario Keluhan Bansos #2
    // Scenario Keluhan Bansos #2
    // -> Login Normal User 1 (2156)
    // -> Create Keluhan Bansos
    // -> Komen Keluhan Bansos
    // -> Login Normal User 2 (2155)
    // -> Komen Keluhan Bansos
    // -> Login User Verifikator (2161)
    // -> Change Status Diteruskan ke Dumas KPK -> otomatis akan jadi Done
    // -> Cek Status Keluhan

    public function testLogin_2_1()
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userNormal1,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\n\t\t\tLogin Sukses User Pelapor [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_2_1
     */
    public function testSubmitKeluhan_2($data)
    {
        $response = $this->client->request('POST', 'bansos/report',
            [
                'multipart' => [
                    [
                        'name' => 'produk_id',
                        'contents' => '9',
                    ],
                    [
                        'name' => 'objek_id',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nama_objek',
                        'contents' => 'Pemerintah Kota Bandung',
                    ],
                    [
                        'name' => 'judul',
                        'contents' => 'Tes Keluhan Bansos Bandung dari TestUnit',
                    ],
                    [
                        'name' => 'is_anonymous',
                        'contents' => '0',
                    ],
                    [
                        'name' => 'konten_diskusi',
                        'contents' => 'Diskusi ini ada keluhan bansos kota bandung yang dibuat dari TestUnit',
                    ],
                    [
                        'name' => 'link_terkait',
                        'contents' => '',
                    ],
                    [
                        'name' => 'id_instansi',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nik',
                        'contents' => '1234567890123456,0;1234567890098765,0',
                    ],
                    [
                        'name' => 'id_topik',
                        'contents' => '7',
                    ],
                    [
                        'name' => 'phone',
                        'contents' => '081234567890',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on diskusi/submit"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tSubmit Keluhan Berhasil | UUID : [" . $jsonResponse['data']['diskusi_uuid'] . "]"]);
        $data['diskusi_id'] = $jsonResponse['data']['diskusi_id'];
        $data['diskusi_uuid'] = $jsonResponse['data']['diskusi_uuid'];

        return $data;
    }

    /**
     * @depends testSubmitKeluhan_2
     */
    public function testKirimKomentar_2_1($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKirim Komentar Pelapor Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testKirimKomentar_2_1
     */
    public function testLogin_2_2($data)
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userNormal2,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tLogin Sukses User Biasa [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_1_2
     */
    public function testKirimKomentar_2_2($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKirim Komentar User lain Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testKirimKomentar_2_2
     */
    public function testLogin_2_3($data)
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userVerifikator,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tLogin Sukses User Verifikator [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_2_3
     */
    public function testChangeStatus_2_1($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                    [
                        'name' => 'confirm_assigned_status',
                        'contents' => '22',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tGanti Status DiteruskanDuMasKPK Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testChangeStatus_2_1
     */
    public function testDetilDiskusi_2($data)
    {
        $response = $this->client->request('GET', 'diskusi/detil/' . $data['diskusi_uuid'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on diskusi/detil"
        );
        $this->assertGreaterThan(0, $jsonResponse['data']['total_record']);
        $this->assertArrayHasKey('id_diskusi_bansos', $jsonResponse['data']['result'][0]);
        $this->assertGreaterThan(0, $jsonResponse['data']['result'][0]['id_diskusi_bansos']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKeluhan Bansos Valid !!"]);
        $data['id_diskusi_bansos'] = $jsonResponse['data']['result'][0]['id_diskusi_bansos'];

        return $data;
    }

    /**
     * @depends testDetilDiskusi_2
     */
    public function testCekStatus_2($data)
    {
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on bansos/detail_info"
        );
        
        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(4, $jsonResponse['data']['status']); // Check Status Done
        self::$messages = array_merge(self::$messages, ["\t\t\tStatus Keluhan Done !!"]);
        //self::$messages = array_merge(self::$messages, ["\t\t\t" . $jsonResponse['data']['status']]);

        return $data;
    }
    
    #endregion

    # region Scenario Keluhan Bansos #3
    // Scenario Keluhan Bansos #3
    // -> Login Normal User 1 (2156)
    // -> Create Keluhan Bansos
    // -> Komen Keluhan Bansos
    // -> Login Normal User 2 (2155)
    // -> Komen Keluhan Bansos
    // -> Login User Verifikator (2161)
    // -> Change Status Diteruskan ke Pemda
    // -> Cek Status Keluhan
    // -> Login User Pemda Bandung (2159)
    // -> Change Status On Progress
    // -> Cek Status Keluhan
    // -> Change Status Done
    // -> Cek Status Keluhan

    public function testLogin_3_1()
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userNormal1,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\n\t\t\tLogin Sukses User Pelapor [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_3_1
     */
    public function testSubmitKeluhan_3($data)
    {
        $response = $this->client->request('POST', 'bansos/report',
            [
                'multipart' => [
                    [
                        'name' => 'produk_id',
                        'contents' => '9',
                    ],
                    [
                        'name' => 'objek_id',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nama_objek',
                        'contents' => 'Pemerintah Kota Bandung',
                    ],
                    [
                        'name' => 'judul',
                        'contents' => 'Tes Keluhan Bansos Bandung dari TestUnit',
                    ],
                    [
                        'name' => 'is_anonymous',
                        'contents' => '0',
                    ],
                    [
                        'name' => 'konten_diskusi',
                        'contents' => 'Diskusi ini ada keluhan bansos kota bandung yang dibuat dari TestUnit',
                    ],
                    [
                        'name' => 'link_terkait',
                        'contents' => '',
                    ],
                    [
                        'name' => 'id_instansi',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nik',
                        'contents' => '1234567890123456,0;1234567890098765,0',
                    ],
                    [
                        'name' => 'id_topik',
                        'contents' => '7',
                    ],
                    [
                        'name' => 'phone',
                        'contents' => '081234567890',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on diskusi/submit"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tSubmit Keluhan Berhasil | UUID : [" . $jsonResponse['data']['diskusi_uuid'] . "]"]);
        $data['diskusi_id'] = $jsonResponse['data']['diskusi_id'];
        $data['diskusi_uuid'] = $jsonResponse['data']['diskusi_uuid'];

        return $data;
    }

    /**
     * @depends testSubmitKeluhan_3
     */
    public function testKirimKomentar_3_1($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKirim Komentar Pelapor Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testKirimKomentar_3_1
     */
    public function testLogin_3_2($data)
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userNormal2,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tLogin Sukses User Biasa [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_3_2
     */
    public function testKirimKomentar_3_2($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKirim Komentar User lain Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testKirimKomentar_3_2
     */
    public function testLogin_3_3($data)
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userVerifikator,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tLogin Sukses User Verifikator [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_3_3
     */
    public function testChangeStatus_3_1($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                    [
                        'name' => 'confirm_all_status',
                        'contents' => '20',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tGanti Status DiteruskanKePemda Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testChangeStatus_3_1
     */
    public function testDetilDiskusi_3($data)
    {
        $response = $this->client->request('GET', 'diskusi/detil/' . $data['diskusi_uuid'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on diskusi/detil"
        );
        $this->assertGreaterThan(0, $jsonResponse['data']['total_record']);
        $this->assertArrayHasKey('id_diskusi_bansos', $jsonResponse['data']['result'][0]);
        $this->assertGreaterThan(0, $jsonResponse['data']['result'][0]['id_diskusi_bansos']);
        self::$messages = array_merge(self::$messages, ["\t\t\tKeluhan Bansos Valid !!"]);
        $data['id_diskusi_bansos'] = $jsonResponse['data']['result'][0]['id_diskusi_bansos'];

        return $data;
    }

    /**
     * @depends testDetilDiskusi_3
     */
    public function testCekStatus_3_1($data)
    {
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on bansos/detail_info"
        );
        
        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(self::CONFIRMED, $jsonResponse['data']['status']); // Check Status Confirmed
        self::$messages = array_merge(self::$messages, ["\t\t\tStatus Keluhan Confirmed !!"]);
        //self::$messages = array_merge(self::$messages, ["\t\t\t" . $jsonResponse['data']['status']]);

        return $data;
    }

    /**
     * @depends testCekStatus_3_1
     */
    public function testLogin_3_4($data)
    {
        $response = $this->client->request('POST', 'auth/login',
            [
                'json' => [
                    'username' => $this->userPemdaBandung,
                    'password' => $this->password
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on auth/login"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tLogin Sukses User Pemda [" . $jsonResponse['data']['user_id'] . "]"]);
        $data['token'] = $jsonResponse['data']['token'];

        return $data;
    }

    /**
     * @depends testLogin_3_4
     */
    public function testChangeStatus_3_2($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                    [
                        'name' => 'follow_up_status',
                        'contents' => '3',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tGanti Status OnProgress Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testChangeStatus_3_2
     */
    public function testCekStatus_3_2($data)
    {
        $loginRequest = $this->login($this->userVerifikator, $this->password);
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $loginRequest['data']['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on bansos/detail_info"
        );
        
        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(self::ON_PROGRESS, $jsonResponse['data']['status']); // Check Status OnProgress
        self::$messages = array_merge(self::$messages, ["\t\t\tStatus Keluhan OnProgress !!"]);

        return $data;
    }

    /**
     * @depends testCekStatus_3_2
     */
    public function testChangeStatus_3_3($data)
    {
        $response = $this->client->request('POST', 'diskusi/komentar/kirim_attachment',
            [
                'multipart' => [
                    [
                        'name' => 'diskusi_id',
                        'contents' => $data['diskusi_id'],
                    ],
                    [
                        'name' => 'komentar',
                        'contents' => 'ini adalah sebuaah komentar dari testunit',
                    ],
                    [
                        'name' => 'follow_up_status',
                        'contents' => '4',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on komentar/kirim_attachment"
        );
        //$this->assertEquals(0, $jsonResponse['data']['total_record']);
        self::$messages = array_merge(self::$messages, ["\t\t\tGanti Status Done Berhasil | Komentar ID [" . $jsonResponse['data']['komentar_id'] . "]"]);

        return $data;
    }

    /**
     * @depends testChangeStatus_3_3
     */
    public function testCekStatus_3_3($data)
    {
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "Error on bansos/detail_info"
        );
        
        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(4, $jsonResponse['data']['status']); // Check Status Done
        self::$messages = array_merge(self::$messages, ["\t\t\tStatus Keluhan Done !!"]);

        return $data;
    }
    
    #endregion

    #region Scenario Keluhan Covid-19
    // Scenario Keluhan Covid-19
    // -> Login Normal User 1 (2156)
    // -> Create Keluhan Covid-19 -> notif from owner (2156) to admin JAGA (50), TL Pemda (2159)
    // -> Cek Detail Keluhan
    // -> Login Normal User 2 (2155)
    // -> Komen Keluhan Covid-19
    // -> Login User Verifikator (2161)
    // -> Change Status Teruskan ke Pemda -> notif from verifikator (2161) to owner (2156), TL Pemda (2159)
    // -> Cek Status Keluhan Covid-19 = CONFIRMED
    // -> Login User TL Pemda (2159)
    // -> Change Status Ditindaklanjuti -> notif from TL Pemda (2159) to owner (2156)
    // -> Cek Status Keluhan Covid-19 = ON PROGRESS
    // -> Change Status Selesai -> notif from TL Pemda (2159) to owner (2156)
    // -> Cek Status Keluhan Covid-19 = DONE
    /**
     * @depends testLogin_1_1
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testSubmitKeluhan($data)
    {
        $url = 'bansos/report';
        $response = $this->client->request('POST', $url,
            [
                'multipart' => [
                    [
                        'name' => 'produk_id',
                        'contents' => '9',
                    ],
                    [
                        'name' => 'objek_id',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nama_objek',
                        'contents' => 'Pemerintah Kota Bandung',
                    ],
                    [
                        'name' => 'judul',
                        'contents' => 'Tes Keluhan Penanganan Covid-19 dari TestUnit',
                    ],
                    [
                        'name' => 'is_anonymous',
                        'contents' => '0',
                    ],
                    [
                        'name' => 'konten_diskusi',
                        'contents' => 'Diskusi ini ada keluhan penanganan covid-19 yang dibuat dari TestUnit',
                    ],
                    [
                        'name' => 'link_terkait',
                        'contents' => '',
                    ],
                    [
                        'name' => 'id_instansi',
                        'contents' => '522',
                    ],
                    [
                        'name' => 'nik',
                        'contents' => '1234567890123456,0;1234567890098765,0',
                    ],
                    [
                        'name' => 'id_topik',
                        'contents' => '9',
                    ],
                    [
                        'name' => 'phone',
                        'contents' => '081234567890',
                    ],
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testSubmitKeluhanPenangananCovid failed"
        );
        self::$messages = array_merge(self::$messages, ["testSubmitKeluhanPenangananCovid passed"]);
        $data['diskusi_id'] = $jsonResponse['data']['diskusi_id'];
        $data['diskusi_uuid'] = $jsonResponse['data']['diskusi_uuid'];

        return $data;
    }

    /**
     * @depends testSubmitKeluhan
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testDetilKeluhan($data)
    {
        $response = $this->client->request('GET', 'diskusi/detil/' . $data['diskusi_uuid'],
            [
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testDetilKeluhan failed"
        );
        $this->assertGreaterThan(0, $jsonResponse['data']['total_record']);
        $this->assertArrayHasKey('id_diskusi_bansos', $jsonResponse['data']['result'][0]);
        $this->assertGreaterThan(0, $jsonResponse['data']['result'][0]['id_diskusi_bansos']);
        $data['id_diskusi_bansos'] = $jsonResponse['data']['result'][0]['id_diskusi_bansos'];

        self::$messages = array_merge(self::$messages, ["testDetilKeluhan passed"]);

        return $data;
    }

    /**
     * @depends testDetilKeluhan
     */
    public function testKomentarKeluhan($data)
    {
        $loginRequest = $this->login($this->userNormal2, $this->password);
        $token = $loginRequest['data']['token'];

        $url = 'diskusi/komentar/kirim';
        $response = $this->client->request('POST', $url,
            [
                'json' => [
                    'diskusi_id' => $data['diskusi_id'],
                    'komentar' => 'komentar untuk keluhan penanganan covid dari testunit'
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $token
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testKomentarKeluhanPenangananCovid failed"
        );
        self::$messages = array_merge(self::$messages, ["testKomentarKeluhanPenangananCovid passed"]);

        return $data;
    }

    /**
     * @depends testKomentarKeluhan
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testChangeStatusKeluhanDiteruskan($data)
    {
        $loginRequest = $this->login($this->userVerifikator, $this->password);
        $token = $loginRequest['data']['token'];

        $url = 'diskusi/komentar/kirim';
        $response = $this->client->request('POST', $url,
            [
                'json' => [
                    'diskusi_id' => $data['diskusi_id'],
                    'komentar' => 'Diteruskan ke Pemda',
                    'confirm_all_status' => self::CONFIRMED_TO_PEMDA
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $token
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testChangeStatusKeluhanDiteruskan failed"
        );
        self::$messages = array_merge(self::$messages, ["testChangeStatusKeluhanDiteruskan passed"]);

        $data['token'] = $token;
        return $data;
    }


    /**
     * @depends testChangeStatusKeluhanDiteruskan
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testCekStatusKeluhanDiteruskan($data)
    {
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testCekStatusKeluhanDiteruskan failed"
        );

        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(self::CONFIRMED, $jsonResponse['data']['status']);
        self::$messages = array_merge(self::$messages, ["testCekStatusKeluhanDiteruskan passed"]);

        return $data;
    }

    /**
     * @depends testCekStatusKeluhanDiteruskan
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testChangeStatusKeluhanDitindaklanjuti($data)
    {
        $loginRequest = $this->login($this->userPemdaBandung, $this->password);
        $token = $loginRequest['data']['token'];

        $url = 'diskusi/komentar/kirim';
        $response = $this->client->request('POST', $url,
            [
                'json' => [
                    'diskusi_id' => $data['diskusi_id'],
                    'komentar' => 'Ditindaklanjuti',
                    'follow_up_status' => self::ON_PROGRESS
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $token
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testChangeStatusKeluhanDitindaklanjuti failed"
        );
        self::$messages = array_merge(self::$messages, ["testChangeStatusKeluhanDitindaklanjuti passed"]);

        return $data;
    }

    /**
     * @depends testChangeStatusKeluhanDitindaklanjuti
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testCekStatusKeluhanDitindaklanjuti($data)
    {
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testCekStatusKeluhanDitindaklanjuti failed"
        );

        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(self::ON_PROGRESS, $jsonResponse['data']['status']);
        self::$messages = array_merge(self::$messages, ["testCekStatusKeluhanDitindaklanjuti passed"]);

        return $data;
    }

    /**
     * @depends testCekStatusKeluhanDitindaklanjuti
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testChangeStatusKeluhanSelesai($data)
    {
        $loginRequest = $this->login($this->userPemdaBandung, $this->password);
        $token = $loginRequest['data']['token'];

        $url = 'diskusi/komentar/kirim';
        $response = $this->client->request('POST', $url,
            [
                'json' => [
                    'diskusi_id' => $data['diskusi_id'],
                    'komentar' => 'Selesai',
                    'follow_up_status' => self::DONE
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $token
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testChangeStatusKeluhanSelesai failed"
        );
        self::$messages = array_merge(self::$messages, ["testChangeStatusKeluhanSelesai passed"]);

        return $data;
    }

    /**
     * @depends testChangeStatusKeluhanSelesai
     * @param $data
     * @return mixed
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function testCekStatusKeluhanSelesai($data)
    {
        $response = $this->client->request('GET', 'bansos/detail_info',
            [
                'query' => [
                    'id_diskusi_bansos' => $data['id_diskusi_bansos']
                ],
                'headers' => [
                    'Authorization' => 'Bearer ' . $data['token']
                ]
            ]
        );

        $statusCode = $response->getStatusCode();
        $jsonResponse = \GuzzleHttp\json_decode($response->getBody(), TRUE);
        $this->assertEquals(200, $statusCode);
        $this->assertContains(
            [
                'success' => true
            ],
            $jsonResponse,
            "testCekStatusKeluhanSelesai failed"
        );

        $this->assertArrayHasKey('status', $jsonResponse['data']);
        $this->assertEquals(self::DONE, $jsonResponse['data']['status']);
        self::$messages = array_merge(self::$messages, ["testCekStatusKeluhanSelesai passed"]);

        return $data;
    }
    
    #endregion

    // Scenario Keluhan Bansos #4
    // -> Login Normal User 1 (2156)
    // -> Create Keluhan Bansos
    // -> Komen Keluhan Bansos
    // -> Login Normal User 2 (2155)
    // -> Komen Keluhan Bansos
    // -> Login User Verifikator (2161)
    // -> Change Status Diteruskan ke Pemda
    // -> Cek Status Keluhan
    // -> Change Status No Respon Pemda
    // -> Cek Status Keluhan
}
