public async void StartAppointmentShouldChangeTheStatusToHappening()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString());
            var appointmentsRepository  = new EfDeletableEntityRepository <Appointment>(new ApplicationDbContext(options.Options));
            var notificationsRepository = new EfDeletableEntityRepository <Notification>(new ApplicationDbContext(options.Options));

            var appointmentsService = new AppointmentsService(notificationsRepository, appointmentsRepository);

            var appointment = new Appointment
            {
                Status      = AppointmentStatus.Unprocessed,
                Date        = DateTime.UtcNow,
                StartTime   = DateTime.UtcNow,
                EndTime     = DateTime.UtcNow.AddMinutes(5),
                DogsitterId = "123",
                OwnerId     = "321",
            };

            await appointmentsService.CreateNewAppointment(appointment);

            await appointmentsService.StartAppointment(appointment.Id);

            Assert.Equal(AppointmentStatus.Happening.ToString(), appointmentsService.GetAppointment(appointment.Id).Status.ToString());
        }
        public async void EndAppointmentShouldChangeTheStatusToProcessed(AppointmentStatus status)
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString());
            var appointmentsRepository  = new EfDeletableEntityRepository <Appointment>(new ApplicationDbContext(options.Options));
            var notificationsRepository = new EfDeletableEntityRepository <Notification>(new ApplicationDbContext(options.Options));

            var appointmentsService = new AppointmentsService(notificationsRepository, appointmentsRepository);

            var appointment = new Appointment
            {
                Status    = status,
                Date      = DateTime.UtcNow,
                StartTime = DateTime.UtcNow,
                EndTime   = DateTime.UtcNow.AddMinutes(5),
                Dogsitter = new Dogsitter
                {
                    WageRate = 10,
                },
                Owner = new Owner(),
            };

            await appointmentsService.CreateNewAppointment(appointment);

            await appointmentsService.EndAppointment(appointment.Id);

            Assert.Equal(AppointmentStatus.Processed.ToString(), appointmentsService.GetAppointment(appointment.Id).Status.ToString());
        }
        public async void GetOwnerAppointmentsToListShouldReturnProperValues()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString());
            var appointmentsRepository  = new EfDeletableEntityRepository <Appointment>(new ApplicationDbContext(options.Options));
            var notificationsRepository = new EfDeletableEntityRepository <Notification>(new ApplicationDbContext(options.Options));

            var appointmentsService = new AppointmentsService(notificationsRepository, appointmentsRepository);

            var dogsitter = new Dogsitter();

            var owner = new Owner();

            var user = new ApplicationUser
            {
                Dogsitter = dogsitter,
                UserName  = "******",
                Email     = "*****@*****.**",
            };

            var user2 = new ApplicationUser
            {
                Owner    = owner,
                UserName = "******",
                Email    = "*****@*****.**",
            };

            var appointment = new Appointment
            {
                Status    = AppointmentStatus.Unprocessed,
                Date      = DateTime.UtcNow,
                StartTime = DateTime.UtcNow,
                EndTime   = DateTime.UtcNow.AddMinutes(5),
                Dogsitter = dogsitter,
                Owner     = owner,
            };

            dogsitter.Appointments.Add(appointment);
            dogsitter.UserId = user.Id;
            owner.Appointments.Add(appointment);
            owner.UserId = user2.Id;

            await appointmentsService.CreateNewAppointment(appointment);

            var appointments         = appointmentsService.GetOwnerAppointmentsToList(user2.Id);
            var comparedAppointments = String.Compare(appointment.Id, appointments.First().Id, StringComparison.Ordinal);

            Assert.Equal(0, comparedAppointments);
        }