public void ShouldExecuteCallback() { var appointment = fixture.Create <Appointment>(); appointment.Start = DateTime.Today.AddDays(1).AddHours(10); appointment.End = DateTime.Today.AddDays(1).AddHours(12); var count = 0; Func <Appointment, Task <int> > callback = a => { var expectedAppt = appointment; expectedAppt.Start = appointment.Start.ToUniversalTime(); expectedAppt.End = appointment.End.ToUniversalTime(); if (JsonConvert.SerializeObject(a) == JsonConvert.SerializeObject(expectedAppt)) { count++; return(Task.FromResult(1)); } return(Task.FromResult(0)); }; var translatorMock = new Mock <ITranslator>(); var contextMock = new Mock <IContext>(); contextMock.Setup(m => m.GetService <ITranslator>()).Returns(translatorMock.Object); var model = new ModifyAppointmentViewModel(contextMock.Object); model.SubmitAsync(appointment, callback).Wait(); Assert.Equal(1, count); }
public void ShouldValidateBusinessHours(DateTime start, DateTime end) { Func <Appointment, Task <int> > callback = a => Task.FromResult(1); var expectedMsg = "This is a bad time"; var appointment = new Appointment { Start = start, End = end }; var translatorMock = new Mock <ITranslator>(); translatorMock.Setup(m => m.Translate("appointment.outOfHoursError", It.IsAny <object>())).Returns(expectedMsg); var contextMock = new Mock <IContext>(); contextMock.Setup(m => m.GetService <ITranslator>()).Returns(translatorMock.Object); var model = new ModifyAppointmentViewModel(contextMock.Object); var ex = Assert.ThrowsAsync <PublicException>(() => model.SubmitAsync(appointment, callback)).Result; Assert.Equal("out-of-business-hours", ex.Id); Assert.Equal(expectedMsg, ex.Message); }
public void ShouldHandleOverlappingError() { var expectedMsg = "This is an invalid time slot"; var appointment = fixture.Create <Appointment>(); appointment.Start = DateTime.Today.AddDays(1).AddHours(10); appointment.End = DateTime.Today.AddDays(1).AddHours(12); Func <Appointment, Task <int> > callback = a => throw new OverlappingAppointmentException(DateTime.Today, DateTime.Now); var translatorMock = new Mock <ITranslator>(); translatorMock.Setup(m => m.Translate("appointment.overlappingAppointmentError", It.IsAny <object>())).Returns(expectedMsg); var contextMock = new Mock <IContext>(); contextMock.Setup(m => m.GetService <ITranslator>()).Returns(translatorMock.Object); var model = new ModifyAppointmentViewModel(contextMock.Object); var ex = Assert.ThrowsAsync <PublicException>(() => model.SubmitAsync(appointment, callback)).Result; Assert.Equal("overlapping-appointment", ex.Id); Assert.Equal(expectedMsg, ex.Message); }
public void ShouldHandleInvalidEntries() { var expectedMsg = "This is an invalid input"; var appointment = fixture.Create <Appointment>(); appointment.Start = DateTime.Today.AddDays(1).AddHours(10); appointment.End = DateTime.Today.AddDays(1).AddHours(12); Func <Appointment, Task <int> > callback = a => throw new InvalidEntityException("someProp"); var translatorMock = new Mock <ITranslator>(); translatorMock.Setup(m => m.Translate("appointment.requiredFieldError", It.IsAny <object>())).Returns(expectedMsg); var contextMock = new Mock <IContext>(); contextMock.Setup(m => m.GetService <ITranslator>()).Returns(translatorMock.Object); var model = new ModifyAppointmentViewModel(contextMock.Object); var ex = Assert.ThrowsAsync <PublicException>(() => model.SubmitAsync(appointment, callback)).Result; Assert.Equal("required-field-error", ex.Id); Assert.Equal(expectedMsg, ex.Message); }
private async void submitBtn_Click(object sender, EventArgs e) { errorLabel.Visible = false; if (_customer == null) // ensure that a customer has been selected. { errorLabel.Text = _translator.Translate("appointments.noCustomerSelected"); errorLabel.Visible = true; return; } Func <Appointment, Task <int> > callback; Appointment newAppt; if (_appointment == null) // create a new appointment { newAppt = new Appointment { CustomerId = _customer.Id, UserId = _context.CurrentUser.Id, Title = titleInput.Text, Description = descriptionInput.Text, Location = locationInput.Text, Crew = crewInput.Text, Type = typeInput.Text, Start = startInput.Value, End = endInput.Value, CreatedBy = _context.CurrentUser.Username, LastUpdatedBy = _context.CurrentUser.Username }; callback = _appointmentRepository.CreateAsync; } else // edit an existing appointment { newAppt = new Appointment { Id = _appointment.Id, CustomerId = _customer.Id, UserId = _context.CurrentUser.Id, Title = titleInput.Text, Description = descriptionInput.Text, Location = locationInput.Text, Crew = crewInput.Text, Type = typeInput.Text, Start = startInput.Value.ToLocalTime(), End = endInput.Value.ToLocalTime(), LastUpdatedBy = _context.CurrentUser.Username }; callback = _appointmentRepository.UpdateAsync; } try { await _viewModel.SubmitAsync(newAppt, callback); Close(); } catch (Exception ex) { errorLabel.Text = ex.Message; errorLabel.Visible = true; } }