mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
term month generation is correct
This commit is contained in:
@@ -49,4 +49,39 @@ public class SemesterPlannerTests
|
|||||||
semester.Months.Count().Should().Be(2);
|
semester.Months.Count().Should().Be(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestSemesterGetsCorrectMonths()
|
||||||
|
{
|
||||||
|
var canvasTerm = new EnrollmentTermModel(
|
||||||
|
Id: 1,
|
||||||
|
Name: "one",
|
||||||
|
StartAt: new DateTime(2022, 1, 1),
|
||||||
|
EndAt: new DateTime(2022, 2, 1)
|
||||||
|
);
|
||||||
|
|
||||||
|
var semester = new SemesterPlanner(canvasTerm);
|
||||||
|
|
||||||
|
semester.Months.First().Month.Should().Be(1);
|
||||||
|
semester.Months.Last().Month.Should().Be(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestMonthsCanWrapYears()
|
||||||
|
{
|
||||||
|
var canvasTerm = new EnrollmentTermModel(
|
||||||
|
Id: 1,
|
||||||
|
Name: "one",
|
||||||
|
StartAt: new DateTime(2022, 12, 1),
|
||||||
|
EndAt: new DateTime(2023, 1, 1)
|
||||||
|
);
|
||||||
|
|
||||||
|
var semester = new SemesterPlanner(canvasTerm);
|
||||||
|
|
||||||
|
semester.Months.First().Month.Should().Be(12);
|
||||||
|
semester.Months.First().Year.Should().Be(2022);
|
||||||
|
|
||||||
|
semester.Months.Last().Month.Should().Be(1);
|
||||||
|
semester.Months.Last().Year.Should().Be(2023);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
public class CalendarMonth
|
public class CalendarMonth
|
||||||
{
|
{
|
||||||
private DateOnly firstDay { get; }
|
public int Year { get; }
|
||||||
private int year { get => firstDay.Year; }
|
public int Month { get; }
|
||||||
private int month { get => firstDay.Month; }
|
|
||||||
public IEnumerable<IEnumerable<int?>> Weeks
|
public IEnumerable<IEnumerable<int?>> Weeks
|
||||||
{
|
{
|
||||||
get =>
|
get =>
|
||||||
@@ -17,10 +16,10 @@ public class CalendarMonth
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
var weeks = new List<List<DateTime?>>();
|
var weeks = new List<List<DateTime?>>();
|
||||||
var weeksInMonth = WeeksInMonth(year, month);
|
var weeksInMonth = WeeksInMonth(Year, Month);
|
||||||
var daysInMonth = DateTime.DaysInMonth(year, month);
|
var daysInMonth = DateTime.DaysInMonth(Year, Month);
|
||||||
|
|
||||||
var firstDayOfMonth = new DateTime(year, month, 1).DayOfWeek;
|
var firstDayOfMonth = new DateTime(Year, Month, 1).DayOfWeek;
|
||||||
|
|
||||||
var currentDay = 1;
|
var currentDay = 1;
|
||||||
for (int i = 0; i < weeksInMonth; i++)
|
for (int i = 0; i < weeksInMonth; i++)
|
||||||
@@ -36,7 +35,7 @@ public class CalendarMonth
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
thisWeek.Add(new DateTime(year, month, currentDay));
|
thisWeek.Add(new DateTime(Year, Month, currentDay));
|
||||||
currentDay++;
|
currentDay++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,7 +46,7 @@ public class CalendarMonth
|
|||||||
{
|
{
|
||||||
if (currentDay <= daysInMonth)
|
if (currentDay <= daysInMonth)
|
||||||
{
|
{
|
||||||
thisWeek.Add(new DateTime(year, month, currentDay));
|
thisWeek.Add(new DateTime(Year, Month, currentDay));
|
||||||
currentDay++;
|
currentDay++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -77,7 +76,7 @@ public class CalendarMonth
|
|||||||
|
|
||||||
public CalendarMonth(int year, int month)
|
public CalendarMonth(int year, int month)
|
||||||
{
|
{
|
||||||
firstDay = new DateOnly(year, month, 1);
|
Year = year;
|
||||||
|
Month = month;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,11 +5,20 @@ public class SemesterPlanner
|
|||||||
public IEnumerable<CalendarMonth> Months { get; }
|
public IEnumerable<CalendarMonth> Months { get; }
|
||||||
public SemesterPlanner(EnrollmentTermModel canvasTerm)
|
public SemesterPlanner(EnrollmentTermModel canvasTerm)
|
||||||
{
|
{
|
||||||
var monthsInTerm =
|
var start = canvasTerm.StartAt ?? throw new Exception($"Canvas Term must have a start date. Term: {canvasTerm.Id}");
|
||||||
1 + ((canvasTerm.EndAt?.Year - canvasTerm.StartAt?.Year) * 12)
|
var end = canvasTerm.EndAt ?? throw new Exception($"Canvas Term must have a end date. Term: {canvasTerm.Id}");
|
||||||
+ canvasTerm.EndAt?.Month - canvasTerm.StartAt?.Month
|
|
||||||
?? throw new Exception($"Canvas Term must have a start and end date. Term: {canvasTerm.Id}, start: {canvasTerm.StartAt}, end: {canvasTerm.EndAt}");
|
|
||||||
|
|
||||||
Months = Enumerable.Range(0, monthsInTerm).Select(_ => new CalendarMonth(2022, 1));
|
var monthsInTerm =
|
||||||
|
1 + ((end.Year - start.Year) * 12)
|
||||||
|
+ end.Month - start.Month;
|
||||||
|
|
||||||
|
Months = Enumerable
|
||||||
|
.Range(0, monthsInTerm)
|
||||||
|
.Select(monthDiff =>
|
||||||
|
{
|
||||||
|
var month = ((start.Month + monthDiff - 1) % 12) + 1;
|
||||||
|
var year = start.Year + ((start.Month + monthDiff - 1) / 12);
|
||||||
|
return new CalendarMonth(year, month);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user