def test_requests_view_handles_ajax_requests_with_priority_param(self): ''' Test requests view handles ajax requests with priority param correctly and sends requests ordered first by priority and then by timestamp. ''' # Priority with value 1 == sort by priority descending db_requests = Request.objects.all().order_by( '-priority', '-timestamp')[:10] for db_r in db_requests: db_r.timestamp = to_ecma_date_string(db_r.timestamp) response = self.send_ajax_request(dict(id=1, priority=1)) data = self.validate_recieved_json_response(response) requests = json.loads(data['requests']) for r, db_r in zip(requests, db_requests): self.assertEqual(r['fields']['timestamp'], db_r.timestamp) db_requests = Request.objects.all().order_by( 'priority', '-timestamp')[:10] for db_r in db_requests: db_r.timestamp = to_ecma_date_string(db_r.timestamp) response = self.send_ajax_request(dict(id=1, priority=0)) data = self.validate_recieved_json_response(response) requests = json.loads(data['requests']) for r, db_r in zip(requests, db_requests): self.assertEqual(r['fields']['timestamp'], db_r.timestamp)
def requests(request): priority = request.GET.get('priority') if priority is not None: try: priority = int(priority) except (ValueError, TypeError): priority = 1 order_by = '{}priority'.format('-' if priority else '') r_list = Request.objects.all().order_by(order_by, '-timestamp')[:10] else: r_list = Request.objects.all()[:10] if request.is_ajax(): page_request_id = int(request.GET['id']) new_requests = r_list[0].id - page_request_id requests = serializers.serialize('json', r_list) # Django serializes datetime objects according to ecma 262 return HttpResponse( json.dumps({ 'new_requests': new_requests, 'requests': requests }), content_type='application/json' ) else: for r in r_list: # Need to display data in this format r.timestamp = to_ecma_date_string(r.timestamp) return render(request, 'hello/requests.html', {'requests': r_list, 'priority': priority})
def test_requests_view_shows_ten_most_recent_requests(self): ''' Test requests view shows ten most recent requets. ''' for _ in xrange(20): self.client.get('home') # this response is rendered with 10 previous requests response = self.client.get(self.url) context_requests = response.context['requests'] self.assertEqual(len(context_requests), 10) db_requests = Request.objects.all().order_by('-timestamp') # Need to convert timestamps because I convert them for requests # passed into the context for db_request in db_requests: db_request.timestamp = to_ecma_date_string(db_request.timestamp) for context_request, db_request in zip(context_requests, db_requests): self.assertEqual( context_request.timestamp, db_request.timestamp ) self.assertEqual(context_request.id, db_request.id)
def to_json(self, value): if value is None: return None if isinstance(value, datetime.datetime): datetimeutil.to_ecma_date_string(value, self.assume_local)
def test_aware_datetime(self): dt = datetime.datetime(2013, 7, 13, 16, 54, 46, 123000, datetimeutil.utc) actual = datetimeutil.to_ecma_date_string(dt, False) self.assertEqual("2013-07-13T16:54:46.123Z", actual)
def test_naive_datetime(self): dt = datetime.datetime(2013, 7, 13, 16, 54, 46, 123000) actual = datetimeutil.to_ecma_date_string(dt, False) # assume UTC to simplify this particular test self.assertEqual("2013-07-13T16:54:46.123Z", actual)