public async Task CreateDonationThrowNoHospitalDataerrorTest()
        {
            var dbContext = ApplicationDbContextInMemoryFactory.InitializeContext();

            var donationEventRepository = new EfDeletableEntityRepository <DonationEvent>(dbContext);
            var bloodBankRepository     = new EfDeletableEntityRepository <BloodBank>(dbContext);
            var bagRepository           = new EfDeletableEntityRepository <BloodBag>(dbContext);
            var hospitalDataRepository  = new EfDeletableEntityRepository <HospitalData>(dbContext);
            var donorDataRepository     = new EfDeletableEntityRepository <DonorData>(dbContext);
            var requestRepository       = new EfDeletableEntityRepository <Request>(dbContext);
            var usersRepository         = new EfDeletableEntityRepository <ApplicationUser>(dbContext);
            var rolesRepository         = new EfDeletableEntityRepository <ApplicationRole>(dbContext);

            var service = new DonationEventsService(
                donationEventRepository,
                bloodBankRepository,
                bagRepository,
                hospitalDataRepository,
                donorDataRepository,
                requestRepository);

            await SeedDataAsync(dbContext);

            var serviceDonor = new DonorsService(donorDataRepository, usersRepository, rolesRepository);
            var user         = usersRepository.All().FirstOrDefault();
            await serviceDonor.CreateDonorProfileAsync(this.SeedInputs(), user.Id);

            var donorData = donorDataRepository.All().FirstOrDefault(dd => dd.ApplicationUserId == user.Id);

            await Assert.ThrowsAsync <ArgumentException>(() => service.CreateDonation("111", donorData.ApplicationUserId, 500, 0, BloodGroup.A, RhesusFactor.Negative));
        }
        public async Task CreateDonationShouldReturnNotNullTest()
        {
            var dbContext = ApplicationDbContextInMemoryFactory.InitializeContext();

            var donationEventRepository = new EfDeletableEntityRepository <DonationEvent>(dbContext);
            var bloodBankRepository     = new EfDeletableEntityRepository <BloodBank>(dbContext);
            var bagRepository           = new EfDeletableEntityRepository <BloodBag>(dbContext);
            var hospitalDataRepository  = new EfDeletableEntityRepository <HospitalData>(dbContext);
            var donorDataRepository     = new EfDeletableEntityRepository <DonorData>(dbContext);
            var requestRepository       = new EfDeletableEntityRepository <Request>(dbContext);

            var service = new DonationEventsService(
                donationEventRepository,
                bloodBankRepository,
                bagRepository,
                hospitalDataRepository,
                donorDataRepository,
                requestRepository);

            await SeedDataAsync(dbContext);

            var donationEvent = donationEventRepository.All().FirstOrDefault(de => de.RequestId == "123");

            Assert.NotNull(donationEvent);
        }
        public async Task CreateDonationThrowNoDonorDataerrorTest()
        {
            var dbContext = ApplicationDbContextInMemoryFactory.InitializeContext();

            var donationEventRepository = new EfDeletableEntityRepository <DonationEvent>(dbContext);
            var bloodBankRepository     = new EfDeletableEntityRepository <BloodBank>(dbContext);
            var bagRepository           = new EfDeletableEntityRepository <BloodBag>(dbContext);
            var hospitalDataRepository  = new EfDeletableEntityRepository <HospitalData>(dbContext);
            var donorDataRepository     = new EfDeletableEntityRepository <DonorData>(dbContext);
            var requestRepository       = new EfDeletableEntityRepository <Request>(dbContext);

            var service = new DonationEventsService(
                donationEventRepository,
                bloodBankRepository,
                bagRepository,
                hospitalDataRepository,
                donorDataRepository,
                requestRepository);

            await SeedDataAsync(dbContext);

            await Assert.ThrowsAsync <ArgumentException>(() => service.CreateDonation("111", "222", 500, 0, BloodGroup.A, RhesusFactor.Negative));
        }
        public async Task CreateDonationCorectlyTest()
        {
            var dbContext = ApplicationDbContextInMemoryFactory.InitializeContext();

            var donationEventRepository = new EfDeletableEntityRepository <DonationEvent>(dbContext);
            var bloodBankRepository     = new EfDeletableEntityRepository <BloodBank>(dbContext);
            var bagRepository           = new EfDeletableEntityRepository <BloodBag>(dbContext);
            var hospitalDataRepository  = new EfDeletableEntityRepository <HospitalData>(dbContext);
            var donorDataRepository     = new EfDeletableEntityRepository <DonorData>(dbContext);
            var requestRepository       = new EfDeletableEntityRepository <Request>(dbContext);
            var usersRepository         = new EfDeletableEntityRepository <ApplicationUser>(dbContext);
            var rolesRepository         = new EfDeletableEntityRepository <ApplicationRole>(dbContext);

            var service = new DonationEventsService(
                donationEventRepository,
                bloodBankRepository,
                bagRepository,
                hospitalDataRepository,
                donorDataRepository,
                requestRepository);


            var userDonor = new ApplicationUser
            {
                UserName = "******",
                Email    = "*****@*****.**",
            };
            await dbContext.Users.AddAsync(userDonor);

            var donor = new DonorData
            {
                ApplicationUserId = userDonor.Id,
            };
            await dbContext.DonorData.AddAsync(donor);

            var userHospital = new ApplicationUser
            {
                UserName = "******",
                Email    = "*****@*****.**",
            };
            await dbContext.Users.AddAsync(userDonor);

            var hospital = new HospitalData
            {
                ApplicationUserId = userHospital.Id,
            };
            await dbContext.HospitalData.AddAsync(hospital);

            var bloodBank = new BloodBank
            {
                HospitalDataId = hospital.Id,
            };
            await dbContext.BloodBanks.AddAsync(bloodBank);

            hospital.BloodBank = bloodBank;

            await dbContext.SaveChangesAsync();

            await service.CreateDonation(hospital.Id, donor.ApplicationUserId, 500, 0, BloodGroup.A, RhesusFactor.Negative);

            var donotionEvent = donationEventRepository.All().FirstOrDefault(de => de.UserDonorId == donor.ApplicationUserId);

            Assert.NotNull(donotionEvent);
        }