Files
@ 7fac10241ec7
Branch filter:
Location: symposion_app/vendor/symposion/schedule/tests/test_forms.py
7fac10241ec7
6.4 KiB
text/x-python
Improve attendee reports
Display attendee profile data in normal table without DataTables so
sorting is not applied, causing data to be confusing to read.
Include item quantity in attendee data report for accurate schwag packing.
Display attendee profile data in normal table without DataTables so
sorting is not applied, causing data to be confusing to read.
Include item quantity in attendee data report for accurate schwag packing.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | import os
from datetime import datetime, timedelta
from django.core.files.uploadedfile import SimpleUploadedFile
from django.test import TestCase
from symposion.conference.models import Conference, Section
from ..forms import ScheduleSectionForm
from ..models import Day, Room, Schedule, Slot, SlotKind
DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
class ScheduleSectionFormTests(TestCase):
def setUp(self):
self.conference = Conference.objects.create(title='test')
self.section = Section.objects.create(
conference=self.conference,
name='test')
self.schedule = Schedule.objects.create(section=self.section)
self.today = datetime.now()
self.tomorrow = self.today + timedelta(days=1)
def test_clean_filename(self):
"""Ensure a file is provided if the submit action was utilized"""
data = {'submit': 'Submit'}
form = ScheduleSectionForm(data=data, schedule=self.schedule)
self.assertIn('filename', form.errors)
def test_clean_filename_not_required(self):
"""Ensure file is not required if the delete action was utilize"""
data = {'delete': 'Delete'}
form = ScheduleSectionForm(data=data, schedule=self.schedule)
self.assertTrue(form.is_valid())
def test_delete(self):
"""Delete schedule (Days) for supplied section"""
Day.objects.create(schedule=self.schedule, date=self.today)
Day.objects.create(schedule=self.schedule, date=self.tomorrow)
other_section = Section.objects.create(conference=self.conference, name='other')
other_schedule = Schedule.objects.create(section=other_section)
other_day = Day.objects.create(schedule=other_schedule, date=self.tomorrow)
self.assertEqual(3, Day.objects.all().count())
data = {'delete': 'Delete'}
form = ScheduleSectionForm(data=data, schedule=self.schedule)
form.delete_schedule()
days = Day.objects.all()
self.assertEqual(1, days.count())
self.assertIn(other_day, days)
def test_build_days(self):
"""Test private method to build days based off ingested CSV"""
form = ScheduleSectionForm(schedule=self.schedule)
data = (
{'date': datetime.strftime(self.today, "%m/%d/%Y")},
{'date': datetime.strftime(self.today, "%m/%d/%Y")},
{'date': datetime.strftime(self.tomorrow, "%m/%d/%Y")},
)
self.assertEqual(0, Day.objects.all().count())
form._build_days(data)
self.assertEqual(2, Day.objects.all().count())
def test_build_days_malformed(self):
"""Test failure for malformed date in CSV"""
form = ScheduleSectionForm(schedule=self.schedule)
data = (
{'date': datetime.strftime(self.today, "%m/%d/%Y")},
{'date': '12-12-12'}
)
self.assertEqual(0, Day.objects.all().count())
msg_type, msg = form._build_days(data)
self.assertEqual(0, Day.objects.all().count())
self.assertEqual(40, msg_type)
self.assertIn('12-12-12', msg)
def test_build_rooms(self):
"""Test private method to build rooms based off ingested CSV"""
form = ScheduleSectionForm(schedule=self.schedule)
data = (
{'room': 'foo'},
{'room': 'bar'},
{'room': 'foo'},
)
self.assertEqual(0, Room.objects.all().count())
form._build_rooms(data)
self.assertEqual(2, Room.objects.all().count())
def test_get_start_end_times(self):
"""
Test private method to convert start and end times based off
ingested CSV
"""
form = ScheduleSectionForm(schedule=self.schedule)
start = '12:00 PM'
end = '01:00 PM'
data = {'time_start': start, 'time_end': end}
start_time, end_time = form._get_start_end_times(data)
self.assertEqual(start, start_time.strftime('%I:%M %p'))
self.assertEqual(end, end_time.strftime('%I:%M %p'))
def test_get_start_end_times_malformed(self):
"""
Test private method for malformed time based off ingested CSV
"""
form = ScheduleSectionForm(schedule=self.schedule)
start = '12:00'
end = '01:00'
data = {'time_start': start, 'time_end': end}
msg_type, msg = form._get_start_end_times(data)
self.assertEqual(40, msg_type)
self.assertIn('Malformed', msg)
def test_build_schedule(self):
"""
Test successful schedule build based off ingested CSV
"""
self.assertEqual(0, Day.objects.all().count())
self.assertEqual(0, Room.objects.all().count())
self.assertEqual(0, Slot.objects.all().count())
self.assertEqual(0, SlotKind.objects.all().count())
schedule_csv = open(os.path.join(DATA_DIR, 'schedule.csv'), 'rb')
file_data = {'filename': SimpleUploadedFile(schedule_csv.name, schedule_csv.read())}
data = {'submit': 'Submit'}
form = ScheduleSectionForm(data, file_data, schedule=self.schedule)
form.is_valid()
msg_type, msg = form.build_schedule()
self.assertEqual(25, msg_type)
self.assertIn('imported', msg)
self.assertEqual(2, Day.objects.all().count())
self.assertEqual(2, Room.objects.all().count())
self.assertEqual(8, Slot.objects.all().count())
self.assertEqual(2, SlotKind.objects.all().count())
def test_build_schedule_overlap(self):
"""
Test rolledback schedule build based off ingested CSV with Slot overlap
"""
self.assertEqual(0, Day.objects.all().count())
self.assertEqual(0, Room.objects.all().count())
self.assertEqual(0, Slot.objects.all().count())
self.assertEqual(0, SlotKind.objects.all().count())
schedule_csv = open(os.path.join(DATA_DIR, 'schedule_overlap.csv'), 'rb')
file_data = {'filename': SimpleUploadedFile(schedule_csv.name, schedule_csv.read())}
data = {'submit': 'Submit'}
form = ScheduleSectionForm(data, file_data, schedule=self.schedule)
form.is_valid()
msg_type, msg = form.build_schedule()
self.assertEqual(40, msg_type)
self.assertIn('overlap', msg)
self.assertEqual(0, Day.objects.all().count())
self.assertEqual(0, Room.objects.all().count())
self.assertEqual(0, Slot.objects.all().count())
self.assertEqual(0, SlotKind.objects.all().count())
|