コード例 #1
0
    def test_add_members_to_org_with_role(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'get': 'retrieve'
        })

        self.profile_data['username'] = "******"
        self._create_user_profile()
        data = {'username': '******', 'role': 'editor'}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        self.assertEqual(set(response.data), set([u'denoinc', u'aboy']))

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['users'][2]['user'], 'aboy')
        self.assertEqual(response.data['users'][2]['role'], 'editor')
コード例 #2
0
    def test_put_bad_role(self):
        self._org_create()
        newname = 'aboy'
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members',
            'put': 'members'
        })

        self.profile_data['username'] = newname
        self._create_user_profile()
        data = {'username': newname}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(set(response.data), set([u'denoinc', newname]))

        data = {'username': newname, 'role': 42}
        request = self.factory.put('/',
                                   data=json.dumps(data),
                                   content_type="application/json",
                                   **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
コード例 #3
0
    def test_orgs_non_creator_delete(self):
        self._org_create()

        view = OrganizationProfileViewSet.as_view({
            'delete': 'members',
            'post': 'members'
        })

        self.profile_data['username'] = "******"
        self.profile_data['email'] = '*****@*****.**'
        self._create_user_profile()

        alice_data = {'username': '******', 'email': '*****@*****.**'}
        request = self.factory.post('/',
                                    data=json.dumps(alice_data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        expected_results = [u'denoinc', u'alice']
        self.assertEqual(status.HTTP_201_CREATED, response.status_code)
        self.assertEqual(expected_results, response.data)

        self._login_user_and_profile(extra_post_data=alice_data)

        request = self.factory.delete('/',
                                      data=json.dumps(alice_data),
                                      content_type="application/json",
                                      **self.extra)
        response = view(request, user='******')
        expected_results = [u'denoinc']
        self.assertEqual(expected_results, response.data)
コード例 #4
0
 def _org_create(self):
     view = OrganizationProfileViewSet.as_view({
         'get': 'list',
         'post': 'create'
     })
     request = self.factory.get('/', **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 200)
     data = {
         'org': u'denoinc',
         'name': u'Dennis',
         'city': u'Denoville',
         'country': u'US',
         'home_page': u'deno.com',
         'twitter': u'denoinc',
         'description': u'',
         'address': u'',
         'phonenumber': u'',
         'require_auth': False,
     }
     request = self.factory.post(
         '/', data=json.dumps(data),
         content_type="application/json", **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 201)
     data['url'] = 'http://testserver/api/v1/orgs/denoinc'
     data['user'] = '******'
     data['creator'] = 'http://testserver/api/v1/users/bob'
     self.assertDictContainsSubset(data, response.data)
     self.company_data = response.data
     self.organization = OrganizationProfile.objects.get(
         user__username=data['org'])
コード例 #5
0
    def test_put_require_role(self):
        self._org_create()
        newname = 'aboy'
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members',
            'put': 'members'
        })

        User.objects.create(username=newname)
        data = {'username': newname}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data, [u'denoinc', newname])

        data = {'username': newname}
        request = self.factory.put('/',
                                   data=json.dumps(data),
                                   content_type="application/json",
                                   **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
コード例 #6
0
 def setUp(self):
     super(self.__class__, self).setUp()
     self.view = OrganizationProfileViewSet.as_view({
         'get': 'list',
         'post': 'create',
         'patch': 'partial_update',
     })
コード例 #7
0
    def test_add_members_to_org_with_role(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'get': 'retrieve'
        })

        self.profile_data['username'] = "******"
        self._create_user_profile()
        data = {'username': '******',
                'role': 'editor'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        self.assertEqual(set(response.data), set([u'denoinc', u'aboy']))

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['users'][1]['user'], 'aboy')
        self.assertEqual(response.data['users'][1]['role'], 'editor')
コード例 #8
0
    def test_member_sees_orgs_added_to(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'get': 'list',
            'post': 'members'
        })

        member = 'aboy'
        expected_data = self.company_data
        expected_data['users'].append({'role': 'member', 'user': member})
        cur_username = self.profile_data['username']
        self.profile_data['username'] = member
        self._login_user_and_profile()
        self.profile_data['username'] = cur_username
        self._login_user_and_profile()

        data = {'username': member}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data, [u'denoinc', u'aboy'])

        self.profile_data['username'] = member
        self._login_user_and_profile()

        request = self.factory.get('/', **self.extra)
        response = view(request)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, [expected_data])
コード例 #9
0
    def test_remove_members_from_org(self):
        self._org_create()
        newname = 'aboy'
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'delete': 'members'
        })

        User.objects.create(username=newname)
        data = {'username': newname}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(set(response.data), set([u'denoinc', newname]))

        request = self.factory.delete('/',
                                      json.dumps(data),
                                      content_type="application/json",
                                      **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data, [u'denoinc'])
コード例 #10
0
    def test_member_sees_orgs_added_to(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'get': 'list',
            'post': 'members'
        })

        member = 'aboy'
        expected_data = self.company_data
        expected_data['users'].append({'role': 'member', 'user': member})
        cur_username = self.profile_data['username']
        self.profile_data['username'] = member
        self._login_user_and_profile()
        self.profile_data['username'] = cur_username
        self._login_user_and_profile()

        data = {'username': member}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data, [u'denoinc', u'aboy'])

        self.profile_data['username'] = member
        self._login_user_and_profile()

        request = self.factory.get('/', **self.extra)
        response = view(request)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, [expected_data])
コード例 #11
0
 def setUp(self):
     super(self.__class__, self).setUp()
     self.view = OrganizationProfileViewSet.as_view({
         'get': 'list',
         'post': 'create',
         'patch': 'partial_update',
     })
コード例 #12
0
 def _org_create(self):
     view = OrganizationProfileViewSet.as_view({
         'get': 'list',
         'post': 'create'
     })
     request = self.factory.get('/', **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 200)
     data = {
         'org': u'denoinc',
         'name': u'Dennis',
         'city': u'Denoville',
         'country': u'US',
         'home_page': u'deno.com',
         'twitter': u'denoinc',
         'description': u'',
         'address': u'',
         'phonenumber': u'',
         'require_auth': False,
     }
     request = self.factory.post('/',
                                 data=json.dumps(data),
                                 content_type="application/json",
                                 **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 201)
     data['url'] = 'http://testserver/api/v1/orgs/denoinc'
     data['user'] = '******'
     data['creator'] = 'http://testserver/api/v1/users/bob'
     self.assertDictContainsSubset(data, response.data)
     self.company_data = response.data
     self.organization = OrganizationProfile.objects.get(
         user__username=data['org'])
コード例 #13
0
    def test_remove_members_from_org(self):
        self._org_create()
        newname = 'aboy'
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'delete': 'members'
        })

        User.objects.create(username=newname)
        data = {'username': newname}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(set(response.data), set([u'denoinc', newname]))

        request = self.factory.delete(
            '/', json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(response.data, [u'denoinc'])
コード例 #14
0
    def test_put_bad_role(self):
        self._org_create()
        newname = 'aboy'
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members',
            'put': 'members'
        })

        User.objects.create(username=newname)
        data = {'username': newname}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(set(response.data), set([u'denoinc', newname]))

        data = {'username': newname, 'role': 42}
        request = self.factory.put(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
コード例 #15
0
    def test_orgs_non_creator_delete(self):
        self._org_create()

        view = OrganizationProfileViewSet.as_view({
            'delete': 'members',
            'post': 'members'
        })

        self.profile_data['username'] = "******"
        self.profile_data['email'] = '*****@*****.**'
        self._create_user_profile()

        alice_data = {'username': '******', 'email': '*****@*****.**'}
        request = self.factory.post(
            '/', data=json.dumps(alice_data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        expected_results = [u'denoinc', u'alice']
        self.assertEqual(status.HTTP_201_CREATED, response.status_code)
        self.assertEqual(expected_results, response.data)

        self._login_user_and_profile(extra_post_data=alice_data)

        request = self.factory.delete('/', data=json.dumps(alice_data),
                                      content_type="application/json",
                                      **self.extra)
        response = view(request, user='******')
        expected_results = [u'denoinc']
        self.assertEqual(expected_results, response.data)
コード例 #16
0
    def test_role_for_org_non_owner(self):
        # creating org with member
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members'
        })

        self.profile_data['username'] = "******"
        self._create_user_profile()
        data = {'username': '******'}
        user_role = 'member'
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)
        response = view(request, user='******')

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertIn('users', list(response.data))

        for user in response.data['users']:
            username = user['user']
            role = user['role']
            expected_role = 'owner' if username == 'denoinc' or \
                username == self.user.username else user_role
            self.assertEqual(role, expected_role)
コード例 #17
0
    def test_role_for_org_non_owner(self):
        # creating org with member
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members'
        })

        self.profile_data['username'] = "******"
        self._create_user_profile()
        data = {'username': '******'}
        user_role = 'member'
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)
        response = view(request, user='******')

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertIn('users', response.data.keys())

        for user in response.data['users']:
            username = user['user']
            role = user['role']
            expected_role = 'owner' if username == 'denoinc' else user_role
            self.assertEqual(role, expected_role)
コード例 #18
0
    def test_orgs_members_list(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({'get': 'members'})

        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, [u'denoinc'])
コード例 #19
0
 def test_add_members_to_org_username_required(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({'post': 'members'})
     request = self.factory.post('/', data={}, **self.extra)
     response = view(request, user='******')
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.data,
                      {u'username': [u"This field may not be null."]})
コード例 #20
0
    def test_org_members_added_to_projects(self):
        # create org
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'get': 'retrieve',
            'put': 'members'
        })

        # create aboy
        self.profile_data['username'] = "******"
        aboy = self._create_user_profile().user

        data = {'username': '******',
                'role': 'owner'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        # create a proj
        project_data = {
            'owner': self.company_data['user']
        }
        self._project_create(project_data)
        self._publish_xls_form_to_project()

        # create alice
        self.profile_data['username'] = "******"
        alice = self._create_user_profile().user
        alice_data = {'username': '******',
                      'role': 'owner'}
        request = self.factory.post(
            '/', data=json.dumps(alice_data),
            content_type="application/json", **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        # Assert that user added in org is added to teams in proj
        self.assertTrue(OwnerRole.user_has_role(aboy, self.project))
        self.assertTrue(OwnerRole.user_has_role(alice, self.project))
        self.assertTrue(OwnerRole.user_has_role(aboy, self.xform))
        self.assertTrue(OwnerRole.user_has_role(alice, self.xform))

        # Org admins are added to owners in project
        projectView = ProjectViewSet.as_view({
            'get': 'retrieve'
        })
        request = self.factory.get('/', **self.extra)
        response = projectView(request, pk=self.project.pk)
        project_users = response.data.get('users')
        users_in_users = [user['user'] for user in project_users]

        self.assertIn('bob', users_in_users)
        self.assertIn('denoinc', users_in_users)
        self.assertIn('aboy', users_in_users)
        self.assertIn('alice', users_in_users)
コード例 #21
0
    def test_org_members_added_to_projects(self):
        # create org
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'get': 'retrieve',
            'put': 'members'
        })

        # create aboy
        self.profile_data['username'] = "******"
        aboy = self._create_user_profile().user

        data = {'username': '******',
                'role': 'owner'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        # create a proj
        project_data = {
            'owner': self.company_data['user']
        }
        self._project_create(project_data)
        self._publish_xls_form_to_project()

        # create alice
        self.profile_data['username'] = "******"
        alice = self._create_user_profile().user
        alice_data = {'username': '******',
                      'role': 'owner'}
        request = self.factory.post(
            '/', data=json.dumps(alice_data),
            content_type="application/json", **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        # Assert that user added in org is added to teams in proj
        self.assertTrue(OwnerRole.user_has_role(aboy, self.project))
        self.assertTrue(OwnerRole.user_has_role(alice, self.project))
        self.assertTrue(OwnerRole.user_has_role(aboy, self.xform))
        self.assertTrue(OwnerRole.user_has_role(alice, self.xform))

        # Org admins are added to owners in project
        projectView = ProjectViewSet.as_view({
            'get': 'retrieve'
        })
        request = self.factory.get('/', **self.extra)
        response = projectView(request, pk=self.project.pk)
        project_users = response.data.get('users')
        users_in_users = [user['user'] for user in project_users]

        self.assertIn('bob', users_in_users)
        self.assertIn('denoinc', users_in_users)
        self.assertIn('aboy', users_in_users)
        self.assertIn('alice', users_in_users)
コード例 #22
0
    def test_orgs_members_list(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'get': 'members'
        })

        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, [u'denoinc'])
コード例 #23
0
 def test_add_members_to_org_username_required(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'post': 'members'
     })
     request = self.factory.post('/', data={}, **self.extra)
     response = view(request, user='******')
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.data,
                      {u'username': [u"This field is required."]})
コード例 #24
0
    def test_creator_permissions(self):
        """
        Test that the creator of the organization has the necessary
        permissions
        """
        self._org_create()
        request = self.factory.get('/', **self.extra)
        response = self.view(request)
        self.assertNotEqual(response.get('Cache-Control'), None)
        self.assertEqual(response.status_code, 200)

        orgs = OrganizationProfile.objects.filter(creator=self.user)
        self.assertEqual(orgs.count(), 1)
        org = orgs.first()

        self.assertTrue(OwnerRole.user_has_role(self.user, org))
        self.assertTrue(
            OwnerRole.user_has_role(self.user, org.userprofile_ptr))

        members_view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'delete': 'members'
        })

        # New admins should also have the required permissions
        self.profile_data['username'] = "******"
        dave = self._create_user_profile().user

        data = {'username': '******',
                'role': 'owner'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)
        response = members_view(request, user='******')
        self.assertEqual(response.status_code, 201)

        # Ensure user has role
        self.assertTrue(OwnerRole.user_has_role(dave, org))
        self.assertTrue(
            OwnerRole.user_has_role(dave, org.userprofile_ptr))

        # Permissions should be removed when the user is removed from
        # organization
        request = self.factory.delete('/', data=json.dumps(data),
                                      content_type="application/json",
                                      **self.extra)
        response = members_view(request, user='******')
        expected_results = [u'denoinc']
        self.assertEqual(expected_results, response.data)

        # Ensure permissions are removed
        self.assertFalse(OwnerRole.user_has_role(dave, org))
        self.assertFalse(
            OwnerRole.user_has_role(dave, org.userprofile_ptr))
コード例 #25
0
 def test_orgs_get_anon(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({'get': 'retrieve'})
     request = self.factory.get('/')
     response = view(request, user='******')
     self.assertNotEqual(response.get('Last-Modified'), None)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', response.data.keys())
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertEqual(type(user['user']), unicode)
コード例 #26
0
 def test_orgs_get_anon(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({'get': 'retrieve'})
     request = self.factory.get('/')
     response = view(request, user='******')
     self.assertNotEqual(response.get('Cache-Control'), None)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', list(response.data))
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertTrue(isinstance(user['user'], text))
コード例 #27
0
 def test_orgs_get(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({'get': 'retrieve'})
     request = self.factory.get('/', **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.data,
                      {'detail': 'Expected URL keyword argument `user`.'})
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
コード例 #28
0
    def test_add_members_to_org_user_does_not_exist(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({'post': 'members'})
        data = {'username': '******'}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.data,
                         {u'username': [u"User 'aboy' does not exist."]})
コード例 #29
0
    def test_add_members_to_org_with_anonymous_user(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({'post': 'members'})

        self._create_user_profile(extra_post_data={'username': '******'})
        data = {'username': '******'}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json")

        response = view(request, user='******')
        self.assertEqual(response.status_code, 401)
        self.assertNotEquals(set(response.data), set([u'denoinc', u'aboy']))
コード例 #30
0
    def test_orgs_list_restricted(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({'get': 'list'})

        alice_data = {'username': '******', 'email': '*****@*****.**'}
        self._login_user_and_profile(extra_post_data=alice_data)
        self.assertEqual(self.user.username, 'alice')

        request = self.factory.get('/', **self.extra)
        response = view(request)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, [])
コード例 #31
0
    def test_add_members_to_org(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({'post': 'members'})

        User.objects.create(username='******')
        data = {'username': '******'}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(set(response.data), set([u'denoinc', u'aboy']))
コード例 #32
0
 def test_orgs_get(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'get': 'retrieve'
     })
     request = self.factory.get('/', **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 400)
     self.assertEqual(
         response.data, {'detail': 'Expected URL keyword argument `user`.'})
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
コード例 #33
0
 def test_orgs_get_anon(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'get': 'retrieve'
     })
     request = self.factory.get('/')
     response = view(request, user='******')
     self.assertNotEqual(response.get('Last-Modified'), None)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', response.data.keys())
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertEqual(type(user['user']), unicode)
コード例 #34
0
    def test_add_members_to_org_user_does_not_exist(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members'
        })
        data = {'username': '******'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
        self.assertEqual(response.data,
                         {u'username': [u"User `aboy` does not exist."]})
コード例 #35
0
    def test_org_always_has_admin_or_owner(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'put': 'members',
        })
        data = {'username': self.user.username, 'role': 'editor'}
        request = self.factory.put('/',
                                   data=json.dumps(data),
                                   content_type="application/json",
                                   **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
        self.assertEquals(response.data, u"Organization cannot be without"
                          u" an owner")
コード例 #36
0
 def test_orgs_get_anon(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'get': 'retrieve'
     })
     request = self.factory.get('/')
     response = view(request, user='******')
     self.assertNotEqual(response.get('Cache-Control'), None)
     self.assertEqual(response.status_code, 200)
     del self.company_data['metadata']
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', list(response.data))
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertTrue(isinstance(user['user'], text))
コード例 #37
0
    def test_orgs_list_restricted(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'get': 'list'
        })

        alice_data = {'username': '******', 'email': '*****@*****.**'}
        self._login_user_and_profile(extra_post_data=alice_data)
        self.assertEqual(self.user.username, 'alice')

        request = self.factory.get('/', **self.extra)
        response = view(request)

        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, [])
コード例 #38
0
    def test_add_members_to_org_with_anonymous_user(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members'
        })

        User.objects.create(username='******')
        data = {'username': '******'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json")

        response = view(request, user='******')
        self.assertEqual(response.status_code, 401)
        self.assertNotEquals(set(response.data), set([u'denoinc', u'aboy']))
コード例 #39
0
    def test_widget_create_by_org_admin(self):
        self.project.organization = self.organization.user
        self.project.save()
        chuck_data = {'username': '******', 'email': '*****@*****.**'}
        chuck_profile = self._create_user_profile(chuck_data)

        view = OrganizationProfileViewSet.as_view({'post': 'members'})

        data = {
            'username': chuck_profile.user.username,
            'role': OwnerRole.name
        }
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user=self.organization.user.username)

        self.assertEqual(response.status_code, 201)

        owners_team = get_or_create_organization_owners_team(self.organization)
        self.assertIn(chuck_profile.user, owners_team.user_set.all())

        extra = {
            'HTTP_AUTHORIZATION': 'Token %s' % chuck_profile.user.auth_token
        }

        view = WidgetViewSet.as_view({'post': 'create'})

        data = {
            'content_object':
            'http://testserver/api/v1/dataviews/%s' % self.data_view.pk,
            'widget_type':
            "charts",
            'view_type':
            "horizontal-bar",
            'column':
            "_submission_time",
        }

        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **extra)
        response = view(request)

        self.assertEquals(response.status_code, 201)
コード例 #40
0
    def test_put_role_user_none_existent(self):
        self._org_create()
        newname = 'i-do-no-exist'
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members',
            'put': 'members'
        })

        data = {'username': newname, 'role': 'editor'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
コード例 #41
0
    def test_orgs_delete(self):
        self._org_create()
        self.assertTrue(self.organization.user.is_active)

        view = OrganizationProfileViewSet.as_view({'delete': 'destroy'})

        request = self.factory.delete('/', **self.extra)
        response = view(request, user='******')

        self.assertEquals(204, response.status_code)

        self.assertEquals(
            0,
            OrganizationProfile.objects.filter(
                user__username='******').count())
        self.assertEquals(0, User.objects.filter(username='******').count())
コード例 #42
0
    def test_orgs_delete(self):
        self._org_create()
        self.assertTrue(self.organization.user.is_active)

        view = OrganizationProfileViewSet.as_view({
            'delete': 'destroy'
        })

        request = self.factory.delete('/', **self.extra)
        response = view(request, user='******')

        self.assertEquals(204, response.status_code)

        self.assertEquals(0, OrganizationProfile.objects.filter(
            user__username='******').count())
        self.assertEquals(0, User.objects.filter(username='******').count())
コード例 #43
0
    def test_put_role_user_none_existent(self):
        self._org_create()
        newname = 'i-do-no-exist'
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members',
            'put': 'members'
        })

        data = {'username': newname, 'role': 'editor'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
 def test_orgs_get(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({'get': 'retrieve'})
     request = self.factory.get('/', **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 400)
     self.assertEqual(response.data,
                      {'detail': 'Expected URL keyword argument `user`.'})
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', response.data.keys())
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertEqual(type(user['user']), unicode)
コード例 #45
0
    def test_add_members_to_owner_role(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'get': 'retrieve',
            'put': 'members'
        })

        self.profile_data['username'] = "******"
        aboy = self._create_user_profile().user

        data = {'username': '******', 'role': 'owner'}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        self.assertEqual(set(response.data), set([u'denoinc', u'aboy']))

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['users'][1]['user'], 'aboy')
        self.assertEqual(response.data['users'][1]['role'], 'owner')

        owner_team = get_organization_owners_team(self.organization)

        self.assertIn(aboy, owner_team.user_set.all())

        # test user removed from owner team when role changed
        data = {'username': '******', 'role': 'editor'}
        request = self.factory.put('/',
                                   data=json.dumps(data),
                                   content_type="application/json",
                                   **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)

        owner_team = get_organization_owners_team(self.organization)

        self.assertNotIn(aboy, owner_team.user_set.all())
コード例 #46
0
    def test_add_members_to_org(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members'
        })

        self.profile_data['username'] = '******'
        self.profile_data['email'] = '*****@*****.**'
        self._create_user_profile()
        data = {'username': '******'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(set(response.data), set([u'denoinc', u'aboy']))
コード例 #47
0
    def test_org_always_has_admin_or_owner(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'put': 'members',
        })
        data = {'username': self.user.username, 'role': 'editor'}
        request = self.factory.put(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 400)
        self.assertEquals(response.data,
                          {
                              u'non_field_errors':
                                  [u'Organization cannot be without an owner']
                          })
コード例 #48
0
 def test_orgs_get_not_creator(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({'get': 'retrieve'})
     alice_data = {'username': '******', 'email': '*****@*****.**'}
     previous_user = self.user
     self._login_user_and_profile(extra_post_data=alice_data)
     self.assertEqual(self.user.username, 'alice')
     self.assertNotEqual(previous_user, self.user)
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertNotEqual(response.get('Last-Modified'), None)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', response.data.keys())
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertEqual(type(user['user']), unicode)
コード例 #49
0
    def test_add_members_to_owner_role(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members',
            'get': 'retrieve',
            'put': 'members'
        })

        self.profile_data['username'] = "******"
        aboy = self._create_user_profile().user

        data = {'username': '******',
                'role': 'owner'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)

        self.assertEqual(set(response.data), set([u'denoinc', u'aboy']))

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data['users'][1]['user'], 'aboy')
        self.assertEqual(response.data['users'][1]['role'], 'owner')

        owner_team = get_organization_owners_team(self.organization)

        self.assertIn(aboy, owner_team.user_set.all())

        # test user removed from owner team when role changed
        data = {'username': '******', 'role': 'editor'}
        request = self.factory.put(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)

        owner_team = get_organization_owners_team(self.organization)

        self.assertNotIn(aboy, owner_team.user_set.all())
コード例 #50
0
 def test_orgs_get_not_creator(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({'get': 'retrieve'})
     alice_data = {'username': '******', 'email': '*****@*****.**'}
     previous_user = self.user
     self._login_user_and_profile(extra_post_data=alice_data)
     self.assertEqual(self.user.username, 'alice')
     self.assertNotEqual(previous_user, self.user)
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertNotEqual(response.get('Cache-Control'), None)
     self.assertEqual(response.status_code, 200)
     del self.company_data['metadata']
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', list(response.data))
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertTrue(isinstance(user['user'], text))
コード例 #51
0
 def test_orgs_get(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'get': 'retrieve'
     })
     request = self.factory.get('/', **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 400)
     self.assertEqual(
         response.data, {'detail': 'Expected URL keyword argument `user`.'})
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', response.data.keys())
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertEqual(type(user['user']), unicode)
コード例 #52
0
ファイル: test_widget_viewset.py プロジェクト: onaio/onadata
    def test_widget_create_by_org_admin(self):
        self.project.organization = self.organization.user
        self.project.save()
        chuck_data = {'username': '******', 'email': '*****@*****.**'}
        chuck_profile = self._create_user_profile(chuck_data)

        view = OrganizationProfileViewSet.as_view({
            'post': 'members'
        })

        data = {'username': chuck_profile.user.username,
                'role': OwnerRole.name}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user=self.organization.user.username)

        self.assertEqual(response.status_code, 201)

        owners_team = get_organization_owners_team(self.organization)
        self.assertIn(chuck_profile.user, owners_team.user_set.all())

        extra = {
            'HTTP_AUTHORIZATION': 'Token %s' % chuck_profile.user.auth_token}

        view = WidgetViewSet.as_view({
            'post': 'create'
        })

        data = {
            'content_object': 'http://testserver/api/v1/dataviews/%s' %
                              self.data_view.pk,
            'widget_type': "charts",
            'view_type': "horizontal-bar",
            'column': "_submission_time",
        }

        request = self.factory.post('/', data=json.dumps(data),
                                    content_type="application/json",
                                    **extra)
        response = view(request)

        self.assertEquals(response.status_code, 201)
コード例 #53
0
    def test_put_change_role(self):
        self._org_create()
        newname = 'aboy'
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members',
            'put': 'members'
        })

        self.profile_data['username'] = newname
        self._create_user_profile()
        data = {'username': newname}
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(sorted(response.data), sorted([u'denoinc', newname]))

        user_role = 'editor'
        data = {'username': newname, 'role': user_role}
        request = self.factory.put('/',
                                   data=json.dumps(data),
                                   content_type="application/json",
                                   **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(sorted(response.data), sorted([u'denoinc', newname]))

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertIn('users', list(response.data))

        for user in response.data['users']:
            username = user['user']
            role = user['role']
            expected_role = 'owner' if username == 'denoinc' or \
                username == self.user.username else user_role
            self.assertEqual(role, expected_role)
コード例 #54
0
 def test_orgs_get_not_creator(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'get': 'retrieve'
     })
     alice_data = {'username': '******', 'email': '*****@*****.**'}
     previous_user = self.user
     self._login_user_and_profile(extra_post_data=alice_data)
     self.assertEqual(self.user.username, 'alice')
     self.assertNotEqual(previous_user,  self.user)
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertNotEqual(response.get('Last-Modified'), None)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', response.data.keys())
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertEqual(type(user['user']), unicode)
コード例 #55
0
 def test_orgs_get(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'get': 'retrieve'
     })
     request = self.factory.get('/', **self.extra)
     response = view(request)
     self.assertEqual(response.status_code, 400)
     self.assertEqual(
         response.data, {'detail': 'Expected URL keyword argument `user`.'})
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertNotEqual(response.get('Cache-Control'), None)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', list(response.data))
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertTrue(isinstance(user['user'], text))
コード例 #56
0
    def test_add_members_to_org_with_non_member_user(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({'post': 'members'})

        self._create_user_profile(extra_post_data={'username': '******'})
        data = {'username': '******'}
        previous_user = self.user
        alice_data = {'username': '******', 'email': '*****@*****.**'}
        self._login_user_and_profile(extra_post_data=alice_data)
        self.assertEqual(self.user.username, 'alice')
        self.assertNotEqual(previous_user, self.user)
        request = self.factory.post('/',
                                    data=json.dumps(data),
                                    content_type="application/json",
                                    **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 404)
        self.assertNotEqual(set(response.data), set([u'denoinc', u'aboy']))
コード例 #57
0
 def test_orgs_get_not_creator(self):
     self._org_create()
     view = OrganizationProfileViewSet.as_view({
         'get': 'retrieve'
     })
     alice_data = {'username': '******', 'email': '*****@*****.**'}
     previous_user = self.user
     self._login_user_and_profile(extra_post_data=alice_data)
     self.assertEqual(self.user.username, 'alice')
     self.assertNotEqual(previous_user, self.user)
     request = self.factory.get('/', **self.extra)
     response = view(request, user='******')
     self.assertNotEqual(response.get('Cache-Control'), None)
     self.assertEqual(response.status_code, 200)
     del self.company_data['metadata']
     self.assertEqual(response.data, self.company_data)
     self.assertIn('users', list(response.data))
     for user in response.data['users']:
         self.assertEqual(user['role'], 'owner')
         self.assertTrue(isinstance(user['user'], text))
コード例 #58
0
    def test_add_members_to_org_with_non_member_user(self):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members'
        })

        User.objects.create(username='******', )
        data = {'username': '******'}
        previous_user = self.user
        alice_data = {'username': '******', 'email': '*****@*****.**'}
        self._login_user_and_profile(extra_post_data=alice_data)
        self.assertEqual(self.user.username, 'alice')
        self.assertNotEqual(previous_user,  self.user)
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 404)
        self.assertNotEqual(set(response.data), set([u'denoinc', u'aboy']))
コード例 #59
0
    def test_put_change_role(self):
        self._org_create()
        newname = 'aboy'
        view = OrganizationProfileViewSet.as_view({
            'get': 'retrieve',
            'post': 'members',
            'put': 'members'
        })

        self.profile_data['username'] = newname
        self._create_user_profile()
        data = {'username': newname}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertEqual(sorted(response.data), sorted([u'denoinc', newname]))

        user_role = 'editor'
        data = {'username': newname, 'role': user_role}
        request = self.factory.put(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(sorted(response.data), sorted([u'denoinc', newname]))

        # getting profile
        request = self.factory.get('/', **self.extra)
        response = view(request, user='******')
        self.assertEqual(response.status_code, 200)
        self.assertIn('users', response.data.keys())

        for user in response.data['users']:
            username = user['user']
            role = user['role']
            expected_role = 'owner' if username == 'denoinc' else user_role
            self.assertEqual(role, expected_role)
コード例 #60
0
    def test_add_members_to_org_email_custom_subj(self, mock_email):
        self._org_create()
        view = OrganizationProfileViewSet.as_view({
            'post': 'members'
        })

        User.objects.create(username='******', email='*****@*****.**')
        data = {'username': '******',
                'email_msg': 'You have been add to denoinc',
                'email_subject': 'Your are made'}
        request = self.factory.post(
            '/', data=json.dumps(data),
            content_type="application/json", **self.extra)

        response = view(request, user='******')
        self.assertEqual(response.status_code, 201)
        self.assertTrue(mock_email.called)
        mock_email.assert_called_with('Your are made',
                                      u'You have been add to denoinc',
                                      '*****@*****.**',
                                      (u'*****@*****.**',))
        self.assertEqual(set(response.data), set([u'denoinc', u'aboy']))