コード例 #1
0
    def test_delete(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )

        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        resp = self.client.delete(url)
        self.assertEqual(resp.status_code, 204, resp.content.decode())

        behavior = get_group_model().objects.filter(id=behavior.id).first()
        self.assertIsNone(behavior)
コード例 #2
0
ファイル: test_views.py プロジェクト: Korriliam/django-scim2
    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')
コード例 #3
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)
コード例 #4
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')
コード例 #5
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)
コード例 #6
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)
コード例 #7
0
ファイル: test_views.py プロジェクト: Korriliam/django-scim2
    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, 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.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)
コード例 #8
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)
コード例 #9
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())
コード例 #10
0
    def test_groups(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)
        ford = get_user_adapter()(ford)

        expected = [{
            'display': u'Behavior Group',
            'value': '1',
            '$ref': u'https://localhost/scim/v2/Groups/1',
        }]

        self.assertEqual(ford.groups, expected)
コード例 #11
0
ファイル: test_views.py プロジェクト: Korriliam/django-scim2
    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)

        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)
コード例 #12
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)
コード例 #13
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)
コード例 #14
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 = {
            'schemas': [constants.SchemaURI.USER],
            'userName':
            '******',
            'meta': {
                'resourceType': 'User',
                'lastModified':
                ford.date_joined.isoformat(timespec='milliseconds'),
                'location': u'https://localhost/scim/v2/Users/1',
                'created': ford.date_joined.isoformat(timespec='milliseconds'),
            },
            'displayName':
            u'Robert Ford',
            'name': {
                'givenName': 'Robert',
                'familyName': 'Ford',
            },
            'groups': [{
                'display': u'Behavior Group',
                'value': '1',
                '$ref': u'https://localhost/scim/v2/Groups/1'
            }],
            'active':
            True,
            'id':
            '1',
            'emails': [{
                'primary': True,
                'value': '*****@*****.**'
            }],
        }

        ford = get_user_adapter()(ford, self.request)
        self.assertEqual(ford.to_dict(), expected)
コード例 #15
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)
コード例 #16
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.groups.add(behavior)

        behavior = get_group_adapter()(behavior)

        url = reverse('scim:groups', kwargs={'uuid': behavior.id})
        resp = self.client.get(url, content_type='application/scim+json')
        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)
コード例 #17
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)
コード例 #18
0
ファイル: test_views.py プロジェクト: Korriliam/django-scim2
    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_patch_atomic(self):
        behavior = get_group_model().objects.create(name='Behavior Group', )
        ids = list(get_user_model().objects.all().values_list(
            'id', flat=True)) or [0]
        max_id = max(ids)

        data = {
            'schemas': ['urn:ietf:params:scim:api:messages:2.0:PatchOp'],
            'Operations': [
                {
                    'op': 'replace',
                    'path': 'name',
                    'value': [{
                        'value': 'Way better Behavior Group Name'
                    }]
                },
                # Adding a non-existent user should cause this PATCH to fail
                {
                    'op': 'add',
                    'path': 'members',
                    'value': [{
                        'value': max_id + 1
                    }]
                }
            ]
        }
        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, 400, resp.content.decode())

        behavior.refresh_from_db()
        self.assertEqual(behavior.name, 'Behavior Group')
コード例 #20
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')