<?php



namespace Razorpay\Tests;



use Razorpay\Api\Request;



class CustomerTest extends TestCase

{   

    /**

     * Specify unique customer id

     * for example cust_IEfAt3ruD4OEzo

     */

    

    private $customerId = "cust_IEfAt3ruD4OEzo";



    static private $baId;



    public function setUp(): void

    {

        parent::setUp();

    }

    

    /**

     * Create customer

     */

    public function testCreateCustomer()

    {

        $data = $this->api->customer->create(array('name' => 'Razorpay User 38', 'email' => 'customer38@razorpay.com' ,'fail_existing'=>'0'));



        $this->assertTrue(is_array($data->toArray()));



        $this->assertTrue(in_array('customer',$data->toArray()));

    }

    

    /**

     * Edit customer

     */

    public function testEditCustomer()

    {

        $data = $this->api->customer->fetch($this->customerId)->edit(array('name' => 'Razorpay User 21' ,'contact'=>'9123456780'));

        

        $this->assertTrue(is_array($data->toArray()));



        $this->assertTrue(in_array($this->customerId, $data->toArray()));

    }



    /**

     * Fetch customer All

     */

    public function testFetchAll()

    {

        $data = $this->api->customer->all();

        

        $this->assertTrue(is_array($data->toArray()));



        $this->assertTrue(is_numeric($data->count()));



        $this->assertTrue(is_array($data['items']));

    }



    /**

     * Fetch a customer

     */

    public function testFetchCustomer()

    {

        $data = $this->api->customer->fetch($this->customerId);

        

        $this->assertTrue(is_array($data->toArray()));



        $this->assertTrue(in_array($this->customerId, $data->toArray()));

    }



    /**

     * Add Bank account

     */

    public function testBankAccount()

    {

        $data = $this->api->customer->fetch($this->customerId)->addBankAccount([

            "ifsc_code" => "UTIB0000194",

            "account_number" => "919999999999",

            "beneficiary_name" => "Pratheek",

            "beneficiary_address1" => "address 1",

            "beneficiary_address2" => "address 2",

            "beneficiary_address3" => "address 3",

            "beneficiary_address4" => "address 4",

            "beneficiary_email" => "random@email.com",

            "beneficiary_mobile" => "8762489310",

            "beneficiary_city" => "Bangalore",

            "beneficiary_state" => "KA",

            "beneficiary_country" => "IN",

        ]);



        CustomerTest::$baId = $data->id;



        $this->assertTrue(is_array($data->toArray()));



        $this->assertTrue(in_array("bank_account", $data->toArray()));

    }



    public function testDeleteBankAccount(){

        if(CustomerTest::$baId)

        {

          $data = $this->api->customer->fetch($this->customerId)->deleteBankAccount(CustomerTest::$baId); 

          

          $this->assertTrue(is_array($data->toArray()));



          $this->assertTrue(in_array("bank_account", $data->toArray()));

        }

    }

}