/// <summary> /// Generate a schedule from the built-in test data for camper requests. /// </summary> /// <returns>A successful schedule from the built-in test data</returns> private (List <ActivityDefinition> activityDefinitions, List <HashSet <Camper> > camperGroups) GenerateSchedule() { Assembly assembly = typeof(SchedulerServiceTests).Assembly; using (Stream camperRequestFile = assembly.GetManifestResourceStream( "ActivitySchedulerFrontEnd.Tests.CamperRequests.csv")) { List <ActivityDefinition> activityDefinitions = _activityDefinitionService.GetActivityDefinition( DefaultActivitySetName).ToList(); List <CamperRequests> camperRequests = CamperRequests.ReadCamperRequests(camperRequestFile, activityDefinitions); Scheduler.ScheduleActivities(camperRequests, false, _logger); List <HashSet <Camper> > camperGroups = CamperRequests.GenerateCamperMateGroups(camperRequests); // Activity definitions now has the schedule return(activityDefinitions, camperGroups); } }
public List <ActivityDefinition> CreateSchedule(string scheduleId, List <CamperRequests> camperRequests, List <ActivityDefinition> activityDefinitions) { List <CamperRequests> unscheduledCamperRequests = Scheduler.ScheduleActivities(camperRequests, activityDefinitions, _logger); if (unscheduledCamperRequests.Any()) { // Put the unscheduled blocks into a special unscheduled activity ActivityDefinition unscheduledActivity = new ActivityDefinition { Name = UnscheduledActivityName, MaximumCapacity = int.MaxValue, OptimalCapacity = 0 }; unscheduledActivity.PreloadBlocks(); foreach (Camper unscheduledCamper in unscheduledCamperRequests.Select(cr => cr.Camper)) { int[] blockIds = { 0, 1, 2, 3 }; foreach (int unscheduledBlockId in blockIds .Except(unscheduledCamper.ScheduledBlocks.Select(b => b.TimeSlot))) { unscheduledActivity.TryAssignCamperToExistingActivityBlock(unscheduledCamper, false); } } // Put unscheduled activity at the top of the grid activityDefinitions.Insert(0, unscheduledActivity); } // Generate the schedule ID from the date. _schedulesById[scheduleId] = activityDefinitions; // Generate the camper groups List <HashSet <Camper> > camperGroups = CamperRequests.GenerateCamperMateGroups(camperRequests); _camperGroupsByScheduleId[scheduleId] = camperGroups; UpdateSchedule(scheduleId, activityDefinitions, camperGroups); return(activityDefinitions); }
public void GenerateCamperMateGroups_ValidInput_GeneratesExpectedList() { // Arrange load the known good camper list List <CamperRequests> camperRequests = CamperRequests.ReadCamperRequests(GoodFileLocation, ActivityDefinitionTests.DefaultActivityDefinitions, _logger); // Act - Generate the camper groups List <HashSet <Camper> > camperMateGroups = CamperRequests.GenerateCamperMateGroups(camperRequests); // Assert Assert.That(camperMateGroups, Is.Not.Null, "camperMateGroups"); List <HashSet <Camper> > expectedCamperMateGroups = new List <HashSet <Camper> > { { new HashSet <Camper> { new Camper { LastName = "A" }, new Camper { LastName = "S" }, new Camper { LastName = "E" }, new Camper { LastName = "O" }, new Camper { LastName = "X" }, new Camper { LastName = "AC" }, new Camper { LastName = "AM" }, new Camper { LastName = "AS" }, new Camper { LastName = "AX" }, new Camper { LastName = "BC" }, new Camper { LastName = "BF" }, new Camper { LastName = "BK" }, new Camper { LastName = "BN" }, new Camper { LastName = "CA" }, new Camper { LastName = "CH" }, new Camper { LastName = "CJ" }, new Camper { LastName = "CK" }, new Camper { LastName = "CR" }, new Camper { LastName = "D" }, new Camper { LastName = "R" }, new Camper { LastName = "AN" }, new Camper { LastName = "BG" }, new Camper { LastName = "CB" }, new Camper { LastName = "CL" } } }, { new HashSet <Camper> { new Camper { LastName = "B" }, new Camper { LastName = "U" }, new Camper { LastName = "V" }, new Camper { LastName = "Z" }, new Camper { LastName = "AA" }, new Camper { LastName = "AK" }, new Camper { LastName = "AT" }, new Camper { LastName = "BM" }, new Camper { LastName = "CG" }, new Camper { LastName = "CI" } } }, { new HashSet <Camper> { new Camper { LastName = "C" }, new Camper { LastName = "Y" }, new Camper { LastName = "T" }, new Camper { LastName = "AE" }, new Camper { LastName = "AH" }, new Camper { LastName = "AI" }, new Camper { LastName = "AR" }, new Camper { LastName = "AZ" }, new Camper { LastName = "BL" }, new Camper { LastName = "BR" }, new Camper { LastName = "CF" } } }, { new HashSet <Camper> { new Camper { LastName = "G" }, new Camper { LastName = "F" }, new Camper { LastName = "N" }, new Camper { LastName = "BD" }, new Camper { LastName = "BS" }, new Camper { LastName = "CC" }, new Camper { LastName = "CS" }, new Camper { LastName = "I" } } }, { new HashSet <Camper> { new Camper { LastName = "K" }, new Camper { LastName = "H" }, new Camper { LastName = "P" }, new Camper { LastName = "BE" }, new Camper { LastName = "BU" } } }, { new HashSet <Camper> { new Camper { LastName = "AB" }, new Camper { LastName = "W" }, new Camper { LastName = "AO" }, new Camper { LastName = "AP" } } } }; Assert.That(camperMateGroups.Count, Is.EqualTo(expectedCamperMateGroups.Count), "Number of camper mate groups"); foreach (var expectedCamperMateGroup in expectedCamperMateGroups) { bool foundMatch = false; foreach (var actualCamperMateGroup in camperMateGroups) { foundMatch = actualCamperMateGroup.SetEquals(expectedCamperMateGroup); if (foundMatch) { break; } } StringBuilder expectedCamperStringBuilder = new StringBuilder(); foreach (Camper expectedCamper in expectedCamperMateGroup) { if (expectedCamperStringBuilder.Length > 0) { expectedCamperStringBuilder.Append(','); } expectedCamperStringBuilder.Append(expectedCamper.LastName); } Assert.That(foundMatch, $"found match for {expectedCamperStringBuilder}"); } }