793 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			793 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  * Tests for the attribute exchange extension module
 | |
|  */
 | |
| 
 | |
| require_once "Auth/OpenID/AX.php";
 | |
| require_once "Auth/OpenID/Message.php";
 | |
| require_once "Auth/OpenID/Consumer.php";
 | |
| require_once "Auth/OpenID/Server.php";
 | |
| 
 | |
| class BogusAXMessage extends Auth_OpenID_AX_Message {
 | |
|     var $mode = 'bogus';
 | |
| 
 | |
|     function getExtensionArgs()
 | |
|     {
 | |
|         return $this->_newArgs();
 | |
|     }
 | |
| }
 | |
| 
 | |
| class AXMessageTest extends PHPUnit_Framework_TestCase {
 | |
|     function setUp()
 | |
|     {
 | |
|         $this->bax = new BogusAXMessage();
 | |
|     }
 | |
| 
 | |
|     function test_checkMode()
 | |
|     {
 | |
|         $result = $this->bax->_checkMode(array());
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
| 
 | |
|         $result = $this->bax->_checkMode(array('mode' => 'fetch_request'));
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
| 
 | |
|         // does not raise an exception when the mode is right
 | |
|         $result = $this->bax->_checkMode(array('mode' => $this->bax->mode));
 | |
|         $this->assertTrue($result === true);
 | |
|     }
 | |
| 
 | |
|     /*
 | |
|      * _newArgs generates something that has the correct mode
 | |
|      */
 | |
|     function test_checkMode_newArgs()
 | |
|     {
 | |
|         $result = $this->bax->_checkMode($this->bax->_newArgs());
 | |
|         $this->assertTrue($result === true);
 | |
|     }
 | |
| }
 | |
| 
 | |
| class AttrInfoTest extends PHPUnit_Framework_TestCase {
 | |
|     function test_construct()
 | |
|     {
 | |
|         $type_uri = 'a uri';
 | |
|         $ainfo = Auth_OpenID_AX_AttrInfo::make($type_uri);
 | |
| 
 | |
|         $this->assertEquals($type_uri, $ainfo->type_uri);
 | |
|         $this->assertEquals(1, $ainfo->count);
 | |
|         $this->assertFalse($ainfo->required);
 | |
|         $this->assertTrue($ainfo->alias === null);
 | |
|     }
 | |
| }
 | |
| 
 | |
| class ToTypeURIsTest extends PHPUnit_Framework_TestCase {
 | |
|     function setUp()
 | |
|     {
 | |
|         $this->aliases = new Auth_OpenID_NamespaceMap();
 | |
|     }
 | |
| 
 | |
|     function test_empty()
 | |
|     {
 | |
|         foreach (array(null, '') as $empty) {
 | |
|             $uris = Auth_OpenID_AX_toTypeURIs($this->aliases, $empty);
 | |
|             $this->assertEquals(array(), $uris);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function test_undefined()
 | |
|     {
 | |
|         $result = Auth_OpenID_AX_toTypeURIs($this->aliases,
 | |
|                                             'http://janrain.com/');
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
|     }
 | |
| 
 | |
|     function test_one()
 | |
|     {
 | |
|         $uri = 'http://janrain.com/';
 | |
|         $alias = 'openid_hackers';
 | |
|         $this->aliases->addAlias($uri, $alias);
 | |
|         $uris = Auth_OpenID_AX_toTypeURIs($this->aliases, $alias);
 | |
|         $this->assertEquals(array($uri), $uris);
 | |
|     }
 | |
| 
 | |
|     function test_two()
 | |
|     {
 | |
|         $uri1 = 'http://janrain.com/';
 | |
|         $alias1 = 'openid_hackers';
 | |
|         $this->aliases->addAlias($uri1, $alias1);
 | |
| 
 | |
|         $uri2 = 'http://jyte.com/';
 | |
|         $alias2 = 'openid_hack';
 | |
|         $this->aliases->addAlias($uri2, $alias2);
 | |
| 
 | |
|         $uris = Auth_OpenID_AX_toTypeURIs($this->aliases,
 | |
|                                           implode(',', array($alias1, $alias2)));
 | |
|         $this->assertEquals(array($uri1, $uri2), $uris);
 | |
|     }
 | |
| }
 | |
| 
 | |
| class ParseAXValuesTest extends PHPUnit_Framework_TestCase {
 | |
|     function failUnlessAXKeyError($ax_args)
 | |
|     {
 | |
|         $msg = new Auth_OpenID_AX_KeyValueMessage();
 | |
|         $result = $msg->parseExtensionArgs($ax_args);
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
|         $this->assertTrue($result->message);
 | |
|     }
 | |
| 
 | |
|     function failUnlessAXValues($ax_args, $expected_args)
 | |
|     {
 | |
|         $msg = new Auth_OpenID_AX_KeyValueMessage();
 | |
|         $msg->parseExtensionArgs($ax_args);
 | |
|         $this->assertEquals($expected_args, $msg->data);
 | |
|     }
 | |
| 
 | |
|     function test_emptyIsValid()
 | |
|     {
 | |
|         $this->failUnlessAXValues(array(), array());
 | |
|     }
 | |
| 
 | |
|     function test_invalidAlias()
 | |
|     {
 | |
|         $types = array(
 | |
|                        'Auth_OpenID_AX_KeyValueMessage',
 | |
|                        'Auth_OpenID_AX_FetchRequest'
 | |
|                        );
 | |
| 
 | |
|         $inputs = array(
 | |
|                         array('type.a.b' =>  'urn:foo',
 | |
|                               'count.a.b' => '1'),
 | |
|                         array('type.a,b' => 'urn:foo',
 | |
|                               'count.a,b' => '1'),
 | |
|                         );
 | |
| 
 | |
|         foreach ($types as $typ) {
 | |
|             foreach ($inputs as $input) {
 | |
|                 $msg = new $typ();
 | |
|                 $result = $msg->parseExtensionArgs($input);
 | |
|                 $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function test_missingValueForAliasExplodes()
 | |
|     {
 | |
|         $this->failUnlessAXKeyError(array('type.foo' => 'urn:foo'));
 | |
|     }
 | |
| 
 | |
|     function test_countPresentButNotValue()
 | |
|     {
 | |
|         $this->failUnlessAXKeyError(array('type.foo' => 'urn:foo',
 | |
|                                           'count.foo' => '1'));
 | |
|     }
 | |
| 
 | |
|     function test_invalidCountValue()
 | |
|     {
 | |
|         $msg = new Auth_OpenID_AX_FetchRequest();
 | |
| 
 | |
|         $result = $msg->parseExtensionArgs(
 | |
|                     array('type.foo' => 'urn:foo',
 | |
|                           'count.foo' => 'bogus'));
 | |
| 
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
|     }
 | |
| 
 | |
|     function test_requestUnlimitedValues()
 | |
|     {
 | |
|         $msg = new Auth_OpenID_AX_FetchRequest();
 | |
| 
 | |
|         $result = $msg->parseExtensionArgs(
 | |
|                array('mode' => 'fetch_request',
 | |
|                      'required' => 'foo',
 | |
|                      'type.foo' => 'urn:foo',
 | |
|                      'count.foo' => Auth_OpenID_AX_UNLIMITED_VALUES));
 | |
| 
 | |
|         $attrs = $msg->iterAttrs();
 | |
|         $foo = $attrs[0];
 | |
| 
 | |
|         $this->assertTrue($foo->count == Auth_OpenID_AX_UNLIMITED_VALUES);
 | |
|         $this->assertTrue($foo->wantsUnlimitedValues());
 | |
|     }
 | |
| 
 | |
|     function test_longAlias()
 | |
|     {
 | |
|         // Spec minimum length is 32 characters.  This is a silly test
 | |
|         // for this library, but it's here for completeness.
 | |
|         $alias = str_repeat('x', Auth_OpenID_AX_MINIMUM_SUPPORTED_ALIAS_LENGTH);
 | |
| 
 | |
|         $msg = new Auth_OpenID_AX_KeyValueMessage();
 | |
|         $result = $msg->parseExtensionArgs(
 | |
|                                  array('type.' . $alias => 'urn:foo',
 | |
|                                        'count.' . $alias => '1',
 | |
|                                        'value.'.$alias.'.1' => 'first')
 | |
|                                  );
 | |
|         $this->assertFalse(Auth_OpenID_AX::isError($result));
 | |
|     }
 | |
| 
 | |
|     function test_countPresentAndIsZero()
 | |
|     {
 | |
|         $this->failUnlessAXValues(
 | |
|                                   array('type.foo' => 'urn:foo',
 | |
|                                         'count.foo' => '0',
 | |
|                                         ), array('urn:foo' => array()));
 | |
|     }
 | |
| 
 | |
|     function test_singletonEmpty()
 | |
|     {
 | |
|         $this->failUnlessAXValues(
 | |
|                                   array('type.foo' => 'urn:foo',
 | |
|                                         'value.foo' => '',
 | |
|                                         ), array('urn:foo' => array()));
 | |
|     }
 | |
| 
 | |
|     function test_doubleAlias()
 | |
|     {
 | |
|         $this->failUnlessAXKeyError(
 | |
|                                     array('type.foo' => 'urn:foo',
 | |
|                                           'value.foo' => '',
 | |
|                                           'type.bar' => 'urn:foo',
 | |
|                                           'value.bar' => '',
 | |
|                                           ));
 | |
|     }
 | |
| 
 | |
|     function test_doubleSingleton()
 | |
|     {
 | |
|         $this->failUnlessAXValues(
 | |
|                                   array('type.foo' => 'urn:foo',
 | |
|                                         'value.foo' => '',
 | |
|                                         'type.bar' => 'urn:bar',
 | |
|                                         'value.bar' => '',
 | |
|                                         ), array('urn:foo' => array(), 'urn:bar' => array()));
 | |
|     }
 | |
| 
 | |
|     function test_singletonValue()
 | |
|     {
 | |
|         $this->failUnlessAXValues(
 | |
|                                   array('type.foo' => 'urn:foo',
 | |
|                                         'value.foo' => 'Westfall',
 | |
|                                         ), array('urn:foo' => array('Westfall')));
 | |
|     }
 | |
| }
 | |
| 
 | |
| class FetchRequestTest extends PHPUnit_Framework_TestCase {
 | |
|     function setUp()
 | |
|     {
 | |
|         $this->msg = new Auth_OpenID_AX_FetchRequest();
 | |
|         $this->type_a = 'http://janrain.example.com/a';
 | |
|         $this->alias_a = 'a';
 | |
|     }
 | |
| 
 | |
|     function test_mode()
 | |
|     {
 | |
|         $this->assertEquals($this->msg->mode, 'fetch_request');
 | |
|     }
 | |
| 
 | |
|     function test_construct()
 | |
|     {
 | |
|         $this->assertEquals(array(), $this->msg->requested_attributes);
 | |
|         $this->assertEquals(null, $this->msg->update_url);
 | |
| 
 | |
|         $msg = new Auth_OpenID_AX_FetchRequest('hailstorm');
 | |
|         $this->assertEquals(array(), $msg->requested_attributes);
 | |
|         $this->assertEquals('hailstorm', $msg->update_url);
 | |
|     }
 | |
| 
 | |
|     function test_add()
 | |
|     {
 | |
|         $uri = 'mud://puddle';
 | |
| 
 | |
|         // Not yet added:
 | |
|         $this->assertFalse(in_array($uri, $this->msg->iterTypes()));
 | |
| 
 | |
|         $attr = Auth_OpenID_AX_AttrInfo::make($uri);
 | |
|         $this->msg->add($attr);
 | |
| 
 | |
|         // Present after adding
 | |
|         $this->assertTrue(in_array($uri, $this->msg->iterTypes()));
 | |
|     }
 | |
| 
 | |
|     function test_addTwice()
 | |
|     {
 | |
|         $uri = 'lightning://storm';
 | |
| 
 | |
|         $attr = Auth_OpenID_AX_AttrInfo::make($uri);
 | |
|         $this->msg->add($attr);
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($this->msg->add($attr)));
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_empty()
 | |
|     {
 | |
|         $expected_args = array(
 | |
|                                'mode' =>'fetch_request',
 | |
|                                );
 | |
|         $this->assertEquals($expected_args, $this->msg->getExtensionArgs());
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_noAlias()
 | |
|     {
 | |
|         $attr = Auth_OpenID_AX_AttrInfo::make('type://of.transportation');
 | |
| 
 | |
|         $this->msg->add($attr);
 | |
|         $ax_args = $this->msg->getExtensionArgs();
 | |
|         $found = false;
 | |
|         $alias = null;
 | |
| 
 | |
|         foreach ($ax_args as $k => $v) {
 | |
|             if (($v == $attr->type_uri) && (strpos($k, 'type.') === 0)) {
 | |
|                 $alias = substr($k, 5);
 | |
|                 $found = true;
 | |
|                 break;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (!$found) {
 | |
|             $this->fail("Didn't find the type definition");
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         $this->failUnlessExtensionArgs(array(
 | |
|             'type.' . $alias => $attr->type_uri,
 | |
|             'if_available' => $alias));
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_alias_if_available()
 | |
|     {
 | |
|         $attr = Auth_OpenID_AX_AttrInfo::make(
 | |
|                                               'type://of.transportation', 1, false,
 | |
|                                               'transport');
 | |
| 
 | |
|         $this->msg->add($attr);
 | |
|         $this->failUnlessExtensionArgs(array(
 | |
|             'type.' .  $attr->alias => $attr->type_uri,
 | |
|             'if_available' => $attr->alias));
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_alias_req()
 | |
|     {
 | |
|         $attr = Auth_OpenID_AX_AttrInfo::make(
 | |
|             'type://of.transportation',
 | |
|             1, true, 'transport');
 | |
| 
 | |
|         $this->msg->add($attr);
 | |
|         $this->failUnlessExtensionArgs(array(
 | |
|             'type.' . $attr->alias => $attr->type_uri,
 | |
|             'required' => $attr->alias));
 | |
|     }
 | |
| 
 | |
|     /*
 | |
|      * Make sure that getExtensionArgs has the expected result
 | |
|      *
 | |
|      * This method will fill in the mode.
 | |
|      */
 | |
|     function failUnlessExtensionArgs($expected_args)
 | |
|     {
 | |
|         $expected_args['mode'] = $this->msg->mode;
 | |
|         $this->assertEquals($expected_args, $this->msg->getExtensionArgs());
 | |
|     }
 | |
| 
 | |
|     function test_isIterable()
 | |
|     {
 | |
|         $this->assertEquals(array(), $this->msg->iterAttrs());
 | |
|         $this->assertEquals(array(), $this->msg->iterTypes());
 | |
|     }
 | |
| 
 | |
|     function test_getRequiredAttrs_empty()
 | |
|     {
 | |
|         $this->assertEquals(array(), $this->msg->getRequiredAttrs());
 | |
|     }
 | |
| 
 | |
|     function test_parseExtensionArgs_extraType()
 | |
|     {
 | |
|         $extension_args = array(
 | |
|                                 'mode' => 'fetch_request',
 | |
|                                 'type.' . $this->alias_a => $this->type_a);
 | |
| 
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError(
 | |
|                $this->msg->parseExtensionArgs($extension_args)));
 | |
|     }
 | |
| 
 | |
|     function test_parseExtensionArgs()
 | |
|     {
 | |
|         $extension_args = array(
 | |
|             'mode' => 'fetch_request',
 | |
|             'type.' . $this->alias_a => $this->type_a,
 | |
|             'if_available' => $this->alias_a);
 | |
| 
 | |
|         $this->msg->parseExtensionArgs($extension_args);
 | |
|         $this->assertEquals(array($this->type_a), $this->msg->iterTypes());
 | |
|         $attr_info = Auth_OpenID::arrayGet($this->msg->requested_attributes,
 | |
|                                            $this->type_a);
 | |
|         $this->assertTrue($attr_info);
 | |
|         $this->assertFalse($attr_info->required);
 | |
|         $this->assertEquals($this->type_a, $attr_info->type_uri);
 | |
|         $this->assertEquals($this->alias_a, $attr_info->alias);
 | |
|         $this->assertEquals(array($attr_info),
 | |
|                             $this->msg->iterAttrs());
 | |
|     }
 | |
| 
 | |
|     function test_extensionArgs_idempotent()
 | |
|     {
 | |
|         $extension_args = array(
 | |
|             'mode' => 'fetch_request',
 | |
|             'type.' . $this->alias_a => $this->type_a,
 | |
|             'if_available' => $this->alias_a);
 | |
| 
 | |
|         $this->msg->parseExtensionArgs($extension_args);
 | |
|         $this->assertEquals($extension_args, $this->msg->getExtensionArgs());
 | |
| 
 | |
|         $attr = $this->msg->requested_attributes[$this->type_a];
 | |
|         $this->assertFalse($attr->required);
 | |
|     }
 | |
| 
 | |
|     function test_extensionArgs_idempotent_count_required()
 | |
|     {
 | |
|         $extension_args = array(
 | |
|                                 'mode' => 'fetch_request',
 | |
|                                 'type.' . $this->alias_a => $this->type_a,
 | |
|                                 'count.' . $this->alias_a => '2',
 | |
|                                 'required' => $this->alias_a);
 | |
| 
 | |
|         $this->msg->parseExtensionArgs($extension_args);
 | |
|         $this->assertEquals($extension_args, $this->msg->getExtensionArgs());
 | |
| 
 | |
|         $attr = $this->msg->requested_attributes[$this->type_a];
 | |
|         $this->assertTrue($attr->required);
 | |
|     }
 | |
| 
 | |
|     function test_extensionArgs_count1()
 | |
|     {
 | |
|         $extension_args = array(
 | |
|             'mode' => 'fetch_request',
 | |
|             'type.' . $this->alias_a => $this->type_a,
 | |
|             'count.' . $this->alias_a => '1',
 | |
|             'if_available' => $this->alias_a);
 | |
| 
 | |
|         $extension_args_norm = array(
 | |
|             'mode' => 'fetch_request',
 | |
|             'type.' . $this->alias_a => $this->type_a,
 | |
|             'if_available' => $this->alias_a);
 | |
| 
 | |
|         $this->msg->parseExtensionArgs($extension_args);
 | |
|         $this->assertEquals($extension_args_norm, $this->msg->getExtensionArgs());
 | |
|     }
 | |
| 
 | |
|     function test_openidNoRealm()
 | |
|     {
 | |
|         $openid_req_msg = Auth_OpenID_Message::fromOpenIDArgs(array(
 | |
|             'mode' => 'checkid_setup',
 | |
|             'ns' => Auth_OpenID_OPENID2_NS,
 | |
|             'ns.ax' => Auth_OpenID_AX_NS_URI,
 | |
|             'ax.update_url' => 'http://different.site/path',
 | |
|             'ax.mode' => 'fetch_request',
 | |
|             ));
 | |
| 		$openid_req = new Auth_OpenID_Request();
 | |
| 		$openid_req->message =& $openid_req_msg;
 | |
|         $result = Auth_OpenID_AX_FetchRequest::fromOpenIDRequest(
 | |
|                                                      $openid_req);
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
|     }
 | |
| 
 | |
|     function test_openidUpdateURLVerificationError()
 | |
|     {
 | |
|         $openid_req_msg = Auth_OpenID_Message::fromOpenIDArgs(array(
 | |
|             'mode' => 'checkid_setup',
 | |
|             'ns' => Auth_OpenID_OPENID2_NS,
 | |
|             'realm' => 'http://example.com/realm',
 | |
|             'ns.ax' => Auth_OpenID_AX_NS_URI,
 | |
|             'ax.update_url' => 'http://different.site/path',
 | |
|             'ax.mode' => 'fetch_request',
 | |
|             ));
 | |
| 		$openid_req = new Auth_OpenID_Request();
 | |
| 		$openid_req->message =& $openid_req_msg;
 | |
|         $result = Auth_OpenID_AX_FetchRequest::fromOpenIDRequest($openid_req);
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($result));
 | |
|     }
 | |
| 
 | |
|     function test_openidUpdateURLVerificationSuccess()
 | |
|     {
 | |
|         $openid_req_msg = Auth_OpenID_Message::fromOpenIDArgs(array(
 | |
|             'mode' => 'checkid_setup',
 | |
|             'ns' => Auth_OpenID_OPENID2_NS,
 | |
|             'realm' => 'http://example.com/realm',
 | |
|             'ns.ax' => Auth_OpenID_AX_NS_URI,
 | |
|             'ax.update_url' => 'http://example.com/realm/update_path',
 | |
|             'ax.mode' => 'fetch_request',
 | |
|             ));
 | |
| 		$openid_req = new Auth_OpenID_Request();
 | |
| 		$openid_req->message =& $openid_req_msg;
 | |
|         $fr = Auth_OpenID_AX_FetchRequest::fromOpenIDRequest($openid_req);
 | |
|         $this->assertFalse(Auth_OpenID_AX::isError($fr));
 | |
|     }
 | |
| 
 | |
|     function test_openidUpdateURLVerificationSuccessReturnTo()
 | |
|     {
 | |
|         $openid_req_msg = Auth_OpenID_Message::fromOpenIDArgs(array(
 | |
|             'mode' => 'checkid_setup',
 | |
|             'ns' => Auth_OpenID_OPENID2_NS,
 | |
|             'return_to' => 'http://example.com/realm',
 | |
|             'ns.ax' => Auth_OpenID_AX_NS_URI,
 | |
|             'ax.update_url' => 'http://example.com/realm/update_path',
 | |
|             'ax.mode' => 'fetch_request',
 | |
|             ));
 | |
| 		$openid_req = new Auth_OpenID_Request();
 | |
| 		$openid_req->message =& $openid_req_msg;
 | |
|         $fr = Auth_OpenID_AX_FetchRequest::fromOpenIDRequest($openid_req);
 | |
|         $this->assertFalse(Auth_OpenID_AX::isError($fr));
 | |
|     }
 | |
| }
 | |
| 
 | |
| class FauxEndpoint {
 | |
|     function FauxEndpoint() {
 | |
|         $this->claimed_id = 'http://some.url/';
 | |
|     }
 | |
| }
 | |
| 
 | |
| class FetchResponseTest extends PHPUnit_Framework_TestCase {
 | |
|     function setUp()
 | |
|     {
 | |
|         $this->msg = new Auth_OpenID_AX_FetchResponse();
 | |
|         $this->value_a = 'monkeys';
 | |
|         $this->type_a = 'http://phone.home/';
 | |
|         $this->alias_a = 'robocop';
 | |
|         $this->request_update_url = 'http://update.bogus/';
 | |
|     }
 | |
| 
 | |
|     function test_construct()
 | |
|     {
 | |
|         $this->assertTrue($this->msg->update_url === null);
 | |
|         $this->assertEquals(array(), $this->msg->data);
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_empty()
 | |
|     {
 | |
|         $expected_args = array(
 | |
|             'mode' => 'fetch_response',
 | |
|                                );
 | |
|         $req = null;
 | |
|         $this->assertEquals($expected_args, $this->msg->getExtensionArgs($req));
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_empty_request()
 | |
|     {
 | |
|         $expected_args = array(
 | |
|             'mode' => 'fetch_response',
 | |
|                                );
 | |
|         $req = new Auth_OpenID_AX_FetchRequest();
 | |
|         $this->assertEquals($expected_args, $this->msg->getExtensionArgs($req));
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_empty_request_some()
 | |
|     {
 | |
|         $uri = 'http://not.found/';
 | |
|         $alias = 'ext0';
 | |
| 
 | |
|         $expected_args = array(
 | |
|             'mode' => 'fetch_response',
 | |
|             'type.' . $alias => $uri,
 | |
|             'count.' . $alias => '0'
 | |
|                                );
 | |
|         $req = new Auth_OpenID_AX_FetchRequest();
 | |
|         $req->add(Auth_OpenID_AX_AttrInfo::make('http://not.found/'));
 | |
|         $this->assertEquals($expected_args, $this->msg->getExtensionArgs($req));
 | |
|     }
 | |
| 
 | |
|     function test_updateUrlInResponse()
 | |
|     {
 | |
|         $uri = 'http://not.found/';
 | |
|         $alias = 'ext0';
 | |
| 
 | |
|         $expected_args = array(
 | |
|             'mode' => 'fetch_response',
 | |
|             'update_url' => $this->request_update_url,
 | |
|             'type.' . $alias => $uri,
 | |
|             'count.' . $alias => '0'
 | |
|                                );
 | |
|         $req = new Auth_OpenID_AX_FetchRequest($this->request_update_url);
 | |
|         $req->add(Auth_OpenID_AX_AttrInfo::make($uri));
 | |
|         $this->assertEquals($expected_args, $this->msg->getExtensionArgs($req));
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_some_request()
 | |
|     {
 | |
|         $expected_args = array(
 | |
|             'mode' => 'fetch_response',
 | |
|             'type.' . $this->alias_a => $this->type_a,
 | |
|             'value.' . $this->alias_a . '.1' => $this->value_a,
 | |
|             'count.' . $this->alias_a => '1'
 | |
|                                );
 | |
| 
 | |
|         $req = new Auth_OpenID_AX_FetchRequest();
 | |
|         $req->add(Auth_OpenID_AX_AttrInfo::make($this->type_a, 1, false, $this->alias_a));
 | |
|         $this->msg->addValue($this->type_a, $this->value_a);
 | |
| 
 | |
|         $result = $this->msg->getExtensionArgs($req);
 | |
|         $this->assertEquals($expected_args, $result);
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_some_not_request()
 | |
|     {
 | |
|         $req = new Auth_OpenID_AX_FetchRequest();
 | |
|         $this->msg->addValue($this->type_a, $this->value_a);
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($this->msg->getExtensionArgs($req)));
 | |
|     }
 | |
| 
 | |
|     function test_getSingle_success()
 | |
|     {
 | |
|         $req = new Auth_OpenID_AX_FetchRequest();
 | |
|         $this->msg->addValue($this->type_a, $this->value_a);
 | |
|         $this->assertEquals($this->value_a, $this->msg->getSingle($this->type_a));
 | |
|     }
 | |
| 
 | |
|     function test_getSingle_none()
 | |
|     {
 | |
|         $this->assertEquals(null, $this->msg->getSingle($this->type_a));
 | |
|     }
 | |
| 
 | |
|     function test_getSingle_extra()
 | |
|     {
 | |
|         $data = array('x', 'y');
 | |
|         $this->msg->setValues($this->type_a, $data);
 | |
|         $this->assertTrue(Auth_OpenID_AX::isError($this->msg->getSingle($this->type_a)));
 | |
|     }
 | |
| 
 | |
|     function test_get()
 | |
|     {
 | |
|       $this->assertTrue(Auth_OpenID_AX::isError($this->msg->get($this->type_a)));
 | |
|     }
 | |
| 
 | |
|     function test_fromSuccessResponseWithoutExtension()
 | |
|     {
 | |
|         $args = array(
 | |
|                       'mode' => 'id_res',
 | |
|                       'ns' => Auth_OpenID_OPENID2_NS
 | |
|                      );
 | |
|         $sf = array();
 | |
|         foreach (array_keys($args) as $k) {
 | |
|             array_push($sf, $k);
 | |
|         }
 | |
|         $msg = Auth_OpenID_Message::fromOpenIDArgs($args);
 | |
|         $e = new FauxEndpoint();
 | |
|         $resp = new Auth_OpenID_SuccessResponse($e, $msg, $sf);
 | |
|         $ax_resp = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($resp);
 | |
|         $this->assertTrue($ax_resp === null);
 | |
|     }
 | |
| 
 | |
|     function test_fromSuccessResponseWithoutData()
 | |
|     {
 | |
|         $args = array(
 | |
|                       'mode' => 'id_res',
 | |
|                       'ns' => Auth_OpenID_OPENID2_NS,
 | |
|                       'ns.ax' => Auth_OpenID_AX_NS_URI,
 | |
|                       'ax.mode' => 'fetch_response',
 | |
|                      );
 | |
|         $sf = array();
 | |
|         foreach (array_keys($args) as $k) {
 | |
|             array_push($sf, $k);
 | |
|         }
 | |
|         $msg = Auth_OpenID_Message::fromOpenIDArgs($args);
 | |
|         $e = new FauxEndpoint();
 | |
|         $resp = new Auth_OpenID_SuccessResponse($e, $msg, $sf);
 | |
|         $ax_resp = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($resp);
 | |
|         $this->assertTrue($ax_resp === null);
 | |
|     }
 | |
| 
 | |
|     function test_fromSuccessResponse()
 | |
|     {
 | |
|         $name = "ziggy";
 | |
|         $value = "stardust";
 | |
|         $uri = "http://david.bowie.name/";
 | |
|         $args = array(
 | |
|                       'mode' => 'id_res',
 | |
|                       'ns' => Auth_OpenID_OPENID2_NS,
 | |
|                       'ns.ax' => Auth_OpenID_AX_NS_URI,
 | |
|                       'ax.mode' => 'fetch_response',
 | |
|                       'ax.update_url' => 'http://example.com/realm/update_path',
 | |
|                       'ax.type.'.$name => $uri,
 | |
|                       'ax.count.'.$name => '1',
 | |
|                       'ax.value.'.$name.'.1' => $value,
 | |
|                      );
 | |
|         $sf = array();
 | |
|         foreach (array_keys($args) as $k) {
 | |
|             array_push($sf, $k);
 | |
|         }
 | |
|         $msg = Auth_OpenID_Message::fromOpenIDArgs($args);
 | |
|         $e = new FauxEndpoint();
 | |
|         $resp = new Auth_OpenID_SuccessResponse($e, $msg, $sf);
 | |
|         $ax_resp = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($resp, false);
 | |
|         $this->assertFalse($ax_resp === null);
 | |
|         $this->assertTrue(is_a($ax_resp, 'Auth_OpenID_AX_FetchResponse'));
 | |
|         $values = $ax_resp->get($uri);
 | |
|         $this->assertEquals(array($value), $values);
 | |
|     }
 | |
| }
 | |
| 
 | |
| class StoreRequestTest extends PHPUnit_Framework_TestCase {
 | |
|     function setUp()
 | |
|     {
 | |
|         $this->msg = new Auth_OpenID_AX_StoreRequest();
 | |
|         $this->type_a = 'http://three.count/';
 | |
|         $this->alias_a = 'juggling';
 | |
|     }
 | |
| 
 | |
|     function test_construct()
 | |
|     {
 | |
|         $this->assertEquals(array(), $this->msg->data);
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_empty()
 | |
|     {
 | |
|         $args = $this->msg->getExtensionArgs();
 | |
|         $expected_args = array(
 | |
|             'mode' => 'store_request',
 | |
|                                );
 | |
|         $this->assertEquals($expected_args, $args);
 | |
|     }
 | |
| 
 | |
|     function test_getExtensionArgs_nonempty()
 | |
|     {
 | |
|         $data = array('foo', 'bar');
 | |
|         $this->msg->setValues($this->type_a, $data);
 | |
|         $aliases = new Auth_OpenID_NamespaceMap();
 | |
|         $aliases->addAlias($this->type_a, $this->alias_a);
 | |
|         $args = $this->msg->getExtensionArgs($aliases);
 | |
|         $expected_args = array(
 | |
|             'mode' => 'store_request',
 | |
|             'type.' . $this->alias_a => $this->type_a,
 | |
|             'count.' . $this->alias_a => '2',
 | |
|             sprintf('value.%s.1', $this->alias_a) => 'foo',
 | |
|             sprintf('value.%s.2', $this->alias_a) => 'bar',
 | |
|                                );
 | |
|         $this->assertEquals($expected_args, $args);
 | |
|     }
 | |
| }
 | |
| 
 | |
| class StoreResponseTest extends PHPUnit_Framework_TestCase {
 | |
|     function test_success()
 | |
|     {
 | |
|         $msg = new Auth_OpenID_AX_StoreResponse();
 | |
|         $this->assertTrue($msg->succeeded());
 | |
|         $this->assertFalse($msg->error_message);
 | |
|         $this->assertEquals(array('mode' => 'store_response_success'),
 | |
|                             $msg->getExtensionArgs());
 | |
|     }
 | |
| 
 | |
|     function test_fail_nomsg()
 | |
|     {
 | |
|         $msg = new Auth_OpenID_AX_StoreResponse(false);
 | |
|         $this->assertFalse($msg->succeeded());
 | |
|         $this->assertFalse($msg->error_message);
 | |
|         $this->assertEquals(array('mode' => 'store_response_failure'),
 | |
|                             $msg->getExtensionArgs());
 | |
|     }
 | |
| 
 | |
|     function test_fail_msg()
 | |
|     {
 | |
|         $reason = 'no reason, really';
 | |
|         $msg = new Auth_OpenID_AX_StoreResponse(false, $reason);
 | |
|         $this->assertFalse($msg->succeeded());
 | |
|         $this->assertEquals($reason, $msg->error_message);
 | |
|         $this->assertEquals(array('mode' => 'store_response_failure',
 | |
|                                   'error' => $reason), $msg->getExtensionArgs());
 | |
|     }
 | |
| }
 | |
| 
 | |
| class Tests_Auth_OpenID_AX extends PHPUnit_Framework_TestSuite {
 | |
|     function getName()
 | |
|     {
 | |
|         return "Tests_Auth_OpenID_AX";
 | |
|     }
 | |
| 
 | |
|     function Tests_Auth_OpenID_AX()
 | |
|     {
 | |
|         $this->addTestSuite('StoreResponseTest');
 | |
|         $this->addTestSuite('StoreRequestTest');
 | |
|         $this->addTestSuite('FetchResponseTest');
 | |
|         $this->addTestSuite('FetchRequestTest');
 | |
|         $this->addTestSuite('ParseAXValuesTest');
 | |
|         $this->addTestSuite('ToTypeURIsTest');
 | |
|         $this->addTestSuite('AttrInfoTest');
 | |
|         $this->addTestSuite('AXMessageTest');
 | |
|     }
 | |
| }
 | |
| 
 |