<?php

ini_set("soap.wsdl_cache_enabled",0);

require_once(dirname(__FILE__).'/ContactManager.php');

class SoapTestCase extends UnitTestCase
{
	function getWsdlUri()
	{
		$script = str_replace('unit.php', 'ws.php',$_SERVER['SCRIPT_NAME']);
		return "http://".$_SERVER['HTTP_HOST'].$script.'?soap=contacts.wsdl';
	}

	function getClient()
	{
		return new SoapClient($this->getWsdlUri());
	}

	function testContactArray()
	{
		$result = $this->getClient()->getContacts();
		$this->assertEqual(count($result), 1);
		$obj = $result[0];
		$this->assertEqual($obj->name, "me");
		$this->assertEqual($obj->id, 1);
		$this->assertEqual($obj->address->street, "sesamstreet");
		$this->assertNull($obj->address->nr);
		$this->assertNull($obj->address->zipcode);
		$this->assertEqual($obj->address->city, "sesamcity");
		$this->assertEqual($obj->email, "me@you.com");
	}

	function testGetContactThrowsException()
	{
		try
		{
			$result = $this->getClient()->getContact(1);	
			$this->fail();
		}
		catch (SoapFault $f)
		{
			$this->pass();
		}
	}

	function testGetNewContact()
	{
		$obj = $this->getClient()->newContact();
		$this->assertNull($obj->name);
		$this->assertNull($obj->id);
		$this->assertNull($obj->address);
		$this->assertNull($obj->email);
	}

	function testSaveContactReturnsTrue()
	{
		$c = new Contact;
		$result = $this->getClient()->saveContact($c);
		$this->assertTrue($result);
	}

	function getMixedArray()
	{
		$result = $this->getClient()>getList();
		$expected = array(array(1,2), array("12", 1.2));
		$this->assertEqual($result, $expected);
	}

	function testEmptyArray()
	{
		$result = $this->getClient()->getEmptyArray();
		$this->assertTrue(is_array($result));
		$this->assertEqual(count($result), 0);
	}

	function testUnknownFunctionThrowsException()
	{
		try
		{
			$this->getClient()->test();
			$this->fail();
		}
		catch (SoapFault $f)
		{
			$this->pass();
		}
	}
}

?>