.
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
<button id="add-to-exam" data-exam_json_edit_url="{% url 'generic:generic_exam_json_edit' %}"
|
||||
data-exam_list_url="{% url 'rapid-exam-list' %}" data-type="rapid" data-csrf="{{ csrf_token}}"
|
||||
data-qid="{{question.pk}}">Add to exam</button>
|
||||
<button id="cancel-add-to-exam" style="display:none">Cancel</button>
|
||||
<span id="exam-options"></span>
|
||||
</div>
|
||||
<p class="pre-whitespace"><b>Open Access:</b> {{ question.open_access }}</p>
|
||||
@@ -156,8 +157,15 @@
|
||||
})
|
||||
})
|
||||
|
||||
$("#cancel-add-to-exam").click(function (evt) {
|
||||
$("#add-to-exam").toggle();
|
||||
$("#cancel-add-to-exam").toggle();
|
||||
$("#exam-options").empty();
|
||||
})
|
||||
|
||||
$("#add-to-exam").click(function (evt) {
|
||||
$("#add-to-exam").toggle();
|
||||
$("#cancel-add-to-exam").toggle();
|
||||
|
||||
var jqxhr = $.get(evt.target.dataset.exam_list_url, function (data) {
|
||||
console.log(data);
|
||||
@@ -380,11 +388,18 @@
|
||||
<style>
|
||||
.toggle-button {
|
||||
font-size: x-small;
|
||||
opacity: 10%;
|
||||
opacity: 30%;
|
||||
}
|
||||
|
||||
.toggle-button:hover {
|
||||
font-size: x-small;
|
||||
opacity: 100%;
|
||||
}
|
||||
|
||||
#cancel-add-to-exam {
|
||||
border-style: dashed;
|
||||
}
|
||||
#cancel-add-to-exam:hover {
|
||||
background-color: purple;
|
||||
}
|
||||
</style>
|
||||
@@ -33,6 +33,18 @@ def create_superuser(db, django_user_model):
|
||||
"admin", "ross@xkjq.uk", "adminpassword"
|
||||
)
|
||||
|
||||
@pytest.fixture(params=EXAM_VIEWS)
|
||||
def set_up_exams(request, django_user_model, create_superuser):
|
||||
basic_user = django_user_model.objects.create_user(
|
||||
"user1", "user@user.net", "pass2"
|
||||
)
|
||||
|
||||
e1 = request.param.Exam.objects.create(name="test exam", exam_mode=True)
|
||||
e = request.param.Exam.objects.create(name="test exam 2", exam_mode=True)
|
||||
e.author.add(basic_user)
|
||||
return request.param
|
||||
|
||||
|
||||
|
||||
# @pytest.fixture
|
||||
# def create_exam(db):
|
||||
@@ -40,6 +52,18 @@ def create_superuser(db, django_user_model):
|
||||
|
||||
# Very basic tests, make sure we can hit key urls without error
|
||||
|
||||
def test_index2(client, set_up_exams):
|
||||
client.login(username="admin", password="adminpassword")
|
||||
response = client.get(reverse(f"{set_up_exams.app_name}:index"))
|
||||
assert response.status_code == 200
|
||||
|
||||
assert (
|
||||
BeautifulSoup(response.content, "html.parser")
|
||||
.find("h4", {"class": "exam-number-title"})
|
||||
.getText()
|
||||
== "2 exams found."
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("exam_views", EXAM_VIEWS)
|
||||
def test_index(client, create_superuser, exam_views, django_user_model):
|
||||
@@ -63,6 +87,15 @@ def test_index(client, create_superuser, exam_views, django_user_model):
|
||||
== "2 exams found."
|
||||
)
|
||||
|
||||
|
||||
response = client.get(reverse(f"{exam_views.app_name}:exam_list"))
|
||||
assert response.status_code == 200
|
||||
assert (
|
||||
len(BeautifulSoup(response.content, "html.parser")
|
||||
.select("a.exam-name"))
|
||||
== 2
|
||||
)
|
||||
|
||||
if exam_views.app_name in JSON_APPS:
|
||||
response = client.get(reverse(f"{exam_views.app_name}:active_exams"))
|
||||
|
||||
@@ -86,7 +119,6 @@ def test_index(client, create_superuser, exam_views, django_user_model):
|
||||
HTTP_X_REQUESTED_WITH="XMLHttpRequest",
|
||||
)
|
||||
|
||||
print(f"{e1.valid_user_users.all()=}")
|
||||
|
||||
assert json.loads(add_user_response.content)["status"] == "success"
|
||||
|
||||
@@ -103,6 +135,15 @@ def test_index(client, create_superuser, exam_views, django_user_model):
|
||||
== "1 exams found."
|
||||
)
|
||||
|
||||
response = client.get(reverse(f"{exam_views.app_name}:exam_list"))
|
||||
|
||||
assert (
|
||||
len(BeautifulSoup(response.content, "html.parser")
|
||||
.select("a.exam-name"))
|
||||
== 1
|
||||
)
|
||||
|
||||
|
||||
if exam_views.app_name in JSON_APPS:
|
||||
response = client.get(reverse(f"{exam_views.app_name}:active_exams"))
|
||||
|
||||
|
||||
+6
-7
@@ -46,6 +46,7 @@ from generic.views import (
|
||||
AuthorRequiredMixin,
|
||||
ExamCloneMixin,
|
||||
ExamCreateBase,
|
||||
ExamDeleteBase,
|
||||
ExamUpdateBase,
|
||||
ExamViews,
|
||||
GenericViewBase,
|
||||
@@ -787,6 +788,9 @@ class ExamUpdate(ExamUpdateBase, AuthorOrCheckerRequiredMixin):
|
||||
form_class = ExamForm
|
||||
|
||||
|
||||
class ExamDelete(AuthorOrCheckerRequiredMixin, ExamDeleteBase):
|
||||
model = Exam
|
||||
|
||||
class ExamAuthorUpdate(
|
||||
RevisionMixin, LoginRequiredMixin, AuthorRequiredMixin, UpdateView
|
||||
):
|
||||
@@ -794,11 +798,6 @@ class ExamAuthorUpdate(
|
||||
form_class = ExamAuthorForm
|
||||
|
||||
|
||||
class ExamDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
|
||||
model = Exam
|
||||
template_name = "exam_confirm_delete.html"
|
||||
success_url = reverse_lazy("rapids:index")
|
||||
|
||||
|
||||
class UserAnswerView(LoginRequiredMixin, DetailView):
|
||||
model = CidUserAnswer
|
||||
@@ -840,9 +839,9 @@ class ExamViewSet(RevisionMixin, viewsets.ModelViewSet):
|
||||
"""
|
||||
user = self.request.user
|
||||
if user.groups.filter(name="rapid_checker").exists():
|
||||
return Exam.objects.all()
|
||||
return Exam.objects.filter(archive=False).order_by('name')
|
||||
|
||||
return Exam.objects.filter(author__id=user.id)
|
||||
return Exam.objects.filter(author__id=user.id, archive=False).order_by('name')
|
||||
|
||||
|
||||
class QuestionAnswerViewSet(viewsets.ModelViewSet):
|
||||
|
||||
Reference in New Issue
Block a user