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);
        }
Exemplo n.º 5
0
        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;
            }
        }