PHP Classes

File: test/lib/TADTest.php

Recommend this page to a friend!
  Classes of Jorge Cobis   TAD   test/lib/TADTest.php   Download  
File: test/lib/TADTest.php
Role: Unit test script
Content type: text/plain
Description: part of test suite
Class: TAD
Communicate with ZK time and attendance devices
Author: By
Last change: Update of test/lib/TADTest.php
Date: 2 months ago
Size: 7,793 bytes
 

Contents

Class file image Download
<?php
/*
 * tad-php
 *
 * (The MIT License)
 *
 * Copyright (c) 2014 Jorge Cobis <jcobis@gmail.com / http://twitter.com/cobisja>.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

namespace Test;

use
TADPHP\TAD;
use
TADPHP\TADFactory;
use
TADPHP\Providers\TADSoap;
use
TADPHP\Providers\TADZKLib;

class
TADTest extends \PHPUnit_Framework_TestCase
{
    public function
testSoapCommandsAvailable()
    {
       
$commands = TAD::soap_commands_available(['include_command_string'=>true]);

       
$this->assertInternalType('array', $commands);
       
$this->assertTrue($commands !== array_values($commands));
    }

    public function
testZKLibCommandsAvailable()
    {
       
$commands = TAD::zklib_commands_available();

       
$this->assertInternalType('array', $commands);
       
$this->assertFalse($commands !== array_values($commands));
    }

    public function
testGetValidCommandsArgs()
    {
       
$valid_args = TAD::get_valid_commands_args();

       
$this->assertInternalType('array', $valid_args);
       
$this->assertFalse($valid_args !== array_values($valid_args));
    }

   
/**
     * @dataProvider get_options
     */
   
public function testGetOptions(array $options)
    {
       
$method = array_keys($options)[0];
       
$expected_value = array_values($options)[0];

       
$tad_options = array_merge(['ip'=>'127.0.0.1'], $options);
       
$tad = (new TADFactory($tad_options))->get_instance();

       
$option_value = $tad->{"get_$method"}();

       
$this->assertEquals($expected_value, $option_value);
    }

    public function
testDeviceWithInvalidIPAddressIsNotAlive()
    {
       
$tad = (new TADFactory(['ip'=>'1.2.3.4', 'connection_timeout'=>1]))->get_instance();

       
$this->assertFalse($tad->is_alive());
    }

   
/**
     * @expectedException TADPHP\Exceptions\ConnectionError
     */
   
public function testTADThrowsConnectionErrorExceptionWithInvalidDeviceIPAddress()
    {
       
$tad = (new TADFactory(['ip'=>'1.2.3.4', 'connection_timeout'=>1]))->get_instance();
       
$tad->get_date();
    }

   
/**
     * @expectedException TADPHP\Exceptions\UnrecognizedCommand
     */
   
public function testTADThrowsUnrecognizedCommandExceptionWithInvalidCommand()
    {
       
$tad = (new TADFactory(['ip'=>'127.0.0.1']))->get_instance();
       
$tad->foo();
    }

   
/**
     * @expectedException TADPHP\Exceptions\UnrecognizedArgument
     */
   
public function testTADThrowsUnrecognizedArgumentExceptionWithValidCommand()
    {
       
$tad = (new TADFactory(['ip'=>'127.0.0.1']))->get_instance();
       
$tad->get_user_info(['foo'=>'bar']);
    }

    public function
testTAD()
    {
       
$options = $this->get_tad_and_soap_options();

       
$tad_soap_provider = new TADSoap(new \SoapClient(null, $options['soap']), $options['soap']);
       
$zklib_provider = new TADZKLib($options['tad']);

       
$tad = $this->getMockBuilder('\TADPHP\TAD')
          ->
setConstructorArgs([ $tad_soap_provider, $zklib_provider, $options['tad']])
          ->
setMethods(['is_alive', 'execute_command_via_tad_soap', 'execute_command_via_zklib'])
          ->
getMock();

       
$tad->expects($this->any())
          ->
method('is_alive')
          ->
will($this->returnValue(true));

       
$tad->expects($this->any())
          ->
method('execute_command_via_tad_soap')
          ->
will($this->returnValue('<CommandResponse>Executed via SOAP</CommandResponse>'));

       
$tad->expects($this->once())
          ->
method('execute_command_via_zklib')
          ->
will($this->returnValue('<CommandResponse>Executed via ZKLib</CommandResponse>'));

       
$this->assertEquals(
           
'<CommandResponse>Executed via SOAP</CommandResponse>',
           
$tad->get_date()
        );
       
$this->assertEquals(
           
'<CommandResponse>Executed via ZKLib</CommandResponse>',
           
$tad->set_date()
        );
    }

    public function
testExecuteCommandViaTADSoap()
    {
       
$options = $this->get_tad_and_soap_options();
       
$mock_response = '<GetDateResponse><row><date>2014-01-01</date><time>12:00:00</time></row></GetDateResponse>';

       
$soap_client = new \SoapClient(null, $options['soap']);

       
$tad_soap = $this->getMockBuilder('TADPHP\Providers\TADSoap')
          ->
setConstructorArgs([ $soap_client, $options['soap'] ])
          ->
setMethods(['execute_soap_command'])
          ->
getMock();

       
$tad_soap->expects($this->once())
          ->
method('execute_soap_command')
          ->
will($this->returnValue($mock_response));

       
$zklib_provider = new TADZKLib($options['tad']);

       
$tad = $this->getMockBuilder('\TADPHP\TAD')
          ->
setConstructorArgs([ $tad_soap, $zklib_provider, $options['tad'] ])
          ->
setMethods(null)
          ->
getMock();

       
$response = $tad->execute_command_via_tad_soap('get_date', []);

       
$this->assertNotEmpty($response);
    }

    public function
testExecuteCommandViaZKLib()
    {
       
$options = $this->get_tad_and_soap_options();
       
$mock_response = ''
               
. '<SetDateResponse>'
               
. '<Result>1</Result>'
               
. '<Information>Successfully!</Information>'
               
. '</SetDateResponse>';

       
$soap_client = new \SoapClient(null, $options['soap']);
       
$tad_soap = new TADSoap($soap_client, $options['soap']);

       
$zk = $this->getMockBuilder('TADPHP\Providers\TADZKLib')
          ->
setConstructorArgs([ $options['tad'] ])
          ->
setMethods(['__call'])
          ->
getMock();

       
$zk->expects($this->once())
           ->
method('__call')
           ->
will($this->returnValue($mock_response));

       
$tad = $this->getMockBuilder('\TADPHP\TAD')
          ->
setConstructorArgs([ $tad_soap, $zk, $options['tad'] ])
          ->
setMethods(null)
          ->
getMock();

       
$response = $tad->set_date();

       
$this->assertNotEmpty($response);
    }

    protected function
soap_options()
    {
        return [
            []
        ];
    }

    protected function
get_tad_and_soap_options()
    {
       
$options = array_reduce(array_reduce($this->get_options(), 'array_merge', []), 'array_merge', []);

       
$soap_options = [
           
'location' => "http://{$options['ip']}/iWsService",
           
'uri' => 'http://www.zksoftware/Service/message/'
       
];

        return [
'tad' => $options, 'soap' => $soap_options];
    }

    public function
get_options()
    {
       
$options = [
            [[
'ip' => '127.0.0.1']],
            [[
'com_key' => 0]],
            [[
'internal_id' => 100]],
            [[
'description' => 'Foo']],
            [[
'connection_timeout'=> 1]],
            [[
'udp_port' => 4370]],
            [[
'encoding'=>'iso8859-1']]
        ];

        return
$options;
    }
}