示例#1
0
    def test_registered_endpoints(self):
        """Test view context with one valid endpoint."""
        url = reverse('django-numerics-index')

        self.create_user()
        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse)

        api.register('number_endpoint',
                     self.number_endpoint,
                     responses.NumberResponse)

        self.client.login(username=self.USERNAME, password=self.PASSWORD)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        endpoint_urls = sorted(response.context[0].get('endpoints'),
                               key=itemgetter('name'))
        expected_urls = [{'help_url': '/help/username/label_endpoint',
                          'name': 'label_endpoint',
                          'url': '/username/label_endpoint'},
                         {'help_url': '/help/username/number_endpoint',
                          'name': 'number_endpoint',
                          'url': '/username/number_endpoint'}]
        self.assertListEqual(endpoint_urls, expected_urls)
    def test_registered_endpoints(self):
        """Test view context with one valid endpoint."""
        url = reverse('django-numerics-index')

        self.create_user()
        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse)

        api.register('number_endpoint',
                     self.number_endpoint,
                     responses.NumberResponse)

        self.client.login(username=self.USERNAME, password=self.PASSWORD)
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        endpoint_urls = sorted(response.context[0].get('endpoints'),
                               key=itemgetter('name'))
        expected_urls = [{'help_url': '/help/username/label_endpoint',
                          'name': 'label_endpoint',
                          'url': '/username/label_endpoint'},
                         {'help_url': '/help/username/number_endpoint',
                          'name': 'number_endpoint',
                          'url': '/username/number_endpoint'}]
        self.assertListEqual(endpoint_urls, expected_urls)
示例#3
0
 def test_valid_endpoint_with_permission_func(self):
     """Test register call with valid endpoint and permission function."""
     name = 'label_endpoint'
     api.register(name,
                  self.label_endpoint,
                  responses.LabelResponse,
                  permission_func=self.always_true)
     endpoint = next(iter(api._CODE_ENDPOINT_MAP.values()))
     self.assertEqual(endpoint.name, name)
     self.assertEqual(endpoint.func, self.label_endpoint)
     self.assertEqual(endpoint.permission_func, self.always_true)
示例#4
0
 def test_valid_endpoint_with_permission_func(self):
     """Test register call with valid endpoint and permission function."""
     name = 'label_endpoint'
     api.register(name,
                  self.label_endpoint,
                  responses.LabelResponse,
                  permission_func=self.always_true)
     endpoint = next(iter(api._CODE_ENDPOINT_MAP.values()))
     self.assertEqual(endpoint.name, name)
     self.assertEqual(endpoint.func, self.label_endpoint)
     self.assertEqual(endpoint.permission_func, self.always_true)
    def test_valid_serialize(self):
        """Test serialize/deserialize with valid data."""
        serializer = self.serializer_class()
        endpoint_name = 'label_endpoint'
        api.register(endpoint_name, self.label_endpoint,
                     responses.LabelResponse)

        user = self.create_user()
        endpoint = api.get_endpoint_by_name(endpoint_name)

        data = (user, endpoint)
        output_data = serializer.deserialize(serializer.serialize(*data))
        self.assertEqual(data, output_data)
示例#6
0
 def test_valid_endpoint(self):
     """Test register call with valid endpoint."""
     name = 'label_endpoint'
     api.register(name, self.label_endpoint, responses.LabelResponse)
     # make sure that values code end name maps have same value.
     self.assertEqual(list(api._CODE_ENDPOINT_MAP.values()),
                      list(api._NAME_ENDPOINT_MAP.values()))
     # make sure there is only one endpoint registered
     self.assertEqual(len(api._CODE_ENDPOINT_MAP.values()), 1)
     endpoint = next(iter(api._CODE_ENDPOINT_MAP.values()))
     self.assertEqual(endpoint.name, name)
     self.assertEqual(endpoint.func, self.label_endpoint)
     self.assertEqual(endpoint.permission_func, api.grant_access)
示例#7
0
 def test_no_granted_endpoints(self):
     """Test endpoints with denied access."""
     user = self.create_user()
     api.register('label_endpoint',
                  self.label_endpoint,
                  responses.LabelResponse,
                  permission_func=self.always_false)
     api.register('number_endpoint',
                  self.number_endpoint,
                  responses.NumberResponse,
                  permission_func=self.always_false)
     endpoints = api.get_endpoints(user)
     expected_endpoints = []
     self.assertEqual(endpoints, expected_endpoints)
示例#8
0
 def test_no_granted_endpoints(self):
     """Test endpoints with denied access."""
     user = self.create_user()
     api.register('label_endpoint',
                  self.label_endpoint,
                  responses.LabelResponse,
                  permission_func=self.always_false)
     api.register('number_endpoint',
                  self.number_endpoint,
                  responses.NumberResponse,
                  permission_func=self.always_false)
     endpoints = api.get_endpoints(user)
     expected_endpoints = []
     self.assertEqual(endpoints, expected_endpoints)
    def test_valid_serialize(self):
        """Test serialize/deserialize with valid data."""
        serializer = self.serializer_class()
        endpoint_name = 'label_endpoint'
        api.register(endpoint_name,
                     self.label_endpoint,
                     responses.LabelResponse)

        user = self.create_user()
        endpoint = api.get_endpoint_by_name(endpoint_name)

        data = (user, endpoint)
        output_data = serializer.deserialize(serializer.serialize(*data))
        self.assertEqual(data, output_data)
示例#10
0
 def test_valid_endpoint(self):
     """Test register call with valid endpoint."""
     name = 'label_endpoint'
     api.register(name,
                  self.label_endpoint,
                  responses.LabelResponse)
     # make sure that values code end name maps have same value.
     self.assertEqual(list(api._CODE_ENDPOINT_MAP.values()),
                      list(api._NAME_ENDPOINT_MAP.values()))
     # make sure there is only one endpoint registered
     self.assertEqual(len(api._CODE_ENDPOINT_MAP.values()), 1)
     endpoint = next(iter(api._CODE_ENDPOINT_MAP.values()))
     self.assertEqual(endpoint.name, name)
     self.assertEqual(endpoint.func, self.label_endpoint)
     self.assertEqual(endpoint.permission_func, api.grant_access)
示例#11
0
    def test_registered_endpoints_with_wrong_return_type(self):
        """Test view context with one valid endpoint."""
        User = get_user_model()
        User.objects.create_user('test', '*****@*****.**', 'test')
        user = User.objects.get()

        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.NumberResponse)

        url = api.get_endpoints(user)[0]['url']

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        resp_json = json.loads(response.content.decode('utf-8'))
        self.assertFalse(resp_json['success'])
示例#12
0
    def test_registered_endpoints_with_wrong_return_type(self):
        """Test view context with one valid endpoint."""
        User = get_user_model()
        User.objects.create_user('test', '*****@*****.**', 'test')
        user = User.objects.get()

        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.NumberResponse)

        url = api.get_endpoints(user)[0]['url']

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        resp_json = json.loads(response.content.decode('utf-8'))
        self.assertFalse(resp_json['success'])
    def test_invalid_serialize(self):
        """Test serialize/deserialize with tempered data."""
        serializer = self.serializer_class()
        endpoint_name = 'label_endpoint'
        api.register(endpoint_name, self.label_endpoint,
                     responses.LabelResponse)

        user = self.create_user()
        endpoint = api.get_endpoint_by_name(endpoint_name)

        data = (user, endpoint)
        serialized_code = serializer.serialize(*data)

        tempered_code = serialized_code + 'X'
        with self.assertRaises(serializers.SerializerException):
            serializer.deserialize(tempered_code)
    def test_invalid_serialize(self):
        """Test serialize/deserialize with tempered data."""
        serializer = self.serializer_class()
        endpoint_name = 'label_endpoint'
        api.register(endpoint_name,
                     self.label_endpoint,
                     responses.LabelResponse)

        user = self.create_user()
        endpoint = api.get_endpoint_by_name(endpoint_name)

        data = (user, endpoint)
        serialized_code = serializer.serialize(*data)

        tempered_code = serialized_code + 'X'
        with self.assertRaises(serializers.SerializerException):
            serializer.deserialize(tempered_code)
示例#15
0
    def test_registered_endpoints(self):
        """Test view context with one valid endpoint."""
        User = get_user_model()
        User.objects.create_user('test', '*****@*****.**', 'test')
        user = User.objects.get()

        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse)

        url = api.get_endpoints(user)[0]['url']

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        resp_json = json.loads(response.content.decode('utf-8'))
        expected_json = {'data': {'value': 'label_val'},
                         'postfix': 'postfix_label'}
        self.assertEqual(resp_json, expected_json)
示例#16
0
    def test_one_granted_endpoints(self):
        """Test endpoints with one granted, one denied access."""
        user = self.create_user()
        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse,
                     permission_func=self.always_true)
        api.register('number_endpoint',
                     self.number_endpoint,
                     responses.NumberResponse,
                     permission_func=self.always_false)
        endpoints = sorted(api.get_endpoints(user),
                           key=itemgetter('name'))

        expected_endpoints = [{'help_url': '/help/username/label_endpoint',
                               'name': 'label_endpoint',
                               'url': '/username/label_endpoint'}]
        self.assertEqual(endpoints, expected_endpoints)
示例#17
0
    def test_valid_endpoint_register_twice_with_permission_func(self):
        """Test register call with valid endpoint and permission function.

        This time endpoint will be registered twice and it will be with
        different permission function. In that case, we will use the first one
        registered.

        """
        name = 'label_endpoint'
        api.register(name,
                     self.label_endpoint,
                     responses.LabelResponse,
                     permission_func=self.always_true)
        api.register(name, self.number_endpoint, responses.LabelResponse)
        endpoint = next(iter(api._CODE_ENDPOINT_MAP.values()))
        self.assertEqual(endpoint.name, name)
        self.assertEqual(endpoint.func, self.label_endpoint)
        self.assertEqual(endpoint.permission_func, self.always_true)
示例#18
0
    def test_registered_endpoints(self):
        """Test view context with one valid endpoint."""
        User = get_user_model()
        User.objects.create_user('test', '*****@*****.**', 'test')
        user = User.objects.get()

        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse)

        url = api.get_endpoints(user)[0]['url']

        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        resp_json = json.loads(response.content.decode('utf-8'))
        expected_json = {'data': {'value': 'label_val'},
                         'postfix': 'postfix_label'}
        self.assertEqual(resp_json, expected_json)
示例#19
0
    def test_one_registered_endpoint_no_user(self):
        """Test view context with one valid endpoint.

        this time there will not be any logged in users. Default
        permission function will filter all the results. As a result,
        this request will return http404
        """
        url = reverse('django-numerics-index')

        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse)

        api.register('number_endpoint',
                     self.number_endpoint,
                     responses.NumberResponse)

        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)
示例#20
0
    def test_one_registered_endpoint_no_user(self):
        """Test view context with one valid endpoint.

        this time there will not be any logged in users. Default
        permission function will filter all the results. As a result,
        this request will return http404
        """
        url = reverse('django-numerics-index')

        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse)

        api.register('number_endpoint',
                     self.number_endpoint,
                     responses.NumberResponse)

        response = self.client.get(url)
        self.assertEqual(response.status_code, 404)
示例#21
0
    def test_one_granted_endpoints(self):
        """Test endpoints with one granted, one denied access."""
        user = self.create_user()
        api.register('label_endpoint',
                     self.label_endpoint,
                     responses.LabelResponse,
                     permission_func=self.always_true)
        api.register('number_endpoint',
                     self.number_endpoint,
                     responses.NumberResponse,
                     permission_func=self.always_false)
        endpoints = sorted(api.get_endpoints(user), key=itemgetter('name'))

        expected_endpoints = [{
            'help_url': '/help/username/label_endpoint',
            'name': 'label_endpoint',
            'url': '/username/label_endpoint'
        }]
        self.assertEqual(endpoints, expected_endpoints)
示例#22
0
    def test_valid_endpoint_register_twice_with_permission_func(self):
        """Test register call with valid endpoint and permission function.

        This time endpoint will be registered twice and it will be with
        different permission function. In that case, we will use the first one
        registered.

        """
        name = 'label_endpoint'
        api.register(name,
                     self.label_endpoint,
                     responses.LabelResponse,
                     permission_func=self.always_true)
        api.register(name,
                     self.number_endpoint,
                     responses.LabelResponse)
        endpoint = next(iter(api._CODE_ENDPOINT_MAP.values()))
        self.assertEqual(endpoint.name, name)
        self.assertEqual(endpoint.func, self.label_endpoint)
        self.assertEqual(endpoint.permission_func, self.always_true)
示例#23
0
    Info includes name of the job and total time spent for this job.
    If there is no active log, 'Not Working' will be returned.
    """
    logs = user.log_set.filter(finish__isnull=True)[:1]
    if logs:
        log = logs[0]
        result = LabelResponse(log.job.name,
                               log.get_duration_display())
    else:
        log = user.log_set.latest()
        result = LabelResponse('Not Working',
                               str(timezone.localtime(log.start).date()))

    return result


def total_users(user):
    """Return total number of users."""
    user_count = User.objects.filter(is_active=True).count()

    return NumberResponse(user_count, 'Total number of users')


register('total-users', total_users, NumberResponse)
register('last-day-hours', last_day_hours, LabelResponse)
register('last-month-hours', last_month_hours, LabelResponse)
register('previous-month-hours', previous_month_hours, LabelResponse,
         cache_timeout=60*60)  # one hour
register('current-job', current_job, LabelResponse)
示例#24
0
    Info includes name of the job and total time spent for this job.
    If there is no active log, 'Not Working' will be returned.
    """
    logs = user.log_set.filter(finish__isnull=True)[:1]
    if logs:
        log = logs[0]
        result = LabelResponse(log.job.name, log.get_duration_display())
    else:
        log = user.log_set.latest()
        result = LabelResponse('Not Working',
                               str(timezone.localtime(log.start).date()))

    return result


def total_users(user):
    """Return total number of users."""
    user_count = User.objects.filter(is_active=True).count()

    return NumberResponse(user_count, 'Total number of users')


register('total-users', total_users, NumberResponse)
register('last-day-hours', last_day_hours, LabelResponse)
register('last-month-hours', last_month_hours, LabelResponse)
register('previous-month-hours',
         previous_month_hours,
         LabelResponse,
         cache_timeout=60 * 60)  # one hour
register('current-job', current_job, LabelResponse)