def test_validation(self): """Test that we detect validation errors correctly""" # Create a item with both a talk and a page assigned day1 = Day.objects.create(date=D.date(2013, 9, 22)) venue1 = Venue.objects.create(order=1, name='Venue 1') venue1.days.add(day1) start1 = D.time(10, 0, 0) start2 = D.time(11, 0, 0) end = D.time(12, 0, 0) slot1 = Slot.objects.create(start_time=start1, end_time=start2, day=day1) slot2 = Slot.objects.create(start_time=start1, end_time=end, day=day1) user = get_user_model().objects.create_user('john', '*****@*****.**', 'johnpassword') talk = Talk.objects.create(title="Test talk", status=ACCEPTED, corresponding_author_id=user.id) page = Page.objects.create(name="test page", slug="test") item1 = ScheduleItem.objects.create(venue=venue1, talk_id=talk.pk, page_id=page.pk) item1.slots.add(slot1) invalid = validate_items() assert set(invalid) == set([item1]) item2 = ScheduleItem.objects.create(venue=venue1, talk_id=talk.pk) item2.slots.add(slot2) # Test talk status talk.status = REJECTED talk.save() invalid = validate_items() assert set(invalid) == set([item1, item2]) talk.status = PENDING talk.save() invalid = validate_items() assert set(invalid) == set([item1, item2]) talk.status = ACCEPTED talk.save() invalid = validate_items() assert set(invalid) == set([item1]) item3 = ScheduleItem.objects.create(venue=venue1, talk_id=None, page_id=None) item3.slots.add(slot2) invalid = validate_items() assert set(invalid) == set([item1, item3])
def test_non_contiguous(self): """Test that we detect items with non contiguous slots""" # Create a item with a gap in the slots assigned to it day1 = ScheduleBlock.objects.create( start_time=D.datetime(2013, 9, 22, 9, 0, 0, tzinfo=timezone.utc), end_time=D.datetime(2013, 9, 22, 19, 0, 0, tzinfo=timezone.utc)) venue1 = Venue.objects.create(order=1, name='Venue 1') venue1.blocks.add(day1) start1 = D.datetime(2013, 9, 22, 10, 0, 0, tzinfo=timezone.utc) start2 = D.datetime(2013, 9, 22, 11, 0, 0, tzinfo=timezone.utc) start3 = D.datetime(2013, 9, 22, 12, 0, 0, tzinfo=timezone.utc) end = D.datetime(2013, 9, 22, 13, 0, 0, tzinfo=timezone.utc) slot1 = Slot.objects.create(start_time=start1, end_time=start2) slot2 = Slot.objects.create(start_time=start2, end_time=start3) slot3 = Slot.objects.create(start_time=start3, end_time=end) user = get_user_model().objects.create_user('john', '*****@*****.**', 'johnpassword') talk = Talk.objects.create(title="Test talk", status=ACCEPTED, corresponding_author_id=user.id) page = Page.objects.create(name="test page", slug="test") item1 = ScheduleItem.objects.create(venue=venue1, talk_id=talk.pk) item1.slots.add(slot1) item1.slots.add(slot3) item2 = ScheduleItem.objects.create(venue=venue1, page_id=page.pk) item2.slots.add(slot2) all_items = prefetch_schedule_items() invalid = find_non_contiguous(all_items) # Only item1 is invalid assert set(invalid) == set([item1]) item1.slots.add(slot2) item1.slots.remove(slot1) item2.slots.add(slot1) item2.slots.remove(slot2) all_items = prefetch_schedule_items() invalid = validate_items(all_items) # Everything is valid now assert set(invalid) == set([])
def test_non_contiguous(self): """Test that we detect items with non contiguous slots""" # Create a item with a gap in the slots assigned to it day1 = Day.objects.create(date=D.date(2013, 9, 22)) venue1 = Venue.objects.create(order=1, name='Venue 1') venue1.days.add(day1) start1 = D.time(10, 0, 0) start2 = D.time(11, 0, 0) start3 = D.time(12, 0, 0) end = D.time(13, 0, 0) slot1 = Slot.objects.create(start_time=start1, end_time=start2, day=day1) slot2 = Slot.objects.create(start_time=start2, end_time=start3, day=day1) slot3 = Slot.objects.create(start_time=start3, end_time=end, day=day1) user = get_user_model().objects.create_user('john', '*****@*****.**', 'johnpassword') talk = Talk.objects.create(title="Test talk", status=ACCEPTED, corresponding_author_id=user.id) page = Page.objects.create(name="test page", slug="test") item1 = ScheduleItem.objects.create(venue=venue1, talk_id=talk.pk) item1.slots.add(slot1) item1.slots.add(slot3) item2 = ScheduleItem.objects.create(venue=venue1, page_id=page.pk) item2.slots.add(slot2) all_items = prefetch_schedule_items() invalid = find_non_contiguous(all_items) # Only item1 is invalid assert set(invalid) == set([item1]) item1.slots.add(slot2) item1.slots.remove(slot1) item2.slots.add(slot1) item2.slots.remove(slot2) all_items = prefetch_schedule_items() invalid = validate_items(all_items) # Everything is valid now assert set(invalid) == set([])
def test_validation(self): """Test that we detect validation errors correctly""" # Create a item with both a talk and a page assigned day1 = ScheduleBlock.objects.create( start_time=D.datetime(2013, 9, 22, 9, 0, 0, tzinfo=timezone.utc), end_time=D.datetime(2013, 9, 22, 19, 0, 0, tzinfo=timezone.utc)) venue1 = Venue.objects.create(order=1, name='Venue 1') venue1.blocks.add(day1) start1 = D.datetime(2013, 9, 22, 10, 0, 0, tzinfo=timezone.utc) start2 = D.datetime(2013, 9, 22, 11, 0, 0, tzinfo=timezone.utc) end = D.datetime(2013, 9, 22, 12, 0, 0, tzinfo=timezone.utc) slot1 = Slot.objects.create(start_time=start1, end_time=start2) slot2 = Slot.objects.create(start_time=start1, end_time=end) user = get_user_model().objects.create_user('john', '*****@*****.**', 'johnpassword') talk = Talk.objects.create(title="Test talk", status=ACCEPTED, corresponding_author_id=user.id) page = Page.objects.create(name="test page", slug="test") item1 = ScheduleItem.objects.create(venue=venue1, talk_id=talk.pk, page_id=page.pk) item1.slots.add(slot1) all_items = prefetch_schedule_items() invalid = validate_items(all_items) assert set(invalid) == set([item1]) item2 = ScheduleItem.objects.create(venue=venue1, talk_id=talk.pk) item2.slots.add(slot2) # Test talk status talk.status = REJECTED talk.save() all_items = prefetch_schedule_items() invalid = validate_items(all_items) assert set(invalid) == set([item1, item2]) talk.status = SUBMITTED talk.save() all_items = prefetch_schedule_items() invalid = validate_items(all_items) assert set(invalid) == set([item1, item2]) talk.status = CANCELLED talk.save() all_items = prefetch_schedule_items() invalid = validate_items(all_items) assert set(invalid) == set([item1]) talk.status = UNDER_CONSIDERATION talk.save() all_items = prefetch_schedule_items() invalid = validate_items(all_items) assert set(invalid) == set([item1, item2]) talk.status = ACCEPTED talk.save() all_items = prefetch_schedule_items() invalid = validate_items(all_items) assert set(invalid) == set([item1]) item3 = ScheduleItem.objects.create(venue=venue1, talk_id=None, page_id=None) item3.slots.add(slot2) all_items = prefetch_schedule_items() invalid = validate_items(all_items) assert set(invalid) == set([item1, item3])