def test_merge_users(self): """ Test to verify merger of user accounts and return new user """ # Scenario 1: if first user's created_at date younger than second user's created_at crusoe = self.fixtures.crusoe batdog = models.User(username=u"batdog", fullname=u"Batdog") db.session.add(batdog) db.session.commit() merged = models.merge_users(crusoe, batdog) self.assertEqual(merged, crusoe) self.assertIsInstance(merged, models.User) # because the logic is to merge into older account self.assertEqual(crusoe.status, 0) self.assertEqual(batdog.status, 2) # Scenario 1: if second user's created_at date older than first user 's created_at tyrion = models.User(username=u'tyrion', fullname=u'Tyrion Lannister') db.session.add(tyrion) db.session.commit() subramanian = models.User(username=u'subramanian', fullname=u'Tyrion subramanian') db.session.add(subramanian) db.session.commit() merged = models.merge_users(subramanian, tyrion) self.assertEqual(merged, tyrion) self.assertIsInstance(merged, models.User) # because the logic is to merge into older account self.assertEqual(tyrion.status, 0) self.assertEqual(subramanian.status, 2)
def account_merge(): if 'merge_buid' not in session: return redirect(get_next_url(), code=302) other_user = User.get(buid=session['merge_buid']) if other_user is None: session.pop('merge_buid', None) return redirect(get_next_url(), code=302) form = ProfileMergeForm() if form.validate_on_submit(): if 'merge' in request.form: new_user = merge_users(current_auth.user, other_user) login_internal(new_user) flash(_("Your accounts have been merged"), 'success') session.pop('merge_buid', None) db.session.commit() user_data_changed.send(new_user, changes=['merge']) return redirect(get_next_url(), code=303) else: session.pop('merge_buid', None) return redirect(get_next_url(), code=303) return render_template( 'merge.html.jinja2', form=form, user=current_auth.user, other_user=other_user, login_registry=login_registry, )
def test_user_all(self): """ Test for User's all method """ # scenario 1: when neither buids or usernames are passed with self.assertRaises(Exception): models.User.all() crusoe = self.fixtures.crusoe oakley = self.fixtures.oakley expected_result = [crusoe, oakley] # scenario 2: when both buids and usernames are passed lookup_by_both = models.User.all(buids=[crusoe.buid], usernames=[oakley.username]) self.assertIsInstance(lookup_by_both, list) self.assertCountEqual(lookup_by_both, expected_result) # scenario 3: when only buids are passed lookup_by_buids = models.User.all(buids=[crusoe.buid, oakley.buid]) self.assertIsInstance(lookup_by_buids, list) self.assertCountEqual(lookup_by_buids, expected_result) # scenario 4: when only usernames are passed lookup_by_usernames = models.User.all( usernames=[crusoe.username, oakley.username]) self.assertIsInstance(lookup_by_usernames, list) self.assertCountEqual(lookup_by_usernames, expected_result) # scenario 5: when defercols is set to True lookup_by_usernames_defercols = models.User.all( usernames=[crusoe.username, oakley.username], defercols=True) lookup_by_usernames_defercols self.assertIsInstance(lookup_by_usernames, list) self.assertCountEqual(lookup_by_usernames, expected_result) # scenario 6: when user.status is active hannibal = models.User(username='******') hannibal.status = models.USER_STATUS.ACTIVE db.session.add(hannibal) db.session.commit() lookup_by_buid_status = models.User.all(usernames=[hannibal.username]) self.assertIsInstance(lookup_by_buid_status, list) self.assertEqual(lookup_by_buid_status[0].status, hannibal.status) # scenario 7 : when user.status is USER_STATUS.MERGED jykll = models.User() hyde = models.User() db.session.add_all([jykll, hyde]) db.session.commit() merged_user = models.merge_users(jykll, hyde) merged_user db.session.commit() lookup_by_buid_merged = models.User.all(buids=[hyde.buid]) self.assertIsInstance(lookup_by_buid_merged, list) self.assertEqual(lookup_by_buid_merged[0].username, jykll.username)
def test_name_transfer(self): assert self.fixtures.nameless.username is None assert models.AccountName.get('newname') is None newname = models.User(username='******', fullname="New Name") db.session.add(newname) db.session.commit() assert models.AccountName.get('newname') is not None assert newname.username == 'newname' merged = models.merge_users(self.fixtures.nameless, newname) assert merged is not newname assert merged is self.fixtures.nameless assert newname.username is None assert merged.username == 'newname' assert self.fixtures.nameless.username == 'newname'
def test_name_transfer(self): assert self.fixtures.nameless.username is None assert models.Name.get(u'newname') is None newname = models.User(username=u'newname', fullname="New Name") db.session.add(newname) db.session.commit() assert models.Name.get(u'newname') is not None assert newname.username == u'newname' merged = models.merge_users(self.fixtures.nameless, newname) assert merged is not newname assert merged is self.fixtures.nameless assert newname.username is None assert merged.username == u'newname' assert self.fixtures.nameless.username == u'newname'
def test_useroldid_get(self): """ Test for verifying creation and retrieval of UserOldId instance """ crusoe = self.fixtures.crusoe bathound = models.User(username="******", fullname="Bathound") db.session.add(bathound) db.session.commit() merged = models.merge_users(crusoe, bathound) if merged == crusoe: other = bathound else: other = crusoe query_for_olduser = models.UserOldId.get(other.uuid) self.assertIsInstance(query_for_olduser, models.UserOldId) self.assertEqual(query_for_olduser.olduser, other)
def test_UserOldId_get(self): """ Test for verifying creation and retrieval of UserOldId instance """ crusoe = self.fixtures.crusoe bathound = models.User(username=u"bathound", fullname=u"Bathound") db.session.add(bathound) db.session.commit() merged = models.merge_users(crusoe, bathound) if merged == crusoe: other = bathound else: other = crusoe query_for_olduser = models.UserOldId.get(other.uuid) self.assertIsInstance(query_for_olduser, models.UserOldId) self.assertEqual(query_for_olduser.olduser, other)
def test_User_all(self): """ Test for User's all method """ # scenario 1: when neither buids or usernames are passed with self.assertRaises(Exception): models.User.all() crusoe = self.fixtures.crusoe oakley = self.fixtures.oakley expected_result = [crusoe, oakley] # scenario 2: when both buids and usernames are passed lookup_by_both = models.User.all(buids=[crusoe.buid], usernames=[oakley.username]) self.assertIsInstance(lookup_by_both, list) self.assertItemsEqual(lookup_by_both, expected_result) # scenario 3: when only buids are passed lookup_by_buids = models.User.all(buids=[crusoe.buid, oakley.buid]) self.assertIsInstance(lookup_by_buids, list) self.assertItemsEqual(lookup_by_buids, expected_result) # scenario 4: when only usernames are passed lookup_by_usernames = models.User.all(usernames=[crusoe.username, oakley.username]) self.assertIsInstance(lookup_by_usernames, list) self.assertItemsEqual(lookup_by_usernames, expected_result) # scenario 5: when defercols is set to True lookup_by_usernames_defercols = models.User.all(usernames=[crusoe.username, oakley.username], defercols=True) lookup_by_usernames_defercols # NOQA self.assertIsInstance(lookup_by_usernames, list) self.assertItemsEqual(lookup_by_usernames, expected_result) # scenario 6: when user.status is active hannibal = models.User(username=u'hannibal') hannibal.status = models.USER_STATUS.ACTIVE db.session.add(hannibal) db.session.commit() lookup_by_buid_status = models.User.all(usernames=[hannibal.username]) self.assertIsInstance(lookup_by_buid_status, list) self.assertEqual(lookup_by_buid_status[0].status, hannibal.status) # scenario 7 : when user.status is USER_STATUS.MERGED jykll = models.User() hyde = models.User() db.session.add_all([jykll, hyde]) db.session.commit() merged_user = models.merge_users(jykll, hyde) merged_user # NOQA db.session.commit() lookup_by_buid_merged = models.User.all(buids=[hyde.buid]) self.assertIsInstance(lookup_by_buid_merged, list) self.assertEqual(lookup_by_buid_merged[0].username, jykll.username)
def test_user_merged_user(self): """ Test for checking if user had a old id """ # ## Merge a user onto an older user ### crusoe = self.fixtures.crusoe crusoe2 = models.User(username=u"batdog", fullname=u"Batdog") db.session.add(crusoe2) db.session.commit() merged_user = models.merge_users(crusoe, crusoe2) db.session.commit() # ## DONE ### self.assertIsInstance(merged_user, models.User) # because the logic is to merge into older account so merge status set on newer account self.assertEqual(crusoe.status, 0) self.assertEqual(crusoe2.status, 2) self.assertEqual(merged_user.username, u"crusoe") self.assertIsInstance(merged_user.oldids, InstrumentedList) assert u'of User crusoe "Crusoe Celebrity Dachshund">' in repr(merged_user.oldids)
def test_user_merged_user(self): """ Test for checking if user had a old id """ # ## Merge a user onto an older user ### crusoe = self.fixtures.crusoe crusoe2 = models.User(username="******", fullname="Crusoe2") db.session.add(crusoe2) db.session.commit() merged_user = models.merge_users(crusoe, crusoe2) db.session.commit() # ## DONE ### self.assertIsInstance(merged_user, models.User) # because the logic is to merge into older account so merge status set on newer account self.assertEqual(crusoe.status, 0) self.assertEqual(crusoe2.status, 2) self.assertEqual(merged_user.username, "crusoe") self.assertIsInstance(merged_user.oldids, InstrumentedList) self.assertCountEqual(crusoe.oldids, merged_user.oldids)
def profile_merge(): if "merge_userid" not in session: return redirect(get_next_url(), code=302) other_user = User.query.filter_by(userid=session["merge_userid"]).first() if other_user is None: session.pop("merge_userid", None) return redirect(get_next_url(), code=302) form = ProfileMergeForm() if form.validate_on_submit(): if "merge" in request.form: new_user = merge_users(g.user, other_user) login_internal(new_user) user_data_changed.send(new_user, changes=["merge"]) flash("Your accounts have been merged.", "success") session.pop("merge_userid", None) return redirect(get_next_url(), code=303) else: session.pop("merge_userid", None) return redirect(get_next_url(), code=303) return render_template("merge.html", form=form, user=g.user, other_user=other_user, login_registry=login_registry)
def test_User_get(self): """ Test for User's get method """ # scenario 1: if both username and buid not passed with self.assertRaises(TypeError): models.User.get() crusoe = self.fixtures.crusoe piglet = self.fixtures.piglet # scenario 2: if buid is passed lookup_by_buid = models.User.get(buid=crusoe.buid) self.assertIsInstance(lookup_by_buid, models.client.User) self.assertEqual(lookup_by_buid.buid, crusoe.buid) # scenario 3: if username is passed lookup_by_username = models.User.get(username=u"crusoe") self.assertIsInstance(lookup_by_username, models.User) self.assertEqual(lookup_by_username.username, u"crusoe") # scenario 4: if defercols is set to True lookup_by_username = models.User.get(username=u"crusoe", defercols=True) self.assertIsInstance(lookup_by_username, models.User) self.assertEqual(lookup_by_username.username, u"crusoe") # scenario 5: when user.status is active lector = models.User() lector.status = models.USER_STATUS.ACTIVE db.session.add(lector) db.session.commit() lookup_by_buid_status = models.User.get(buid=lector.buid) self.assertIsInstance(lookup_by_buid_status, models.User) self.assertEqual(lookup_by_buid_status.status, lector.status) # scenario 6 : when user.status is USER_STATUS.MERGED piglet = self.fixtures.piglet piggy = models.User(username=u'piggy') db.session.add(piggy) db.session.commit() merged_user = models.merge_users(piglet, piggy) merged_user # NOQA db.session.commit() lookup_by_buid_merged = models.User.get(buid=piggy.buid) self.assertIsInstance(lookup_by_buid_merged, models.User) self.assertEqual(lookup_by_buid_merged.username, piglet.username)
def account_merge(): if 'merge_buid' not in session: return redirect(get_next_url(), code=302) other_user = User.get(buid=session['merge_buid']) if other_user is None: session.pop('merge_buid', None) return redirect(get_next_url(), code=302) form = ProfileMergeForm() if form.validate_on_submit(): if 'merge' in request.form: new_user = merge_users(current_auth.user, other_user) login_internal(new_user) flash(_("Your accounts have been merged"), 'success') session.pop('merge_buid', None) db.session.commit() user_data_changed.send(new_user, changes=['merge']) return redirect(get_next_url(), code=303) else: session.pop('merge_buid', None) return redirect(get_next_url(), code=303) return render_template('merge.html.jinja2', form=form, user=current_auth.user, other_user=other_user, login_registry=login_registry)
def profile_merge(): if 'merge_userid' not in session: return redirect(get_next_url(), code=302) other_user = User.get(userid=session['merge_userid']) if other_user is None: session.pop('merge_userid', None) return redirect(get_next_url(), code=302) form = ProfileMergeForm() if form.validate_on_submit(): if 'merge' in request.form: new_user = merge_users(g.user, other_user) login_internal(new_user) user_data_changed.send(new_user, changes=['merge']) flash("Your accounts have been merged.", 'success') session.pop('merge_userid', None) return redirect(get_next_url(), code=303) else: session.pop('merge_userid', None) return redirect(get_next_url(), code=303) return render_template("merge.html", form=form, user=g.user, other_user=other_user, login_registry=login_registry)