Пример #1
0
    def test_get_all_groups_with_extra_model_exclude_kwargs(self, func):
        """
        Test GET /Users with extra model exclude filters.
        """
        # define kwargs returned by a call to get_extra_exclude_kwargs
        func.return_value = {'name': 'Behavior Group'}

        get_group_model().objects.create(name='Behavior Group', )

        security = get_group_model().objects.create(name='Security Group', )
        security = get_group_adapter()(security, self.request)

        url = reverse('scim:groups')
        resp = self.client.get(url, content_type=constants.SCIM_CONTENT_TYPE)
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        result = json.loads(resp.content.decode())
        expected = {
            "schemas": [constants.SchemaURI.LIST_RESPONSE],
            "totalResults": 1,
            "itemsPerPage": 50,
            "startIndex": 1,
            'Resources': [
                security.to_dict(),
            ],
        }
        self.assertEqual(expected, result)
Пример #2
0
    def test_to_dict(self):
        behavior = get_group_model().objects.create(
            name='Behavior Group',
            scim_external_id='ww.bg',
        )
        ford = get_user_model().objects.create(
            first_name='Robert',
            last_name='Ford',
            username='******',
            email='*****@*****.**',
        )
        ford.scim_groups.add(behavior)

        expected = {
            'meta': {
                'resourceType': 'Group',
                'location': u'https://localhost/scim/v2/Groups/1'
            },
            'displayName':
            'Behavior Group',
            'id':
            '1',
            'members': [{
                'display': u'Robert Ford',
                'value': '1',
                '$ref': u'https://localhost/scim/v2/Users/1'
            }],
            'schemas': [constants.SchemaURI.GROUP],
            'externalId':
            'ww.bg',
        }

        behavior = get_group_adapter()(behavior, self.request)
        self.assertEqual(behavior.to_dict(), expected)
Пример #3
0
    def test_patch_replace(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )

        data = {
            'schemas': [constants.SchemaURI.PATCH_OP],
            'Operations': [{
                'op':
                'replace',
                'path':
                'name',
                'value': [{
                    'value': 'Way better Behavior Group Name'
                }]
            }]
        }
        data = json.dumps(data)

        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        resp = self.client.patch(url,
                                 data=data,
                                 content_type=constants.SCIM_CONTENT_TYPE)
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        behavior.refresh_from_db()

        result = json.loads(resp.content.decode())
        expected = get_group_adapter()(behavior, self.request).to_dict()
        self.assertEqual(expected, result)

        self.assertEqual(behavior.name, 'Way better Behavior Group Name')
Пример #4
0
    def test_to_dict(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        ford = get_user_model().objects.create(
            first_name='Robert',
            last_name='Ford',
            username='******',
            email='*****@*****.**',
        )
        ford.groups.add(behavior)

        expected = {
            'meta': {
                'resourceType': 'Group',
                'location': u'https://localhost/scim/v2/Groups/1'
            },
            'displayName':
            'Behavior Group',
            'id':
            '1',
            'members': [{
                'display': u'Robert Ford',
                'value': '1',
                '$ref': u'https://localhost/scim/v2/Users/1'
            }],
            'schemas': ['urn:ietf:params:scim:schemas:core:2.0:Group']
        }

        behavior = get_group_adapter()(behavior)
        self.assertEqual(behavior.to_dict(), expected)
Пример #5
0
    def test_patch_replace(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )

        data = {
            'schemas': ['urn:ietf:params:scim:api:messages:2.0:PatchOp'],
            'Operations': [{
                'op':
                'replace',
                'path':
                'name',
                'value': [{
                    'value': 'Way better Behavior Group Name'
                }]
            }]
        }
        data = json.dumps(data)

        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        resp = self.client.patch(url,
                                 data=data,
                                 content_type='application/scim+json')
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        behavior.refresh_from_db()

        result = json.loads(resp.content.decode())
        expected = get_group_adapter()(behavior).to_dict()
        self.assertEqual(expected, result)

        self.assertEqual(behavior.name, 'Way better Behavior Group Name')
Пример #6
0
    def test_put(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        data = get_group_adapter()(behavior).to_dict()
        data['displayName'] = 'Better Behavior Group'
        body = json.dumps(data)
        resp = self.client.put(url, body, content_type='application/scim+json')
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        # test object
        behavior.refresh_from_db()
        self.assertEqual(behavior.name, 'Better Behavior Group')

        # test response
        result = json.loads(resp.content.decode())
        behavior = get_group_adapter()(behavior)
        self.assertEqual(result, behavior.to_dict())
Пример #7
0
    def test_meta(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        behavior = get_group_adapter()(behavior)

        expected = {
            'resourceType': 'Group',
            'location': u'https://localhost/scim/v2/Groups/1'
        }

        self.assertEqual(behavior.meta, expected)
Пример #8
0
 def test_get_all(self):
     url = reverse('scim:resource-types')
     resp = self.client.get(url)
     self.assertEqual(resp.status_code, 200, resp.content.decode())
     user_type = get_user_adapter().resource_type_dict()
     group_type = get_group_adapter().resource_type_dict()
     key = lambda o: o.get('id')  # noqa: 731
     expected = {
         'schemas': [constants.SchemaURI.LIST_RESPONSE],
         'Resources': list(sorted((user_type, group_type), key=key)),
     }
     result = json.loads(resp.content.decode())
     self.assertEqual(expected, result)
Пример #9
0
 def test_get_all(self):
     url = reverse('scim:resource-types')
     resp = self.client.get(url)
     self.assertEqual(resp.status_code, 200, resp.content.decode())
     user_type = get_user_adapter().resource_type_dict()
     group_type = get_group_adapter().resource_type_dict()
     key = lambda o: o.get('id')
     expected = {
         'schemas': ['urn:ietf:params:scim:api:messages:2.0:ListResponse'],
         'Resources': list(sorted((user_type, group_type), key=key)),
     }
     result = json.loads(resp.content.decode())
     self.assertEqual(expected, result)
Пример #10
0
    def test_get_all_groups(self):
        """
        Test GET /Groups
        """
        behavior = get_group_model().objects.create(name='Behavior Group', )
        ford = get_user_model().objects.create(
            first_name='Robert',
            last_name='Ford',
            username='******',
        )
        ford.scim_groups.add(behavior)
        behavior = get_group_adapter()(behavior, self.request)

        security = get_group_model().objects.create(name='Security Group', )
        abernathy = get_user_model().objects.create(
            first_name='Dolores',
            last_name='Abernathy',
            username='******',
        )
        abernathy.scim_groups.add(security)
        security = get_group_adapter()(security, self.request)

        url = reverse('scim:groups')
        resp = self.client.get(url, content_type=constants.SCIM_CONTENT_TYPE)
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        result = json.loads(resp.content.decode())
        expected = {
            "schemas": [constants.SchemaURI.LIST_RESPONSE],
            "totalResults": 2,
            "itemsPerPage": 50,
            "startIndex": 1,
            'Resources': [
                behavior.to_dict(),
                security.to_dict(),
            ],
        }
        self.assertEqual(expected, result)
Пример #11
0
    def test_get_all_groups(self):
        """
        Test GET /Groups
        """
        behavior = get_group_model().objects.create(name='Behavior Group', )
        ford = get_user_model().objects.create(
            first_name='Robert',
            last_name='Ford',
            username='******',
        )
        ford.groups.add(behavior)
        behavior = get_group_adapter()(behavior)

        security = get_group_model().objects.create(name='Security Group', )
        abernathy = get_user_model().objects.create(
            first_name='Dolores',
            last_name='Abernathy',
            username='******',
        )
        abernathy.groups.add(security)
        security = get_group_adapter()(security)

        url = reverse('scim:groups')
        resp = self.client.get(url, content_type='application/scim+json')
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        result = json.loads(resp.content.decode())
        expected = {
            "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
            "totalResults": 2,
            "itemsPerPage": 50,
            "startIndex": 1,
            'Resources': [
                behavior.to_dict(),
                security.to_dict(),
            ],
        }
        self.assertEqual(expected, result)
Пример #12
0
    def test_patch_remove(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        ford = get_user_model().objects.create(
            first_name='Robert',
            last_name='Ford',
            username='******',
        )
        ford.groups.add(behavior)
        abernathy = get_user_model().objects.create(
            first_name='Dolores',
            last_name='Abernathy',
            username='******',
        )
        abernathy.groups.add(behavior)
        scim_abernathy = get_user_adapter()(abernathy)

        data = {
            'schemas': ['urn:ietf:params:scim:api:messages:2.0:PatchOp'],
            'Operations': [{
                'op':
                'remove',
                'path':
                'members',
                'value': [
                    {
                        'value': ford.id
                    },
                    {
                        'value': abernathy.id
                    },
                ]
            }]
        }
        data = json.dumps(data)

        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        resp = self.client.patch(url,
                                 data=data,
                                 content_type='application/scim+json')
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        result = json.loads(resp.content.decode())
        expected = get_group_adapter()(behavior).to_dict()
        self.assertEqual(expected, result)

        self.assertEqual(behavior.user_set.count(), 0)
Пример #13
0
    def test_patch_remove(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        ford = get_user_model().objects.create(
            first_name='Robert',
            last_name='Ford',
            username='******',
        )
        ford.scim_groups.add(behavior)
        abernathy = get_user_model().objects.create(
            first_name='Dolores',
            last_name='Abernathy',
            username='******',
        )
        abernathy.scim_groups.add(behavior)

        data = {
            'schemas': [constants.SchemaURI.PATCH_OP],
            'Operations': [{
                'op':
                'remove',
                'path':
                'members',
                'value': [
                    {
                        'value': ford.id
                    },
                    {
                        'value': abernathy.id
                    },
                ]
            }]
        }
        data = json.dumps(data)

        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        resp = self.client.patch(url,
                                 data=data,
                                 content_type=constants.SCIM_CONTENT_TYPE)
        self.assertEqual(resp.status_code, 200, resp.content.decode())

        result = json.loads(resp.content.decode())
        expected = get_group_adapter()(behavior, self.request).to_dict()
        self.assertEqual(expected, result)

        self.assertEqual(behavior.user_set.count(), 0)
Пример #14
0
    def groups(self):
        """
        Return the groups of the user per the SCIM spec.
        """

        group_qs = Group.objects.filter(members__member=self.obj)
        scim_groups = [get_group_adapter()(g, self.request) for g in group_qs]

        dicts = []
        for group in scim_groups:
            d = {
                'value': group.scim_id,
                '$ref': group.location,
                'display': group.display_name,
            }
            dicts.append(d)

        return dicts
Пример #15
0
    def test_resource_type_dict(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        behavior = get_group_adapter()(behavior, self.request)

        expected = {
            'endpoint': u'/scim/v2/Groups',
            'description': 'Group',
            'name': 'Group',
            'meta': {
                'resourceType': 'ResourceType',
                'location': u'https://localhost/scim/v2/ResourceTypes/Group'
            },
            'schemas': [constants.SchemaURI.RESOURCE_TYPE],
            'id': 'Group',
            'schema': constants.SchemaURI.GROUP
        }

        self.assertEqual(behavior.resource_type_dict(), expected)
Пример #16
0
    def test_resource_type_dict(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        behavior = get_group_adapter()(behavior)

        expected = {
            'endpoint': u'/scim/v2/Groups',
            'description': 'Group',
            'name': 'Group',
            'meta': {
                'resourceType': 'ResourceType',
                'location': u'https://localhost/scim/v2/ResourceTypes/Group'
            },
            'schemas': ['urn:ietf:params:scim:schemas:core:2.0:ResourceType'],
            'id': 'Group',
            'schema': 'urn:ietf:params:scim:schemas:core:2.0:Group'
        }

        self.assertEqual(behavior.resource_type_dict(), expected)
Пример #17
0
    def test_members(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        ford = get_user_model().objects.create(
            first_name='Robert',
            last_name='Ford',
            username='******',
            email='*****@*****.**',
        )
        ford.groups.add(behavior)

        behavior = get_group_adapter()(behavior)

        expected = [{
            'display': u'Robert Ford',
            'value': '1',
            '$ref': u'https://localhost/scim/v2/Users/1'
        }]

        self.assertEqual(behavior.members, expected)
Пример #18
0
    def test_post(self):
        url = reverse('scim:groups')
        data = {
            'schemas': [constants.SchemaURI.GROUP],
            'displayName': 'Behavior Group',
        }
        body = json.dumps(data)
        resp = self.client.post(url,
                                body,
                                content_type=constants.SCIM_CONTENT_TYPE)
        self.assertEqual(resp.status_code, 201, resp.content.decode())

        # test object exists
        behavior = get_group_model().objects.get(name='Behavior Group')

        # test response
        behavior = get_group_adapter()(behavior, self.request)
        result = json.loads(resp.content.decode())
        self.assertEqual(result, behavior.to_dict())
        self.assertEqual(resp['Location'], behavior.location)
Пример #19
0
    def test_get_group_by_id(self):
        """
        Test GET /Group/{id}
        """
        behavior = get_group_model().objects.create(name='Behavior Group', )

        ford = get_user_model().objects.create(first_name='Robert',
                                               last_name='Ford')
        ford.scim_groups.add(behavior)

        behavior = get_group_adapter()(behavior, self.request)

        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        resp = self.client.get(url, content_type=constants.SCIM_CONTENT_TYPE)
        self.assertEqual(resp.status_code, 200, resp.content.decode())
        self.assertEqual(resp['Location'], behavior.location)

        result = json.loads(resp.content.decode())
        expected = behavior.to_dict()
        self.assertEqual(expected, result)
Пример #20
0
    def test_post(self):
        url = reverse('scim:groups')
        data = {
            'schemas': ['urn:ietf:params:scim:schemas:core:2.0:Group'],
            'displayName': 'Behavior Group',
        }
        body = json.dumps(data)
        resp = self.client.post(url,
                                body,
                                content_type='application/scim+json')
        self.assertEqual(resp.status_code, 201, resp.content.decode())

        # test object exists
        behavior = get_group_model().objects.get(name='Behavior Group')

        # test response
        behavior = get_group_adapter()(behavior)
        result = json.loads(resp.content.decode())
        self.assertEqual(result, behavior.to_dict())
        self.assertEqual(resp['Location'], behavior.location)
Пример #21
0
 def test_display_name(self):
     behavior = get_group_model().objects.create(name='Behavior Group', )
     behavior = get_group_adapter()(behavior)
     self.assertEqual(behavior.display_name, 'Behavior Group')