Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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)