<?php

namespace TencentCloud\Common;

use \ArrayObject;
use PHPUnit\Framework\TestCase;
use TencentCloud\Common\CommonClient;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Exception\TencentCloudSDKException;

final class CommonClientTest extends TestCase
{
    public function testCallJsonWithEmptyBody()
    {
        $cred = new Credential(
            getenv("TENCENTCLOUD_SECRET_ID"),
            getenv("TENCENTCLOUD_SECRET_KEY")
        );
        $client = new CommonClient("cvm", "2017-03-12", $cred, "ap-guangzhou");
        $resp = $client->callJson(
            "DescribeInstances",
            new ArrayObject(),
            array(),
        );
        $this->assertTrue($resp["TotalCount"] >= 0);
    }

    public function testCallJson()
    {
        $cred = new Credential(
            getenv("TENCENTCLOUD_SECRET_ID"),
            getenv("TENCENTCLOUD_SECRET_KEY")
        );
        $client = new CommonClient("cvm", "2017-03-12", $cred, "ap-guangzhou");
        $resp = $client->callJson(
            "DescribeInstances",
            [
                "Filters" => [
                    [
                        "Name" => "zone",
                        "Values" => ["ap-guangzhou-1", "ap-guangzhou-2"]
                    ]
                ]
            ],
            null,
        );
        $this->assertTrue($resp["TotalCount"] >= 0);
    }

	public function testCallJsonGetFail()
    {
        $cred = new Credential(
            getenv("TENCENTCLOUD_SECRET_ID"),
            getenv("TENCENTCLOUD_SECRET_KEY")
        );
        $httpProfile = new HttpProfile();
        $httpProfile->setReqMethod("GET");
        $clientProfile = new ClientProfile();
        $clientProfile->setHttpProfile($httpProfile);
        $client = new CommonClient("cvm", "2017-03-12", $cred, "ap-guangzhou", $clientProfile);
        $this->expectException(TencentCloudSDKException::class);
        $this->expectExceptionMessage("Common client call doesn't support GET method");
        $resp = $client->callJson(
            "DescribeInstances",
            [
                "Filters" => [
                    [
                        "Name" => "zone",
                        "Values" => ["ap-guangzhou-1", "ap-guangzhou-2"]
                    ]
                ]
            ],
            array(),
        );
    }

}