Beispiel #1
0
    def save(self):
        schema = copy(self.SCHEMA)
        for param in schema:
            attribute_value = getattr(self, param)
            if attribute_value is not None:
                schema[param] = attribute_value

        if self.is_new_record:
            response = API.create(self.__class__.name(), schema)
            for attr in response:
                setattr(self, attr, response[attr])
        else:
            API.update(self.__class__.name(), self.Id, schema)

        return True
Beispiel #2
0
 def promote_team_admin(self, user):
     return API.update_sub_resource(
         self.__class__.name(),
         self.Id,
         'admins',
         user.Id
     )
Beispiel #3
0
 def demote_team_admin(self, user):
     return API.remove_sub_resource(
         self.__class__.name(),
         self.Id,
         'admins',
         user.Id
     )
    def test_all(self, request):
        request.side_effect = [
            Mock(
                status_code=200,
                text=
                '[{\"Id\":\"znJcFaXqfWc2\",\"UserName\":\"[email protected]\"}]'
            ),
            Mock(
                status_code=200,
                text=
                '[{\"Id\":\"znJcFtPqfWc2\",\"UserName\":\"[email protected]\"}]'
            ),
            Mock(
                status_code=200,
                text=
                '[{\"Id\":\"znJcFwLlfWc2\",\"UserName\":\"[email protected]\"}]'
            ),
            Mock(status_code=200, text='[]')
        ]

        eq_(API().all('pies'), [{
            'UserName': '******',
            'Id': 'znJcFaXqfWc2'
        }, {
            'UserName': '******',
            'Id': 'znJcFtPqfWc2'
        }, {
            'UserName': '******',
            'Id': 'znJcFwLlfWc2'
        }])
Beispiel #5
0
 def remove_teams(self):
     return API.remove_sub_resource(
         self.__class__.name(),
         self.Id,
         'teams',
         None
     )
Beispiel #6
0
 def remove_user(self, user):
     return API.remove_sub_resource(
         self.__class__.name(),
         self.Id,
         'users',
         user.Id
     )
    def test_get_sub_resource(self, request):
        request.side_effect = [
            Mock(
                status_code=200,
                text='[{\"Id\": \"fgUr3\", \"Name\": \"Charlie\"},{\"Id\": \"fgUr2\", \"Name\": \"John\"}]'
            ),
            Mock(
                status_code=200,
                text='[]'
            ),
        ]

        eq_(
            API.get_sub_resource('pies', 'wsGty', 'eaters'),
            [
                {'Id': 'fgUr3', 'Name': 'Charlie'},
                {'Id': 'fgUr2', 'Name': 'John'},
            ]
        )
        calls = [
            call(
                'GET',
                'https://api.litmos.com/v1.svc/pies/wsGty/eaters?source=app-name-123&format=json&limit=200',
                headers={'apikey': 'api-key-123'}),
            call(
                 'GET',
                 'https://api.litmos.com/v1.svc/pies/wsGty/eaters?source=app-name-123&format=json&limit=200&start=200',
                 headers={'apikey': 'api-key-123'}),
        ]
        request.assert_has_calls(calls)
Beispiel #8
0
 def promote_team_leader(self, user):
     return API.update_sub_resource(
         self.__class__.name(),
         self.Id,
         'leaders',
         user.Id
     )
Beispiel #9
0
    def test_update(self, request):
        request.return_value = Mock(status_code=200, text='[]')

        eq_(API.update('pies', '12345', {'Name': 'Cheese & Onion'}), [])
        request.assert_called_once_with(
            'PUT',
            'https://api.litmos.com/v1.svc/pies/12345?apikey=api-key-123&source=app-name-123&format=json',
            json={'Name': 'Cheese & Onion'})
Beispiel #10
0
    def test_delete(self, request):
        request.return_value = Mock(status_code=200, text='')

        assert_true(API.delete('pies', 'wsGty'))
        request.assert_called_once_with(
            'DELETE',
            'https://api.litmos.com/v1.svc/pies/wsGty?apikey=api-key-123&source=app-name-123&format=json'
        )
Beispiel #11
0
    def create(cls, attributes):
        schema = copy(cls.SCHEMA)
        for param in schema:
            attribute_value = attributes.get(param, None)
            if attribute_value:
                schema[param] = attribute_value

        return cls._parse_response(API.create(cls.name(), schema))
Beispiel #12
0
    def test_perform_request(self, request):
        request.return_value = Mock(
            status_code=200,
            text=''
        )

        API._perform_request(
            'POST',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters?apikey=api-key-123&source=app-name-123&format=json',
            json={'Id': '', 'Name': 'Charlie'}
        )

        request.assert_called_once_with(
            'POST',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters?apikey=api-key-123&source=app-name-123&format=json',
            json={'Id': '', 'Name': 'Charlie'}
        )
Beispiel #13
0
 def sub_teams(self):
     return self._parse_response(
         API.get_sub_resource(
             self.__class__.name(),
             self.Id,
             self.__class__.name()
         )
     )
Beispiel #14
0
 def admins(self):
     return User._parse_response(
         API.get_sub_resource(
             self.__class__.name(),
             self.Id,
             'admins'
         )
     )
Beispiel #15
0
 def leaders(self):
     return User._parse_response(
         API.get_sub_resource(
             self.__class__.name(),
             self.Id,
             'leaders'
         )
     )
Beispiel #16
0
    def test_perform_request_bad_response(self, request):
        response_mock = Mock()
        response_mock.raise_for_status.side_effect = HTTPError()

        request.return_value = response_mock

        API._perform_request(
            'POST',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters?apikey=api-key-123&source=app-name-123&format=json',
            json={'Id': '', 'Name': 'Charlie'}
        )

        request.assert_called_once_with(
            'POST',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters?apikey=api-key-123&source=app-name-123&format=json',
            json={'Id': '', 'Name': 'Charlie'}
        )
Beispiel #17
0
 def courses(self):
     return Course._parse_response(
         API.get_sub_resource(
             self.__class__.name(),
             self.Id,
             'courses'
         )
     )
    def test_create(self, request):
        request.return_value = Mock(status_code=200, text='[]')

        eq_(API.create('pies', {'Name': 'Cheese & Onion'}), [])
        request.assert_called_once_with(
            'POST',
            'https://api.litmos.com/v1.svc/pies?source=app-name-123&format=json',
            headers={'apikey': 'api-key-123'},
            json={'Name': 'Cheese & Onion'})
Beispiel #19
0
 def update_advanced_custom_fields(self, data: list):
     '''Takes a list of dictionaries in the format {'<FIELDNAME>':'<VALUE>'}.
     Advanced custom userfields may not be enabled by default'''
     return API.add_sub_resource(
         self.__class__.name(),
         self.Id,
         'usercustomfields',
         data
     )
    def test_delete_sub_resource(self, request):
        request.return_value = Mock(status_code=200, text='')

        assert_true(
            API.remove_sub_resource('pies', 'wsGty', 'eaters', 'ws2123'))
        request.assert_called_once_with(
            'DELETE',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters/ws2123?source=app-name-123&format=json',
            headers={'apikey': 'api-key-123'},
        )
Beispiel #21
0
    def test_get_single_resource(self, request):
        request.return_value = Mock(
            status_code=200,
            text='{\"Id\":\"znJcFwQqfWc2\",\"UserName\":\"[email protected]\"}'
        )

        eq_(API().find('pies', '345'), {'UserName': '******', 'Id': 'znJcFwQqfWc2'})
        request.assert_called_once_with(
            'GET',
            'https://api.litmos.com/v1.svc/pies/345?apikey=api-key-123&source=app-name-123&format=json'
        )
Beispiel #22
0
    def test_search(self, request):
        request.return_value = Mock(
            status_code=200,
            text='[{\"Id\":\"znJcFwQqfWc2\",\"UserName\":\"[email protected]\"}]'
        )

        eq_(API.search('pies', 'farqhuar'), [{'UserName': '******', 'Id': 'znJcFwQqfWc2'}])
        request.assert_called_once_with(
            'GET',
            'https://api.litmos.com/v1.svc/pies?apikey=api-key-123&source=app-name-123&format=json&search=farqhuar'
        )
    def test_update_sub_resource(self, request):
        request.return_value = Mock(status_code=200, text='[]')

        eq_(
            API.update_sub_resource('pies', None, 'chips', 'five',
                                    {'Name': 'Cheese & Onion'}), [])
        request.assert_called_once_with(
            'PUT',
            'https://api.litmos.com/v1.svc/pies/chips/five?source=app-name-123&format=json',
            headers={'apikey': 'api-key-123'},
            json={'Name': 'Cheese & Onion'})
Beispiel #24
0
    def add_sub_team(self, sub_team):
        schema = copy(self.SCHEMA)
        for param in schema:
            attribute_value = getattr(sub_team, param)
            if attribute_value is not None:
                schema[param] = attribute_value

        sub_team = self._parse_response(
            API.add_sub_resource(self.__class__.name(), self.Id,
                                 self.__class__.name(), schema))

        return sub_team.Id
Beispiel #25
0
    def add_users(self, users):
        user_list = []
        for user in users:
            schema = copy(self.USER_SCHEMA)
            for param in schema:
                attribute_value = getattr(user, param)
                if attribute_value is not None:
                    schema[param] = attribute_value

            user_list.append(schema)

        return API.add_sub_resource(self.__class__.name(), self.Id,
                                    User.name(), user_list)
Beispiel #26
0
    def test_add_sub_resource(self, request):
        request.return_value = Mock(
            status_code=201,
            text='{\"Id\": \"1234rf\", \"Name\": \"Charlie\"}'
        )

        eq_(
            API.add_sub_resource('pies', 'wsGty', 'eaters', {'Id': '', 'Name': 'Charlie'}),
            {'Id': '1234rf', 'Name': 'Charlie'}
        )
        request.assert_called_once_with(
            'POST',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters?apikey=api-key-123&source=app-name-123&format=json',
            json={'Id': '', 'Name': 'Charlie'}
        )
Beispiel #27
0
    def test_get_sub_resource(self, request):
        request.return_value = Mock(
            status_code=200,
            text='[{\"Id\": \"fgUr3\", \"Name\": \"Charlie\"},{\"Id\": \"fgUr2\", \"Name\": \"John\"}]'
        )

        eq_(
            API.get_sub_resource('pies', 'wsGty', 'eaters'),
            [
                {'Id': 'fgUr3', 'Name': 'Charlie'},
                {'Id': 'fgUr2', 'Name': 'John'}
            ]
        )
        request.assert_called_once_with(
            'GET',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters?apikey=api-key-123&source=app-name-123&format=json'
        )
Beispiel #28
0
    def unassign_courses(self, courses):
        course_list = []
        for course in courses:
            schema = copy(self.COURSE_SCHEMA)
            for param in schema:
                attribute_value = getattr(course, param)
                if attribute_value is not None:
                    schema[param] = attribute_value

            course_list.append(schema)

        return API.remove_sub_resources(
            self.__class__.name(),
            self.Id,
            'courses',
            course_list
        )
Beispiel #29
0
    def module_complete(self, module_id, attributes):
        attributes['CourseId'] = self.Id

        iso_8601_date = attributes['UpdatedAt']

        updated_at_datetime = datetime.datetime.strptime(iso_8601_date, '%Y-%m-%dT%H:%M:%S.%fZ')

        epoch_datetime = int(updated_at_datetime.timestamp() * 1000)

        attributes['UpdatedAt'] = "/Date({0})/".format(epoch_datetime)

        return API.update_sub_resource(
            'results',
            None,
            'modules',
            module_id,
            attributes
        )
Beispiel #30
0
    def test_add_sub_resource_list(self, request):
        request.return_value = Mock(status_code=201, text='')

        result = API.add_sub_resource('pies', 'wsGty', 'eaters', [
            OrderedDict([('Id', 'wser4351'), ('UserName', 'paul.smith1'),
                         ('FirstName', 'Paul1'), ('LastName', 'Smith1')]),
            OrderedDict([('Id', 'wser435'), ('UserName', 'paul.smith'),
                         ('FirstName', 'Paul'), ('LastName', 'Smith')])
        ]),

        assert_true(result)

        request.assert_called_once_with(
            'POST',
            'https://api.litmos.com/v1.svc/pies/wsGty/eaters?apikey=api-key-123&source=app-name-123&format=json',
            json=[
                OrderedDict([('Id', 'wser4351'), ('UserName', 'paul.smith1'),
                             ('FirstName', 'Paul1'), ('LastName', 'Smith1')]),
                OrderedDict([('Id', 'wser435'), ('UserName', 'paul.smith'),
                             ('FirstName', 'Paul'), ('LastName', 'Smith')])
            ])