def test_add_accounts_to_group(self):
        account2 = Account(self.client,
                           properties={
                               'href': 'http://example.com/account2',
                               'username': '******',
                               'given_name': 'given_name',
                               'surname': 'surname',
                               'email': '*****@*****.**',
                               'password': '******'
                           })
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href,
            'username': self.account.username
        }

        self.g.add_accounts(['http://example.com/account', account2])
        self.assertEqual(
            self.account._client.group_memberships.create.call_count, 2)
        calls = self.account._client.group_memberships.create.call_args_list
        args, _ = calls[0]
        self.assertEqual(args[0]['account'].href, self.account.href)
        self.assertEqual(args[0]['group'].href, self.g.href)
        args, _ = calls[1]
        self.assertEqual(args[0]['account'].href, account2.href)
        self.assertEqual(args[0]['group'].href, self.g.href)
Beispiel #2
0
    def test_resend(self):
        ds = MagicMock()
        ds.create_resource.return_value = {}
        client = MagicMock(data_store=ds, BASE_URL='http://example.com/')

        acc = Account(client=client,
                      properties={
                          'href': 'test/app',
                          'email': '*****@*****.**'
                      })
        vel = VerificationEmailList(client=client, href='test/emails')
        app = Application(client=client,
                          properties={
                              'href': 'test/app',
                              'verification_emails': vel
                          })
        dir = Directory(client=client, href='test/directory')

        app.verification_emails.resend(acc, dir)

        ds.create_resource.assert_called_once_with(
            'http://example.com/test/emails', {
                'login': '******',
                'account_store': 'test/directory'
            })
Beispiel #3
0
    def test_manual_account_linking(self):
        ds = MagicMock()
        ds.create_resource.return_value = {}
        client = MagicMock(BASE_URL='http://example.com', data_store=ds)
        self.account._set_properties(
            {'account_links': AccountLinkList(client, href='/accountLinks')})
        self.account2 = Account(self.client,
                                properties={
                                    'href': 'http://example.com/account2',
                                    'username': '******',
                                    'given_name': 'given_name2',
                                    'surname': 'surname2',
                                    'email': '*****@*****.**',
                                    'password': '******'
                                })

        self.account.account_links.create({
            'left_account': self.account,
            'right_account': self.account2
        })

        ds.create_resource.assert_called_once_with(
            'http://example.com/accountLinks', {
                'leftAccount': {
                    'href': self.account.href
                },
                'rightAccount': {
                    'href': self.account2.href
                }
            },
            params={})
    def setUp(self, Session):

        # Set mock.
        self.request_mock = Session.return_value.request
        self.request_mock.return_value = MagicMock(status_code=200)

        ex = HttpExecutor('https://api.stormpath.com/v1', ('user', 'pass'))
        self.client = MagicMock(BASE_URL='http://example.com')
        self.data_store = DataStore(ex)
        self.client.data_store = self.data_store
        self.account = Account(self.client,
                               properties={
                                   'href': 'http://example.com/account',
                                   'username': '******',
                                   'given_name': 'given_name',
                                   'surname': 'surname',
                                   'email': '*****@*****.**',
                                   'password': '******'
                               })
        self.factor = Factor(self.client,
                             properties={
                                 'href': '/factors/factor_id',
                                 'name': 'factor'
                             })
        self.challenge = Challenge(self.client,
                                   properties={
                                       'href': '/challenges/challenge_id',
                                       'factor': self.factor,
                                       'account': self.account
                                   })
    def test_is_not_new_account_if_sp_http_status_is_200(self):
        ds = MagicMock()
        ds.get_resource.return_value = {
            'sp_http_status': 200
        }

        acc = Account(client=MagicMock(data_store=ds), href='test/account')
        is_new = acc.is_new_account

        ds.get_resource.assert_called_once_with('test/account', params=None)
        self.assertFalse(is_new)
 def setUp(self):
     super(TestAccount, self).setUp()
     self.client = MagicMock(BASE_URL='http://example.com')
     self.account = Account(self.client,
                            properties={
                                'href': 'http://example.com/account',
                                'username': '******',
                                'given_name': 'given_name',
                                'surname': 'surname',
                                'email': '*****@*****.**',
                                'password': '******'
                            })
     ds = MagicMock()
     self.gs = GroupList(MagicMock(data_store=ds), href='test/collection')
     self.g = Group(self.client,
                    properties={
                        'href': 'http://example.com/group',
                        'name': 'group'
                    })
     self.g2 = Group(self.client,
                     properties={
                         'href': 'http://example.com/group2',
                         'name': 'group2'
                     })
     ds.get_resource.return_value = {
         'href': self.g.href,
         'name': self.g.name
     }
     self.d = Directory(self.client,
                        properties={
                            'href': 'http://example.com/directory',
                            'name': 'directory'
                        })
     self.d._set_properties({'groups': self.gs})
     self.account._set_properties({'directory': self.d})
     self.g._set_properties({'directory': self.d})
Beispiel #7
0
    def test_cusom_data_elem_in_dict_check(self):
        ds = MagicMock()
        ds.get_resource.return_value = {'href': 'test/customData', 'test': 1}
        from stormpath.resources.account import Account
        client = MagicMock(data_store=ds)
        client.accounts.get.return_value = Account(client,
                                                   properties={
                                                       'href': 'test/account',
                                                       'custom_data': {
                                                           'href':
                                                           'test/customData'
                                                       }
                                                   })
        a = client.accounts.get('test/account')

        self.assertTrue('test' in a.custom_data)
 def setUp(self):
     super(TestAccount, self).setUp()
     self.client = MagicMock(BASE_URL='http://example.com')
     self.account = Account(self.client,
             properties={
                 'href': 'http://example.com/account',
                 'username': '******',
                 'given_name': 'given_name',
                 'surname': 'surname',
                 'email': '*****@*****.**',
                 'password': '******'})
     ds = MagicMock()
     self.gs = GroupList(MagicMock(data_store=ds), href='test/collection')
     self.g = Group(self.client,
             properties={'href': 'http://example.com/group', 'name': 'group'})
     self.g2 = Group(self.client,
             properties={'href': 'http://example.com/group2', 'name': 'group2'})
     ds.get_resource.return_value = {'href': self.g.href, 'name': self.g.name}
     self.d = Directory(self.client,
             properties={'href': 'http://example.com/directory', 'name': 'directory'})
     self.d._set_properties({'groups': self.gs})
     self.account._set_properties({'directory': self.d})
class TestAccount(TestCase):
    def setUp(self):
        super(TestAccount, self).setUp()
        self.client = MagicMock(BASE_URL='http://example.com')
        self.account = Account(self.client,
                               properties={
                                   'href': 'http://example.com/account',
                                   'username': '******',
                                   'given_name': 'given_name',
                                   'surname': 'surname',
                                   'email': '*****@*****.**',
                                   'password': '******'
                               })
        ds = MagicMock()
        self.gs = GroupList(MagicMock(data_store=ds), href='test/collection')
        self.g = Group(self.client,
                       properties={
                           'href': 'http://example.com/group',
                           'name': 'group'
                       })
        self.g2 = Group(self.client,
                        properties={
                            'href': 'http://example.com/group2',
                            'name': 'group2'
                        })
        ds.get_resource.return_value = {
            'href': self.g.href,
            'name': self.g.name
        }
        self.d = Directory(self.client,
                           properties={
                               'href': 'http://example.com/directory',
                               'name': 'directory'
                           })
        self.d._set_properties({'groups': self.gs})
        self.account._set_properties({'directory': self.d})
        self.g._set_properties({'directory': self.d})

    def test_account_str_method(self):
        self.assertEquals('username', self.account.__str__())

    def test_resolve_group_raises_type_error_on_invalid_arg_type(self):
        self.assertRaises(TypeError, self.account._resolve_group, 1234)

    def test_resolve_group_with_object(self):
        group = Group(self.client, properties={'name': 'name'})
        ret = self.account._resolve_group(group)
        self.assertEquals(group, ret)

    def test_resolve_group_with_href(self):
        ret = self.account._resolve_group('http://example.com/group')
        self.assertEquals(ret.name, self.g.name)

    def test_resolve_group_name(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {
                    'href': 'http://example.com/group',
                    'name': 'group'
                },
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        d = Directory(self.client,
                      properties={
                          'href': 'http://example.com/directory',
                          'name': 'directory'
                      })
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d})
        ret = self.account._resolve_group('group')
        self.assertEquals(ret.href, self.g.href)

    def test_resolve_non_existent_group(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {
                    'href': 'http://example.com/group',
                    'name': 'group'
                },
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        d = Directory(self.client,
                      properties={
                          'href': 'http://example.com/directory',
                          'name': 'directory'
                      })
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d})
        self.assertRaises(ValueError, self.account._resolve_group,
                          'non_existent')

    def test_add_account_to_group(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href,
            'username': self.account.username
        }

        self.g.add_account('http://example.com/account')
        args, _ = self.account._client.group_memberships.create.call_args
        self.assertEqual(args[0]['account'].href, self.account.href)
        self.assertEqual(args[0]['group'].href, self.g.href)

    def test_add_accounts_to_group(self):
        account2 = Account(self.client,
                           properties={
                               'href': 'http://example.com/account2',
                               'username': '******',
                               'given_name': 'given_name',
                               'surname': 'surname',
                               'email': '*****@*****.**',
                               'password': '******'
                           })
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href,
            'username': self.account.username
        }

        self.g.add_accounts(['http://example.com/account', account2])
        self.assertEqual(
            self.account._client.group_memberships.create.call_count, 2)
        calls = self.account._client.group_memberships.create.call_args_list
        args, _ = calls[0]
        self.assertEqual(args[0]['account'].href, self.account.href)
        self.assertEqual(args[0]['group'].href, self.g.href)
        args, _ = calls[1]
        self.assertEqual(args[0]['account'].href, account2.href)
        self.assertEqual(args[0]['group'].href, self.g.href)

    def test_remove_account_from_group(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href,
            'username': self.account.username
        }

        ds = MagicMock()
        ams = GroupMembershipList(MagicMock(data_store=ds),
                                  href='test/memberships')
        gm = GroupMembership(self.client,
                             properties={
                                 'href': 'test/group-membership',
                                 'account': self.account,
                                 'group': self.g
                             })
        ds.get_resource.return_value = {'items': [gm], 'offset': 0, 'limit': 0}
        self.g._set_properties({'account_memberships': ams})
        self.g.remove_account(self.account.href)
        args, _ = gm._client.data_store.delete_resource.call_args
        self.assertEqual(args[0], gm.href)

    def test_remove_account_from_group_account_is_not_in(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href,
            'username': self.account.username
        }

        ds = MagicMock()
        ams = GroupMembershipList(MagicMock(data_store=ds),
                                  href='test/memberships')
        ds.get_resource.return_value = {'items': [], 'offset': 0, 'limit': 0}
        self.g._set_properties({'account_memberships': ams})

        self.assertRaises(StormpathError, self.g.remove_account,
                          'http://example.com/account')

    def test_memership_for_single_group(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href':
            'test/collection',
            'offset':
            0,
            'limit':
            25,
            'items': [
                {
                    'href': 'http://example.com/group',
                    'name': 'group'
                },
                {
                    'href': 'http://example.com/group2',
                    'name': 'group2'
                },
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        GroupList.writable_attrs += ('query', )
        gs.query = lambda *args, **kwargs: [self.g]
        d = Directory(self.client,
                      properties={
                          'href': 'http://example.com/directory',
                          'name': 'directory'
                      })
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d, 'groups': gs})
        self.assertTrue(self.account.has_group('group'))

    def test_login_attempt(self):
        app = MagicMock()
        app.accounts.get.return_value = self.account
        app._client.auth.secret = 'fakeApiKeyProperties.secret'
        app.href = 'http://example.com/application'

        ar = AuthenticationResult(client=self.client,
                                  properties={
                                      'account': self.account,
                                      'application': app
                                  })
        at = ar.get_access_token()

        self.assertEqual(self.account, at.account)
        self.assertEqual(app, at.app)
        self.assertFalse(at.for_api_key)

    def test_valid_account_store(self):
        directory = Directory(self.client,
                              properties={
                                  'href': 'http://example.com/directories/dir',
                                  'name': 'directory'
                              })

        account_store = AccountStore(client=self.client,
                                     properties={'href': directory.href})
        self.assertEqual(account_store.href, directory.href)
        self.assertEqual(type(account_store), type(directory))

    def test_invalid_account_store(self):
        self.assertRaises(ValueError, AccountStore, [self.client])
        self.assertRaises(ValueError, AccountStore,
                          [self.client, '/wrong/href'])
class TestAccount(TestCase):
    def setUp(self):
        super(TestAccount, self).setUp()
        self.client = MagicMock(BASE_URL='http://example.com')
        self.account = Account(self.client,
                properties={
                    'href': 'http://example.com/account',
                    'username': '******',
                    'given_name': 'given_name',
                    'surname': 'surname',
                    'email': '*****@*****.**',
                    'password': '******'})
        ds = MagicMock()
        self.gs = GroupList(MagicMock(data_store=ds), href='test/collection')
        self.g = Group(self.client,
                properties={'href': 'http://example.com/group', 'name': 'group'})
        self.g2 = Group(self.client,
                properties={'href': 'http://example.com/group2', 'name': 'group2'})
        ds.get_resource.return_value = {'href': self.g.href, 'name': self.g.name}
        self.d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        self.d._set_properties({'groups': self.gs})
        self.account._set_properties({'directory': self.d})
        self.g._set_properties({'directory': self.d})

    def test_account_str_method(self):
        self.assertEquals('username', self.account.__str__())

    def test_resolve_group_raises_type_error_on_invalid_arg_type(self):
        self.assertRaises(TypeError, self.account._resolve_group, 1234)

    def test_resolve_group_with_object(self):
        group = Group(self.client, properties={'name': 'name'})
        ret = self.account._resolve_group(group)
        self.assertEquals(group, ret)

    def test_resolve_group_with_href(self):
        ret = self.account._resolve_group('http://example.com/group')
        self.assertEquals(ret.name, self.g.name)

    def test_resolve_group_name(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': 'http://example.com/group', 'name': 'group'},
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d})
        ret = self.account._resolve_group('group')
        self.assertEquals(ret.href, self.g.href)

    def test_resolve_non_existent_group(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': 'http://example.com/group', 'name': 'group'},
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d})
        self.assertRaises(ValueError, self.account._resolve_group, 'non_existent')

    def test_add_account_to_group(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href, 'username': self.account.username
        }

        self.g.add_account('http://example.com/account')
        args, _ = self.account._client.group_memberships.create.call_args
        self.assertEqual(args[0]['account'].href, self.account.href)
        self.assertEqual(args[0]['group'].href, self.g.href)

    def test_add_account_to_group_by_username(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': 'test/accounts',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': self.account.href, 'username': self.account.username}
            ],
        }

        self.g.add_account(self.account.username)
        args, _ = self.account._client.group_memberships.create.call_args
        self.assertEqual(args[0]['account'].href, self.account.href)
        self.assertEqual(args[0]['group'].href, self.g.href)

    def test_add_account_to_group_by_search_dict(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': 'test/accounts',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': self.account.href, 'username': self.account.username}
            ],
        }

        self.g.add_account({'username': self.account.username})
        args, _ = self.account._client.group_memberships.create.call_args
        self.assertEqual(args[0]['account'].href, self.account.href)
        self.assertEqual(args[0]['group'].href, self.g.href)

    def test_add_accounts_to_group(self):
        account2 = Account(
            self.client,
            properties={
                'href': 'http://example.com/account2',
                'username': '******',
                'given_name': 'given_name',
                'surname': 'surname',
                'email': '*****@*****.**',
                'password': '******'
            })
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href, 'username': self.account.username
        }

        self.g.add_accounts(['http://example.com/account', account2])
        self.assertEqual(
            self.account._client.group_memberships.create.call_count, 2)
        calls = self.account._client.group_memberships.create.call_args_list
        args, _ = calls[0]
        self.assertEqual(args[0]['account'].href, self.account.href)
        self.assertEqual(args[0]['group'].href, self.g.href)
        args, _ = calls[1]
        self.assertEqual(args[0]['account'].href, account2.href)
        self.assertEqual(args[0]['group'].href, self.g.href)

    def test_remove_account_from_group(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href, 'username': self.account.username
        }

        ds = MagicMock()
        ams = GroupMembershipList(
            MagicMock(data_store=ds), href='test/memberships')
        gm = GroupMembership(
            self.client,
            properties={
                'href': 'test/group-membership', 'account': self.account,
                'group': self.g
            })
        ds.get_resource.return_value = {
            'items': [gm], 'offset': 0, 'limit': 0
        }
        self.g._set_properties({'account_memberships': ams})
        self.g.remove_account(self.account.href)
        args, _ = gm._client.data_store.delete_resource.call_args
        self.assertEqual(args[0], gm.href)

    def test_remove_account_from_group_account_is_not_in(self):
        ds = MagicMock()
        self.acs = AccountList(MagicMock(data_store=ds), href='test/accounts')
        self.d._set_properties({'accounts': self.acs})
        ds.get_resource.return_value = {
            'href': self.account.href, 'username': self.account.username
        }

        ds = MagicMock()
        ams = GroupMembershipList(
            MagicMock(data_store=ds), href='test/memberships')
        ds.get_resource.return_value = {
            'items': [], 'offset': 0, 'limit': 0
        }
        self.g._set_properties({'account_memberships': ams})

        self.assertRaises(
            StormpathError, self.g.remove_account, 'http://example.com/account')

    def test_memership_for_single_group(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': 'http://example.com/group', 'name': 'group'},
                {'href': 'http://example.com/group2', 'name': 'group2'},
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        GroupList.writable_attrs += ('query',)
        gs.query = lambda *args, **kwargs: [self.g]
        d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d, 'groups': gs})
        self.assertTrue(self.account.has_group('group'))

    def test_login_attempt(self):
        app = MagicMock()
        app.accounts.get.return_value = self.account
        app._client.auth.secret = 'fakeApiKeyProperties.secret'
        app.href = 'http://example.com/application'

        ar = AuthenticationResult(
            client=self.client,
            properties={'account': self.account, 'application': app})
        at = ar.get_access_token()

        self.assertEqual(self.account, at.account)
        self.assertEqual(app, at.app)
        self.assertFalse(at.for_api_key)

    def test_valid_account_store(self):
        directory = Directory(
            self.client,
            properties={
                'href': 'http://example.com/directories/dir',
                'name': 'directory'
            })

        account_store = AccountStore(
            client=self.client, properties={'href': directory.href})
        self.assertEqual(account_store.href, directory.href)
        self.assertEqual(type(account_store), type(directory))

    def test_invalid_account_store(self):
        self.assertRaises(ValueError, AccountStore, [self.client])
        self.assertRaises(
            ValueError, AccountStore, [self.client, '/wrong/href'])

    def test_manual_account_linking(self):
        ds = MagicMock()
        ds.create_resource.return_value = {}
        client = MagicMock(
            BASE_URL='http://example.com',
            data_store=ds
        )
        self.account._set_properties({
            'account_links': AccountLinkList(client, href='/accountLinks')
        })
        self.account2 = Account(self.client,
                                properties={
                                    'href': 'http://example.com/account2',
                                    'username': '******',
                                    'given_name': 'given_name2',
                                    'surname': 'surname2',
                                    'email': '*****@*****.**',
                                    'password': '******'
                                })

        self.account.account_links.create({
            'left_account': self.account,
            'right_account': self.account2
        })

        ds.create_resource.assert_called_once_with(
            'http://example.com/accountLinks',
            {
                'leftAccount': {'href': self.account.href},
                'rightAccount': {'href': self.account2.href}
            },
            params={}
        )
class TestAccount(TestCase):
    def setUp(self):
        super(TestAccount, self).setUp()
        self.client = MagicMock(BASE_URL='http://example.com')
        self.account = Account(self.client,
                properties={
                    'href': 'http://example.com/account',
                    'username': '******',
                    'given_name': 'given_name',
                    'surname': 'surname',
                    'email': '*****@*****.**',
                    'password': '******'})
        ds = MagicMock()
        self.gs = GroupList(MagicMock(data_store=ds), href='test/collection')
        self.g = Group(self.client,
                properties={'href': 'http://example.com/group', 'name': 'group'})
        self.g2 = Group(self.client,
                properties={'href': 'http://example.com/group2', 'name': 'group2'})
        ds.get_resource.return_value = {'href': self.g.href, 'name': self.g.name}
        self.d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        self.d._set_properties({'groups': self.gs})
        self.account._set_properties({'directory': self.d})

    def test_account_str_method(self):
        self.assertEquals('username', self.account.__str__())

    def test_resolve_group_raises_type_error_on_invalid_arg_type(self):
        self.assertRaises(TypeError, self.account._resolve_group, 1234)

    def test_resolve_group_with_object(self):
        group = Group(self.client, properties={'name': 'name'})
        ret = self.account._resolve_group(group)
        self.assertEquals(group, ret)

    def test_resolve_group_with_href(self):
        ret = self.account._resolve_group('http://example.com/group')
        self.assertEquals(ret.name, self.g.name)

    def test_resolve_group_name(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': 'http://example.com/group', 'name': 'group'},
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d})
        ret = self.account._resolve_group('group')
        self.assertEquals(ret.href, self.g.href)

    def test_resolve_non_existent_group(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': 'http://example.com/group', 'name': 'group'},
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d})
        self.assertRaises(ValueError, self.account._resolve_group, 'non_existent')

    def test_add_account_to_group(self):
        self.account.add_group('http://example.com/group')
        self.account._client.group_memberships.create.assert_any_calls()

    def test_memership_for_single_group(self):
        gs_ds = MagicMock()
        gs_ds.get_resource.return_value = {
            'href': 'test/collection',
            'offset': 0,
            'limit': 25,
            'items': [
                {'href': 'http://example.com/group', 'name': 'group'},
                {'href': 'http://example.com/group2', 'name': 'group2'},
            ]
        }
        gs = GroupList(MagicMock(data_store=gs_ds), href='test/collection')
        GroupList.writable_attrs += ('query',)
        gs.query = lambda *args, **kwargs: [self.g]
        d = Directory(self.client,
                properties={'href': 'http://example.com/directory', 'name': 'directory'})
        d._set_properties({'groups': gs})
        self.account._set_properties({'directory': d, 'groups': gs})
        self.assertTrue(self.account.has_group('group'))