testing view models

This commit is contained in:
2023-01-18 20:31:50 -07:00
parent 530613fca3
commit 4a321ffa4a
7 changed files with 118 additions and 28 deletions

View File

@@ -80,4 +80,18 @@ public class SemesterPlannerTests
semester.Months.Last().Month.Should().Be(1);
semester.Months.Last().Year.Should().Be(2023);
}
[Test]
public void TestSemesterTracksDaysOfWeek()
{
DayOfWeek[] days = new DayOfWeek[] { DayOfWeek.Monday };
var config = new SemesterConfiguration(
StartDate: new DateTime(2022, 12, 1),
EndDate: new DateTime(2023, 1, 1),
days
);
var semester = new SemesterPlanner(config);
semester.Days.Should().BeEquivalentTo(days);
}
}

View File

@@ -21,6 +21,7 @@
<ItemGroup>
<ProjectReference Include="..\Management\Management.csproj" />
<ProjectReference Include="..\Management.Web\Management.Web.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,14 @@
using Management.Web.Shared.Semester;
public class MonthDetailTests
{
[Test]
public void TestCanGetMonthName()
{
var detail = new MonthDetail();
var calendarMonth = new CalendarMonth(2022, 2);
detail.Month = calendarMonth;
detail.MonthName.Should().Be("February");
}
}

View File

@@ -11,6 +11,10 @@
{
get => terms?.FirstOrDefault(t => t.Id == selectedTermId);
}
private List<DayOfWeek> days { get; set; } = new();
private bool saved { get; set; } = false;
private SemesterConfiguration? configuration { get; set; }
protected override async Task OnInitializedAsync()
{
terms = await canvasService.GetCurrentTermsFor();
@@ -38,5 +42,40 @@
}
@if (selectedTerm is not null)
{
<SemesterDetail Term="selectedTerm" />
<h5>Select Days Of Week</h5>
<div class="row m-3">
@foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)))
{
<div class="col">
<button class="@(
days.Contains(day)
? "btn btn-secondary"
: "btn btn-outline-secondary"
)" @onclick="() => {
if(days.Contains(day))
days.Remove(day);
else
days.Add(day);
}" disabled="@saved">
@day
</button>
</div>
}
</div>
<div class="row justify-content-center">
<div class="col-auto">
<button @onclick="() => {
saved = true;
configuration = ConfigurationManagement.CreateFromTerm(selectedTerm, days.ToArray());
}" class="btn btn-primary" disabled="@saved">
Save
</button>
</div>
</div>
}
@if (configuration is not null)
{
<SemesterDetail Configuration="configuration" />
}

View File

@@ -1,26 +1,45 @@
@using System.Linq;
@code
{
[Parameter, EditorRequired]
public CalendarMonth Month { get; set; } = default!;
[Parameter, EditorRequired]
public SemesterPlanner Semester { get; set; } = default!;
public DayOfWeek[] WeekDaysList { get => (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)); }
public string MonthName { get => Month?.DaysByWeek.First().FirstOrDefault(d => d != null)?.ToString("MMMM") ?? ""; }
}
<h3 class="text-center">
@MonthName
</h3>
<div class="row text-center fw-bold">
<div class="col">Saturday</div>
<div class="col">Monday</div>
<div class="col">Tuesday</div>
<div class="col">Wednesday</div>
<div class="col">Thursday</div>
<div class="col">Friday</div>
<div class="col">Saturday</div>
</div>
@foreach(var week in Month.DaysByWeek)
<div class="row text-center fw-bold">
@foreach (DayOfWeek day in WeekDaysList)
{
<div class="@(Semester.Days.Contains(day) ? "col" : "col text-secondary")">@day</div>
}
</div>
@foreach (var week in Month.DaysByWeek)
{
<div class="row m-3">
@foreach (var day in week)
@foreach (var day in week)
{
<div class="col border rounded rounded-3 pb-5 m-1">@day?.Day</div>
var baseClasses = "col border rounded rounded-3 pb-5 m-1";
DayOfWeek? weekDay = day?.DayOfWeek;
if (weekDay != null)
{
DayOfWeek notNullDay = weekDay ?? default;
var totalClasses = Semester.Days.Contains(notNullDay) ? $"bg-light {baseClasses}" : baseClasses;
<div class="@totalClasses">@day?.Day</div>
}
else
{
<div class="@baseClasses"></div>
}
}
</div>
}

View File

@@ -4,20 +4,21 @@
@code
{
[Parameter, EditorRequired]
public EnrollmentTermModel Term { get; set; } = default!;
public SemesterConfiguration Configuration { get; set; } = default!;
@* private SemesterPlanner semester { get; set; } = default!;
private SemesterPlanner? semester { get; set; }
protected override void OnParametersSet()
{
semester = new SemesterPlanner(Term);
} *@
semester = new SemesterPlanner(Configuration);
}
}
@Term.Name
@* @foreach (var month in semester.Months)
<br>
@if (semester != null)
{
<MonthDetail Month="month" />
<hr />
} *@
@foreach (var month in semester.Months)
{
<MonthDetail Month="month" Semester="semester" />
<hr />
}
}

View File

@@ -3,6 +3,7 @@ using CanvasModel.EnrollmentTerms;
public class SemesterPlanner
{
public IEnumerable<CalendarMonth> Months { get; }
public IEnumerable<DayOfWeek> Days { get; }
public SemesterPlanner(SemesterConfiguration configuration)
{
var start = configuration.StartDate;
@@ -20,5 +21,6 @@ public class SemesterPlanner
var year = start.Year + ((start.Month + monthDiff - 1) / 12);
return new CalendarMonth(year, month);
});
Days = configuration.Days;
}
}