public async Task UpsertNewDay_ShouldAddDay() { // Arrange var groupId = Guid.NewGuid(); var addedTaskId = Guid.NewGuid(); var addedTaskTemplateId = Guid.NewGuid(); var tenant = new Tenant { Id = groupId, Name = "group" }; var existingDay = new Day { Id = Guid.NewGuid(), Date = 9.January(2019), Name = "existing", Tenant = tenant }; var upsertedDay = new UpsertedDay { Id = Guid.NewGuid(), Date = 11.January(2019), Name = "new", Tasks = new List <UpsertedDayTask> { new UpsertedDayTask { Id = addedTaskTemplateId, TaskId = addedTaskId, Start = 2.Hours(30.Minutes()), End = 5.Hours() } } }; var addedTask = new AppTask { Id = addedTaskId, Name = "task", Steps = new List <Step> { new Step { Id = Guid.NewGuid(), Order = 0, Text = "step" } } }; var expectedDays = new List <Day> { existingDay, new Day { Id = upsertedDay.Id, Date = upsertedDay.Date, Name = upsertedDay.Name, Tenant = tenant, Tasks = new List <ScheduledTask> { new ScheduledTask { Id = addedTaskId, Name = addedTask.Name, Start = upsertedDay.Tasks.Single().Start, End = upsertedDay.Tasks.Single().End, Task = addedTask, Steps = new List <ScheduledStep> { new ScheduledStep { Id = Guid.NewGuid(), Order = 0, Text = "step" } } } } } }; var builder = new UpsertDayOperationBuilder() .WithEntity(existingDay) .WithEntity(addedTask) .WithEntity(new Tenant { Id = Guid.NewGuid(), Name = "wrong" }); var sut = builder.Build(); // Act var result = await sut.Execute((groupId, upsertedDay)); // Assert result.Should().BeSucceeded(); builder.DbContext.Days.Should().BeEquivalentTo(expectedDays, ApplyExcludesForDays); builder.DbContext.ScheduledTasks.Should().BeEquivalentTo(new List <ScheduledTask> { expectedDays[1].Tasks.Single() }, ApplyExcludesForDays); builder.DbContext.ScheduledSteps.Should().BeEquivalentTo(new List <ScheduledStep> { expectedDays[1].Tasks.Single().Steps.Single() }, ApplyExcludesForDays); }
public async Task UpsertExistingDay_ShouldUpdateDay() { // Arrange var updatedId = Guid.NewGuid(); var updatedScheduledTaskId = Guid.NewGuid(); var updatedTaskId = Guid.NewGuid(); var tenant = new Tenant { Id = Guid.NewGuid() }; var newTask = new AppTask { Id = Guid.NewGuid(), Name = "newTask", Steps = new List <Step>() }; var existingDays = new List <Day> { new Day { Id = Guid.NewGuid(), Date = 9.January(2019), Name = "existing" }, new Day { Id = updatedId, Date = 10.January(2019), Name = "old", Tasks = new List <ScheduledTask> { new ScheduledTask { Id = Guid.NewGuid(), Start = 4.Hours(30.Minutes()), End = 6.Hours() }, new ScheduledTask { Id = updatedScheduledTaskId, Start = 2.Hours(30.Minutes()), End = 3.Hours(), Name = "name", Task = new AppTask { Id = updatedTaskId, Name = "task" }, Steps = new List <ScheduledStep> { new ScheduledStep { Id = Guid.NewGuid(), Text = "Step" } } } } } }; var upsertedDay = new UpsertedDay { Id = updatedId, Name = "new", Tasks = new List <UpsertedDayTask> { new UpsertedDayTask { Id = updatedScheduledTaskId, TaskId = updatedTaskId, Start = 3.Hours(30.Minutes()), End = 5.Hours() }, new UpsertedDayTask { Id = Guid.NewGuid(), TaskId = newTask.Id, Start = 5.Hours(), End = 7.Hours() } } }; var upsertedDbDay = new Day { Id = updatedId, Date = 10.January(2019), Name = upsertedDay.Name, Tasks = new List <ScheduledTask> { new ScheduledTask { Id = updatedScheduledTaskId, Start = 3.Hours(30.Minutes()), End = 5.Hours(), Name = "name", Task = existingDays[1].Tasks.Last().Task, Steps = new List <ScheduledStep> { new ScheduledStep { Id = Guid.NewGuid(), Text = "Step" } } }, new ScheduledTask { Id = Guid.Empty, Task = newTask, Name = newTask.Name, Start = 5.Hours(), End = 7.Hours(), Steps = new List <ScheduledStep>() } } }; var expectedDays = new List <Day> { existingDays[0], new Day { Id = updatedId, Date = existingDays[1].Date, Name = upsertedDbDay.Name, Tasks = upsertedDbDay.Tasks } }; var builder = new UpsertDayOperationBuilder() .WithEntity(existingDays.ToArray()) .WithEntity(newTask); var sut = builder.Build(); // Act var result = await sut.Execute((tenant.Id, upsertedDay)); // Assert result.Should().BeSucceeded(); builder.DbContext.Days.Should().BeEquivalentTo(expectedDays, ApplyExcludesForDays); builder.DbContext.ScheduledTasks.Should().BeEquivalentTo(upsertedDbDay.Tasks, ApplyExcludesForDays); }