I'm trying to write a test for an Ajax get a request in Django. Here's how I tried.
from django.test import TestCase
from django.urls import reverse
from .models import ResourcePost, User
from register.models import DonorProfile
from django.utils import timezone
class getResourcePostTests(TestCase):
def setUp(self):
ResourcePost.objects.create(
title="test1",
description="test",
quantity=10,
dropoff_time_1=timezone.now(),
dropoff_time_2=timezone.now(),
dropoff_time_3=timezone.now(),
date_created=timezone.now(),
donor=createdonor_1(),
resource_category="FOOD",
status="AVAILABLE",
)
...
def test_getResourcePost(self):
rescource_post_1 = ResourcePost.objects.get(title="test1")
rescource_post_2 = ResourcePost.objects.get(title="test2")
rescource_post_3 = ResourcePost.objects.get(title="test3")
response = self.client.get(reverse('donation:getResourcePosts'))
self.assertEqual(response.status_code, 200)
Here is my view for the ajax call:
@login_required
def getResourcePost(request):
user = request.user
curr_user_rc_1 = user.helpseekerprofile.rc_1
curr_user_rc_2 = user.helpseekerprofile.rc_2
curr_user_rc_3 = user.helpseekerprofile.rc_3
posts = ResourcePost.objects.all()
passingList = []
for post in posts:
if post.date_created >= user.helpseekerprofile.message_timer_before and (
post.resource_category == curr_user_rc_1
or post.resource_category == curr_user_rc_2
or post.resource_category == curr_user_rc_3
):
notiPost = {
"id": post.id,
"title": post.title,
"description": post.description,
}
passingList.append(notiPost)
context = {"resource_posts": passingList}
return JsonResponse(context)
This is my ajax code:
$(document).ready(function () {
setInterval(() => {
$.ajax({
type: 'GET',
url: "{% url 'donation:getResourcePosts' %}",
success: function (response) {
$("#display").html('<i class="fas fa-bell"></i>')
let postCounter = 0
for (i = 0; i < response.resource_posts.length; i++) {
postCounter += 1
}
if (postCounter > 0) {
$("#display").append('<span class="message-number">' + postCounter + '</span>')
}
},
error: function (response) {
console.log("No DATA FOUND")
}
})
}, 1000 * 2)
})
I keep getting fail because the reponse is 302.
rescource_post_X
come up as variables not used. How do I use them? Should I use them?Thank you!
The @login_required decorator is redirecting your request to the login page