def test_merged_user(self): user = AuthUserFactory(fullname='Annie Lennox') merged_user = AuthUserFactory(fullname='Lisa Stansfield') user.save() merged_user.save() user.merge_user(merged_user) user.save() merged_user.save() user.reload() merged_user.reload() modify_user_dates_in_mongo(self.yesterday) data = UserSummary().get_events(self.yesterday.date())[0] assert_equal(data['status']['merged'], 1)
class TestUsers(ApiTestCase): def setUp(self): super(TestUsers, self).setUp() self.user_one = AuthUserFactory() self.user_two = AuthUserFactory() def tearDown(self): super(TestUsers, self).tearDown() def test_returns_200(self): res = self.app.get('/{}users/'.format(API_BASE)) assert_equal(res.status_code, 200) assert_equal(res.content_type, 'application/vnd.api+json') def test_find_user_in_users(self): url = "/{}users/".format(API_BASE) res = self.app.get(url) user_son = res.json['data'] ids = [each['id'] for each in user_son] assert_in(self.user_two._id, ids) def test_all_users_in_users(self): url = "/{}users/".format(API_BASE) res = self.app.get(url) user_son = res.json['data'] ids = [each['id'] for each in user_son] assert_in(self.user_one._id, ids) assert_in(self.user_two._id, ids) def test_merged_user_is_not_in_user_list_after_2point3(self): self.user_two.merge_user(self.user_one) res = self.app.get('/{}users/?version=2.3'.format(API_BASE)) user_son = res.json['data'] ids = [each['id'] for each in user_son] assert_equal(res.status_code, 200) assert_in(self.user_two._id, ids) assert_not_in(self.user_one._id, ids) def test_merged_user_is_returned_before_2point3(self): self.user_two.merge_user(self.user_one) res = self.app.get('/{}users/'.format(API_BASE)) user_son = res.json['data'] ids = [each['id'] for each in user_son] assert_equal(res.status_code, 200) assert_in(self.user_two._id, ids) assert_in(self.user_one._id, ids) def test_find_multiple_in_users(self): url = "/{}users/?filter[full_name]=fred".format(API_BASE) res = self.app.get(url) user_json = res.json['data'] ids = [each['id'] for each in user_json] assert_in(self.user_one._id, ids) assert_in(self.user_two._id, ids) def test_find_single_user_in_users(self): url = "/{}users/?filter[full_name]=my".format(API_BASE) self.user_one.fullname = 'My Mom' self.user_one.save() res = self.app.get(url) user_json = res.json['data'] ids = [each['id'] for each in user_json] assert_in(self.user_one._id, ids) assert_not_in(self.user_two._id, ids) def test_find_no_user_in_users(self): url = "/{}users/?filter[full_name]=NotMyMom".format(API_BASE) res = self.app.get(url) user_json = res.json['data'] ids = [each['id'] for each in user_json] assert_not_in(self.user_one._id, ids) assert_not_in(self.user_two._id, ids) def test_more_than_one_projects_in_common(self): project1 = ProjectFactory(creator=self.user_one) project1.add_contributor( contributor=self.user_two, permissions=CREATOR_PERMISSIONS, auth=Auth(user=self.user_one) ) project1.save() project2 = ProjectFactory(creator=self.user_one) project2.add_contributor( contributor=self.user_two, permissions=CREATOR_PERMISSIONS, auth=Auth(user=self.user_one) ) project2.save() url = "/{}users/?show_projects_in_common=true".format(API_BASE) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'] for user in user_json: if user['id'] == self.user_one._id or user['id'] == self.user_two._id: meta = user['relationships']['nodes']['links']['related']['meta'] assert_in('projects_in_common', meta) assert_equal(meta['projects_in_common'], 2) def test_users_projects_in_common(self): self.user_one.fullname = 'hello' self.user_one.save() url = "/{}users/?show_projects_in_common=true".format(API_BASE) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'] for user in user_json: meta = user['relationships']['nodes']['links']['related']['meta'] assert_in('projects_in_common', meta) assert_equal(meta['projects_in_common'], 0) def test_users_projects_in_common_with_embed_and_right_query(self): project = ProjectFactory(creator=self.user_one) project.add_contributor( contributor=self.user_two, permissions=CREATOR_PERMISSIONS, auth=Auth(user=self.user_one) ) project.save() url = "/{}users/{}/nodes/?embed=contributors&show_projects_in_common=true".format(API_BASE, self.user_two._id) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'][0]['embeds']['contributors']['data'] for user in user_json: meta = user['embeds']['users']['data']['relationships']['nodes']['links']['related']['meta'] assert_in('projects_in_common', meta) assert_equal(meta['projects_in_common'], 1) def test_users_projects_in_common_exclude_deleted_projects(self): project_list=[] for x in range(1,10): project = ProjectFactory(creator=self.user_one) project.add_contributor( contributor=self.user_two, permissions=CREATOR_PERMISSIONS, auth=Auth(user=self.user_one) ) project.save() project_list.append(project) for x in range(1,5): project = project_list[x] project.reload() project.remove_node(auth=Auth(user=self.user_one)) project.save() url = "/{}users/{}/nodes/?embed=contributors&show_projects_in_common=true".format(API_BASE, self.user_two._id) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'][0]['embeds']['contributors']['data'] for user in user_json: meta = user['embeds']['users']['data']['relationships']['nodes']['links']['related']['meta'] assert_in('projects_in_common', meta) assert_equal(meta['projects_in_common'], 5) def test_users_projects_in_common_with_embed_without_right_query(self): project = ProjectFactory(creator=self.user_one) project.add_contributor( contributor=self.user_two, permissions=CREATOR_PERMISSIONS, auth=Auth(user=self.user_one) ) project.save() url = "/{}users/{}/nodes/?embed=contributors".format(API_BASE, self.user_two._id) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'][0]['embeds']['contributors']['data'] for user in user_json: meta = user['embeds']['users']['data']['relationships']['nodes']['links']['related']['meta'] assert_not_in('projects_in_common', meta) def test_users_no_projects_in_common_with_wrong_query(self): self.user_one.fullname = 'hello' self.user_one.save() url = "/{}users/?filter[full_name]={}".format(API_BASE, self.user_one.fullname) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'] for user in user_json: meta = user['relationships']['nodes']['links']['related']['meta'] assert_not_in('projects_in_common', meta) def test_users_no_projects_in_common_without_filter(self): self.user_one.fullname = 'hello' self.user_one.save() url = "/{}users/".format(API_BASE) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'] for user in user_json: meta = user['relationships']['nodes']['links']['related']['meta'] assert_not_in('projects_in_common', meta) def test_users_list_takes_profile_image_size_param(self): size = 42 url = "/{}users/?profile_image_size={}".format(API_BASE, size) res = self.app.get(url) user_json = res.json['data'] for user in user_json: profile_image_url = user['links']['profile_image'] query_dict = urlparse.parse_qs(urlparse.urlparse(profile_image_url).query) assert_equal(int(query_dict.get('s')[0]), size) def test_users_list_filter_multiple_field(self): self.john_doe = UserFactory(full_name='John Doe') self.john_doe.given_name = 'John' self.john_doe.family_name = 'Doe' self.john_doe.save() self.doe_jane = UserFactory(full_name='Doe Jane') self.doe_jane.given_name = 'Doe' self.doe_jane.family_name = 'Jane' self.doe_jane.save() url = "/{}users/?filter[given_name,family_name]=Doe".format(API_BASE) res = self.app.get(url) data = res.json['data'] assert_equal(len(data), 2) def test_users_list_filter_multiple_fields_with_additional_filters(self): self.john_doe = UserFactory(full_name='John Doe') self.john_doe.given_name = 'John' self.john_doe.family_name = 'Doe' self.john_doe._id = 'abcde' self.john_doe.save() self.doe_jane = UserFactory(full_name='Doe Jane') self.doe_jane.given_name = 'Doe' self.doe_jane.family_name = 'Jane' self.doe_jane._id = 'zyxwv' self.doe_jane.save() url = "/{}users/?filter[given_name,family_name]=Doe&filter[id]=abcde".format(API_BASE) res = self.app.get(url) data = res.json['data'] assert_equal(len(data), 1) def test_users_list_filter_multiple_fields_with_bad_filter(self): url = "/{}users/?filter[given_name,not_a_filter]=Doe".format(API_BASE) res = self.app.get(url, expect_errors=True) assert_equal(res.status_code, 400)