def test_grad_letters(self): """ Check handling of letters for grad students """ client = Client() test_auth(client, 'ggbaker') gs = GradStudent.objects.get(person__userid=self.gs_userid) # get template text and make sure substitutions are made lt = LetterTemplate.objects.get(label="Funding") url = reverse('grad.views.get_letter_text', kwargs={'grad_slug': gs.slug, 'letter_template_id': lt.id}) response = client.get(url) self.assertEqual(response.status_code, 200) self.assertContains(response, 'M Grad is making satisfactory progress') content = unicode(response.content) # create a letter with that content l = Letter(student=gs, date=datetime.date.today(), to_lines="The Student\nSFU", template=lt, created_by='ggbaker', content=content) l.save() url = reverse('grad.views.view_letter', kwargs={'grad_slug': gs.slug, 'letter_slug': l.slug}) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200) url = reverse('grad.views.copy_letter', kwargs={'grad_slug': gs.slug, 'letter_slug': l.slug}) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200)
def copy_letter(request, grad_slug, letter_slug): grad = get_object_or_404(GradStudent, slug=grad_slug, program__unit__in=request.units) old_letter = get_object_or_404(Letter, slug=letter_slug, student=grad) letter = Letter(student=grad, to_lines=old_letter.to_lines, content=old_letter.content, template=old_letter.template, closing=old_letter.closing, from_person=old_letter.from_person, from_lines=old_letter.from_lines) letter.set_use_sig(old_letter.use_sig()) from_choices = [('', u'\u2014')] \ + [(r.person.id, "%s. %s, %s" % (r.person.get_title(), r.person.letter_name(), r.get_role_display())) for r in Role.objects.filter(unit=grad.program.unit)] if request.method == 'POST': form = LetterForm(request.POST, instance=letter) form.fields['from_person'].choices = from_choices if form.is_valid(): f = form.save(commit=False) f.created_by = request.user.username f.config = grad.letter_info() f.save() messages.success( request, "Created %s letter for %s." % (form.instance.template.label, form.instance.student)) l = LogEntry(userid=request.user.username, description="Copied %s letter for %s." % (form.instance.template.label, form.instance.student), related_object=form.instance) l.save() return HttpResponseRedirect( reverse('grad.views.manage_letters', kwargs={'grad_slug': grad_slug})) else: form = LetterForm(instance=letter, initial={'date': datetime.date.today()}) form.fields['from_person'].choices = from_choices context = { 'form': form, 'grad': grad, 'letter': letter, } return render(request, 'grad/copy_letter.html', context)
def test_grad_letters(self): """ Check handling of letters for grad students """ client = Client() client.login_user('dzhao') gs = self.gs # get template text and make sure substitutions are made lt = LetterTemplate.objects.get(label="Funding") url = reverse('grad.views.get_letter_text', kwargs={ 'grad_slug': gs.slug, 'letter_template_id': lt.id }) response = client.get(url) self.assertEqual(response.status_code, 200) self.assertContains( response, gs.person.get_title() + ' ' + gs.person.last_name + ' is making satisfactory progress') content = response.content.decode('utf-8') # create a letter with that content l = Letter(student=gs, date=datetime.date.today(), to_lines="The Student\nSFU", template=lt, created_by='ggbaker', content=content) l.save() url = reverse('grad.views.view_letter', kwargs={ 'grad_slug': gs.slug, 'letter_slug': l.slug }) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200) url = reverse('grad.views.copy_letter', kwargs={ 'grad_slug': gs.slug, 'letter_slug': l.slug }) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200)
def copy_letter(request, grad_slug, letter_slug): grad = get_object_or_404(GradStudent, slug=grad_slug, program__unit__in=request.units) old_letter = get_object_or_404(Letter, slug=letter_slug, student=grad) letter = Letter(student=grad, to_lines=old_letter.to_lines, content=old_letter.content, template=old_letter.template, closing=old_letter.closing, from_person=old_letter.from_person, from_lines=old_letter.from_lines) letter.set_use_sig(old_letter.use_sig()) from_choices = [('', u'\u2014')] \ + [(r.person.id, "%s. %s, %s" % (r.person.get_title(), r.person.letter_name(), r.get_role_display())) for r in Role.objects.filter(unit=grad.program.unit)] if request.method == 'POST': form = LetterForm(request.POST, instance=letter) form.fields['from_person'].choices = from_choices if form.is_valid(): f = form.save(commit=False) f.created_by = request.user.username f.config = grad.letter_info() f.save() messages.success(request, "Created %s letter for %s." % (form.instance.template.label, form.instance.student)) l = LogEntry(userid=request.user.username, description="Copied %s letter for %s." % (form.instance.template.label, form.instance.student), related_object=form.instance) l.save() return HttpResponseRedirect(reverse('grad.views.manage_letters', kwargs={'grad_slug':grad_slug})) else: form = LetterForm(instance=letter, initial={'date': datetime.date.today()}) form.fields['from_person'].choices = from_choices context = { 'form': form, 'grad' : grad, 'letter': letter, } return render(request, 'grad/copy_letter.html', context)
def test_grad_student_pages(self): """ Check the pages for a grad student and make sure they all load """ client = Client() client.login_user('dzhao') gs = self.__make_test_grad() lt = LetterTemplate( unit=gs.program.unit, label='Template', content="This is the\n\nletter for {{first_name}}.") lt.save() url = reverse('grad.views.get_letter_text', kwargs={ 'grad_slug': gs.slug, 'letter_template_id': lt.id }) content = client.get(url).content Letter(student=gs, template=lt, date=datetime.date.today(), content=content).save() url = reverse('grad.views.view', kwargs={'grad_slug': gs.slug}) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200) # sections of the main gradstudent view that can be loaded for section in all_sections: url = reverse('grad.views.view', kwargs={'grad_slug': gs.slug}) # check fragment fetch for AJAX try: response = client.get(url, {'section': section}) self.assertEqual(response.status_code, 200) except: print "with section==" + repr(section) raise # check section in page try: response = basic_page_tests( self, client, url + '?_escaped_fragment_=' + section) self.assertEqual(response.status_code, 200) except: print "with section==" + repr(section) raise # check all sections together url = url + '?_escaped_fragment_=' + ','.join(all_sections) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200) # check management pages for view in [ 'financials', 'manage_general', 'manage_requirements', 'manage_scholarships', 'manage_otherfunding', 'manage_promises', 'manage_letters', 'manage_status', 'manage_supervisors', 'manage_program', 'manage_start_end_semesters', 'manage_financialcomments', 'manage_defence', 'manage_progress', 'manage_documents' ]: try: url = reverse('grad.views.' + view, kwargs={'grad_slug': gs.slug}) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200) except: print "with view==" + repr(view) raise for style in STYLES: url = reverse('grad.views.financials', kwargs={ 'grad_slug': gs.slug, 'style': style }) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200) url = reverse('grad.views.new_letter', kwargs={ 'grad_slug': gs.slug, 'letter_template_slug': lt.slug }) response = basic_page_tests(self, client, url) self.assertEqual(response.status_code, 200)