def test_get_accounts_user_multiple_providers(self): user_id = self.db.users.insert({ 'email': '*****@*****.**', 'twitter_id': 1234, 'google_id': 4321, 'email_verified': True, }) self.db.passwords.insert({'password': '******', 'owner': user_id}) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [{ 'name': 'google', 'is_current': True, }, { 'name': 'twitter', 'is_current': False, }], 'passwords': 1, 'id': str(user_id), 'is_current': True, 'is_verified': True, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, 'google'))
def test_get_accounts_one_user_with_provider_email_verified(self): user_id = self.db.users.insert({ 'email': '*****@*****.**', 'twitter_id': 1234, 'email_verified': True, }) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [{ 'name': 'twitter', 'is_current': True, }], 'passwords': 0, 'id': str(user_id), 'is_current': True, 'is_verified': True, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, 'twitter'))
def test_get_accounts_empty_provider(self): self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, ''))
def identity_providers(request): current_provider = request.session.get('current_provider', None) accounts = get_accounts(request.db, request.user, current_provider) context = { 'accounts': accounts } verified = [ac for ac in accounts if ac['is_verified']] context['can_merge'] = len(verified) > 1 if 'submit' in request.POST: if not context['can_merge']: return HTTPBadRequest('You do not have enough accounts to merge') def is_verified(ac): for a in accounts: if a['id'] == ac: return a['is_verified'] return False accounts_to_merge = [account.replace('account-', '') for account in request.POST.keys() if account != 'submit'] accounts_to_merge = [account for account in accounts_to_merge if is_verified(account)] if len(accounts_to_merge) > 1: merged = merge_accounts(request.db, request.user, accounts_to_merge) localizer = get_localizer(request) msg = localizer.pluralize( _('Congratulations, ${n_merged} of your accounts has been merged into the current one'), _('Congratulations, ${n_merged} of your accounts have been merged into the current one'), merged, domain=translation_domain, mapping={'n_merged': merged}, ) request.session.flash(msg, 'success') else: request.session.flash( _('Not enough accounts for merging'), 'error', ) return HTTPFound( location=request.route_path('user_identity_providers')) return context
def test_get_accounts_one_user_no_provider(self): user_id = self.db.users.insert({'email': '*****@*****.**'}) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [], 'is_current': False, 'passwords': 0, 'id': str(user_id), 'is_verified': False, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, ''))
def test_get_accounts(self): self.assertEqual([], get_accounts(self.db, {}, '')) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, '')) user_id = self.db.users.insert({'email': '*****@*****.**'}, safe=True) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [], 'is_current': False, 'passwords': 0, 'id': str(user_id), 'is_verified': False, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, '')) self.db.users.update({'email': '*****@*****.**'}, { '$set': {'twitter_id': 1234}, }, safe=True) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [{ 'name': 'twitter', 'is_current': False, }], 'is_current': False, 'passwords': 0, 'id': str(user_id), 'is_verified': False, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, '')) self.db.users.update({'email': '*****@*****.**'}, { '$set': {'email_verified': True}, }, safe=True) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [{ 'name': 'twitter', 'is_current': True, }], 'passwords': 0, 'id': str(user_id), 'is_current': True, 'is_verified': True, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, 'twitter')) self.db.passwords.insert({'password': '******', 'owner': user_id}, safe=True) self.db.users.update({'email': '*****@*****.**'}, { '$set': {'twitter_id': 1234}, }, safe=True) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [{ 'name': 'twitter', 'is_current': False, }], 'passwords': 1, 'id': str(user_id), 'is_current': False, 'is_verified': True, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, 'google')) self.db.users.update({'email': '*****@*****.**'}, { '$set': {'google_id': 4321}, }, safe=True) self.assertEqual([{ 'providers': [], 'is_current': False, 'passwords': 0, 'id': '', 'is_verified': False, }, { 'providers': [{ 'name': 'google', 'is_current': True, }, { 'name': 'twitter', 'is_current': False, }], 'passwords': 1, 'id': str(user_id), 'is_current': True, 'is_verified': True, }], get_accounts(self.db, { 'email': '*****@*****.**', '_id': '', }, 'google'))
def test_get_accounts_empty_user(self): self.assertEqual([], get_accounts(self.db, {}, ''))