| 
<?phpnamespace Test\Providers;
 
 use TADPHP\TAD;
 use TADPHP\Providers\TADSoap;
 use Test\Helpers\ClassReflection;
 
 
 class TADSoapTest extends \PHPUnit_Framework_TestCase
 {
 public function testBuildTADSoap()
 {
 $soap_options = $this->get_soap_options();
 
 $soap_client = new \SoapClient( null, $soap_options );
 $tad_soap = new TADSoap($soap_client, $soap_options);
 
 $this->assertNotNull($tad_soap);
 $this->assertInstanceOf('TADPHP\Providers\TADSoap', $tad_soap);
 
 return $tad_soap;
 }
 
 /**
 * @depends testBuildTADSoap
 */
 public function testGetSoapProviderOptions($tad_soap_instance)
 {
 $soap_providers_options = $tad_soap_instance->get_soap_provider_options();
 
 $this->assertInternalType('array', $soap_providers_options);
 $this->assertArrayHasKey('location', $soap_providers_options);
 $this->assertArrayHasKey('uri', $soap_providers_options);
 $this->assertEquals('http://127.0.0.1/iWsService', $soap_providers_options['location']);
 $this->assertEquals('http://www.zksoftware/Service/message/', $soap_providers_options['uri']);
 }
 
 /**
 * @depends testBuildTADSoap
 * @dataProvider soapCommandsFixtures
 */
 public function testBuildSoapRequest($command, array $args, $expected_soap_string, $encoding, TADSoap $tad_soap)
 {
 $args += array_fill_keys( TAD::get_valid_commands_args(), null );
 $soap_request = $tad_soap->build_soap_request( $command, $args, $encoding );
 
 $this->assertEquals( $expected_soap_string, $soap_request );
 }
 
 /**
 * @depends testBuildTADSoap
 */
 public function testBuildMultipleSoapRequest(TADSoap $tad_soap)
 {
 $args = array_fill_keys( TAD::get_valid_commands_args(), null );
 
 // We uses 'set_user_info' command defined in TADSoap class.
 // Maybe there is a better way to test this. :-P
 $soap_request = $tad_soap->build_soap_request('set_user_info', $args, 'iso8859-1');
 
 $this->assertInternalType('array', $soap_request);
 }
 
 public function testExecuteSoapRequest()
 {
 $mock_response = '<GetUserInfoResponse></GetUserInfoResponse>';
 $encoding = 'iso8859-1';
 
 $soap_options = $this->get_soap_options();
 
 $soap_client = $this->getMockBuilder('\SoapClient')
 ->setConstructorArgs( [ null, [ 'location'=>$soap_options['location'], 'uri'=>$soap_options['uri'] ] ] )
 ->setMethods( [ '__doRequest' ] )
 ->getMock();
 
 $soap_client->expects( $this->any() )
 ->method( '__doRequest' )
 ->with( $this->anything(), $soap_options['location'], '', SOAP_1_1 )
 ->will( $this->returnValue( $mock_response ) );
 
 $tad_soap = $this->getMockBuilder('TADPHP\Providers\TADSoap')
 ->setConstructorArgs( [ $soap_client, $soap_options ] )
 ->setMethods( null )
 ->getMock();
 
 $args = array_fill_keys( TAD::get_valid_commands_args(), null );
 $args['com_key'] = 0;
 $args['pin'] = 123;
 
 $response = $tad_soap->execute_soap_command( 'get_user_info', $args, $encoding );
 
 $this->assertNotEmpty( $response );
 }
 
 public function testExecuteMultipleSoapRequests()
 {
 $soap_requests = [
 '<GetDate><ArgComKey>0</ArgComKey></GetDate>',
 '<Restart><ArgComKey>0</ArgComKey></Restart>'
 ];
 
 $mock_response = '<RestartResponse><Row><Result>1</Result><Information>Success!</Information></Row></RestartResponse>';
 
 $soap_options = $this->get_soap_options();
 
 $soap_client = $this->getMockBuilder('\SoapClient')
 ->setConstructorArgs( [ null, [ 'location'=>$soap_options['location'], 'uri'=>$soap_options['uri'] ] ] )
 ->setMethods( [ '__doRequest' ] )
 ->getMock();
 
 $soap_client->expects( $this->any() )
 ->method( '__doRequest' )
 ->with( $this->anything(), $soap_options['location'], '', SOAP_1_1 )
 ->will( $this->returnValue( $mock_response ) );
 
 $tad_soap = $this->getMockBuilder('TADPHP\Providers\TADSoap')
 ->setConstructorArgs( [ $soap_client, $soap_options ] )
 ->setMethods( null )
 ->getMock();
 
 
 $result = ClassReflection::invoke_method(
 $tad_soap,
 'execute_multiple_soap_requests',
 [ $soap_requests, $soap_options['location'] ] );
 
 $this->assertNotEmpty( $result );
 }
 
 
 public function soapCommandsFixtures()
 {
 $encoding = 'iso8859-1';
 
 return [
 [ 'get_date', ['com_key'=>0], '<?xml version="1.0" encoding="'. $encoding .'" standalone="no"?><GetDate><ArgComKey>0</ArgComKey></GetDate>', $encoding ],
 [ 'get_att_log', ['com_key'=>0], '<?xml version="1.0" encoding="' . $encoding. '" standalone="no"?><GetAttLog><ArgComKey>0</ArgComKey><Arg><PIN></PIN></Arg></GetAttLog>', $encoding ],
 [ 'get_att_log', ['com_key'=>0, 'pin'=>'99999999'], '<?xml version="1.0" encoding="' . $encoding . '" standalone="no"?><GetAttLog><ArgComKey>0</ArgComKey><Arg><PIN>99999999</PIN></Arg></GetAttLog>', $encoding ],
 [ 'set_user_template', [
 'com_key' => 0,
 'pin' => '999',
 'finger_id' => '0',
 'size' => '514',
 'valid' => '1',
 'template' => 'foobartaz123'
 ],
 '<?xml version="1.0" encoding="' . $encoding . '" standalone="no"?><SetUserTemplate><ArgComKey>0</ArgComKey><Arg><PIN>999</PIN><FingerID>0</FingerID><Size>514</Size><Valid>1</Valid><Template>foobartaz123</Template></Arg></SetUserTemplate>',
 $encoding
 ]
 ];
 }
 
 private function get_soap_options()
 {
 $soap_options = [
 'location' => "http://127.0.0.1/iWsService",
 'uri' => 'http://www.zksoftware/Service/message/',
 'connection_timeout' => 1,
 'exceptions' => false,
 'trace' => true
 ];
 
 return $soap_options;
 }
 }
 |