This repository has been archived by the owner on Nov 12, 2022. It is now read-only.
forked from carpentries/amy
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[carpentries#2065] Add/remove automated email for instructor signup
- Loading branch information
1 parent
a339165
commit 4d5f17b
Showing
2 changed files
with
103 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,12 +5,16 @@ | |
from django.test.client import RequestFactory | ||
from django.urls import reverse | ||
|
||
from autoemails.actions import NewInstructorAction | ||
from autoemails.models import EmailTemplate, RQJob, Trigger | ||
from autoemails.tests.base import FakeRedisTestCaseMixin | ||
from recruitment.filters import InstructorRecruitmentFilter | ||
from recruitment.forms import ( | ||
InstructorRecruitmentCreateForm, | ||
InstructorRecruitmentSignupChangeStateForm, | ||
) | ||
from recruitment.models import InstructorRecruitment, InstructorRecruitmentSignup | ||
import recruitment.views | ||
from recruitment.views import ( | ||
InstructorRecruitmentCreate, | ||
InstructorRecruitmentDetails, | ||
|
@@ -23,6 +27,7 @@ | |
Organization, | ||
Person, | ||
Role, | ||
Tag, | ||
Task, | ||
WorkshopRequest, | ||
) | ||
|
@@ -387,7 +392,38 @@ def test_integration(self) -> None: | |
self.assertEqual(response.context["object"], recruitment) | ||
|
||
|
||
class TestInstructorRecruitmentSignupChangeState(TestBase): | ||
class TestInstructorRecruitmentSignupChangeState(FakeRedisTestCaseMixin, TestBase): | ||
def setUp(self): | ||
super().setUp() | ||
|
||
# save scheduler and connection data | ||
self._saved_scheduler = recruitment.views.scheduler | ||
self._saved_redis_connection = recruitment.views.redis_connection | ||
# overwrite them | ||
recruitment.views.scheduler = self.scheduler | ||
recruitment.views.redis_connection = self.connection | ||
|
||
def tearDown(self): | ||
super().tearDown() | ||
recruitment.views.scheduler = self._saved_scheduler | ||
recruitment.views.redis_connection = self._saved_redis_connection | ||
|
||
def _prepare_email_automation_data(self) -> None: | ||
self.automated_email_tag = Tag.objects.create( | ||
name="automated-email", priority=0 | ||
) | ||
template = EmailTemplate.objects.create( | ||
slug="sample-template", | ||
subject="Welcome!", | ||
to_header="", | ||
from_header="[email protected]", | ||
cc_header="[email protected]", | ||
bcc_header="[email protected]", | ||
reply_to_header="", | ||
body_template="# Welcome", | ||
) | ||
Trigger.objects.create(action="new-instructor", template=template) | ||
|
||
def test_class_fields(self) -> None: | ||
# Arrange | ||
view = InstructorRecruitmentSignupChangeState() | ||
|
@@ -486,25 +522,41 @@ def test_form_valid(self) -> None: | |
def test_add_instructor_task(self) -> None: | ||
# Arrange | ||
super()._setUpRoles() | ||
view = InstructorRecruitmentSignupChangeState() | ||
self._prepare_email_automation_data() | ||
request = RequestFactory().post("/") | ||
view = InstructorRecruitmentSignupChangeState(request=request) | ||
person = Person.objects.create( | ||
personal="Test", family="User", username="test_user" | ||
) | ||
organization = Organization.objects.first() | ||
organization = self.org_alpha | ||
event = Event.objects.create( | ||
slug="test-event", | ||
host=organization, | ||
administrator=organization, | ||
) | ||
event.tags.add(self.automated_email_tag) | ||
# Act | ||
result = view.add_instructor_task(person, event) | ||
task = view.add_instructor_task(person, event) | ||
# Assert | ||
self.assertTrue(result.pk) | ||
self.assertTrue(task.pk) | ||
self.assertTrue(NewInstructorAction.check(task)) | ||
self.assertTrue(task.rq_jobs.all()) | ||
|
||
# 1 new jobs | ||
self.assertEqual(self.scheduler.count(), 1) | ||
job = next(self.scheduler.get_jobs()) | ||
# 1 new rqjobs | ||
self.assertEqual(RQJob.objects.count(), 1) | ||
rqjob = RQJob.objects.first() | ||
# ensure it's the same job | ||
self.assertEqual(job.get_id(), rqjob.job_id) | ||
|
||
def test_remove_instructor_task(self) -> None: | ||
# Arrange | ||
super()._setUpRoles() | ||
view = InstructorRecruitmentSignupChangeState() | ||
self._prepare_email_automation_data() | ||
request = RequestFactory().post("/") | ||
view = InstructorRecruitmentSignupChangeState(request=request) | ||
person = Person.objects.create( | ||
personal="Test", family="User", username="test_user" | ||
) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters