Example #1
0
        private async Task TestEmptyValidation(Expression <Func <Medication, string> > fieldSelector, string field, [CallerMemberName] string name = null)
        {
            var controller = new MedicationsController(CreateDatabase(name));

            var testItem = _fixture.Build <Medication>().With(fieldSelector, "").Create();

            var result = await controller.AddMedication(testItem);

            result.Should().BeIsBlankResultForPath(field);
        }
Example #2
0
        public async Task GetReturnsNotFoundWithBadId()
        {
            PopulateDatabaseWithItems();

            var controller = new MedicationsController(CreateDatabase());

            var result = await controller.GetMedication(-1);

            result.Should().BeOfType <NotFoundResult>();
        }
Example #3
0
        public async Task GetAllReturnsAllItemsAsASummary()
        {
            var items = PopulateDatabaseWithItems();

            var controller = new MedicationsController(CreateDatabase());

            var result = await controller.GetAllMedications();

            result.Should().BeOkResultWithValue(items.Select(m => new MedicationSummary(m)));
        }
Example #4
0
        public async Task CreateReturnsBadRequestOnDuplicationName()
        {
            var items = PopulateDatabaseWithItems();

            var controller = new MedicationsController(CreateDatabase());

            var testItem = _fixture.Build <Medication>().With(m => m.Name, items.First().Name).Create();

            var result = await controller.AddMedication(testItem);

            result.Should().BeIsInUseResultForPath("name");
        }
Example #5
0
        public async Task DeleteMedicationReturnsNoContentOnBadRequest()
        {
            var items = PopulateDatabaseWithItems();

            var controller = new MedicationsController(CreateDatabase());

            var result = await controller.DeleteMedication(-1);

            result.Should().BeOfType <NoContentResult>();

            CreateDatabase().Medications.Should().BeEquivalentTo(items);
        }
Example #6
0
        public async Task DeleteMedicationRemovesItemOnGoodRequest()
        {
            var items = PopulateDatabaseWithItems();

            var controller = new MedicationsController(CreateDatabase());

            var result = await controller.DeleteMedication(items.First().Id);

            result.Should().BeOfType <NoContentResult>();

            (await CreateDatabase().Medications.AnyAsync(m => m.Id == items.First().Id)).Should().BeFalse();
        }
Example #7
0
        private async Task TestUpdateValidation(Expression <Func <Medication, string> > fieldSelector, string field, [CallerMemberName] string name = null)
        {
            var items      = PopulateDatabaseWithItems(name);
            var controller = new MedicationsController(CreateDatabase(name));

            var testItem = items.First();

            var updateItem = _fixture.Build <Medication>().With(fieldSelector, "").Create();

            var result = await controller.UpdateMedication(testItem.Id, updateItem);

            result.Should().BeIsBlankResultForPath(field);
        }
Example #8
0
        private static MedicationsController GetMedicationsController()
        {
            var emptyData   = Enumerable.Empty <Medication>().AsQueryable();
            var mockSet     = new Mock <DbSet <Medication> >();
            var mockContext = new Mock <AlphaMedicContext>();

            mockSet.As <IQueryable <Medication> >().Setup(m => m.Provider).Returns(emptyData.Provider);
            mockSet.As <IQueryable <Medication> >().Setup(m => m.Expression).Returns(emptyData.Expression);
            mockSet.As <IQueryable <Medication> >().Setup(m => m.ElementType).Returns(emptyData.ElementType);
            mockSet.As <IQueryable <Medication> >().Setup(m => m.GetEnumerator()).Returns(() => emptyData.GetEnumerator());
            mockContext.Setup(c => c.Medications).Returns(mockSet.Object);
            var service = new MedicationsController(mockContext.Object);

            return(service);
        }
Example #9
0
        private async Task GetReturnsItem(bool?etag = null, bool?lastModified = null, [CallerMemberName] string name = null)
        {
            var items    = PopulateDatabaseWithItems(name);
            var testItem = items.First();

            var controller = new MedicationsController(CreateDatabase(name))
            {
                ControllerContext = new ControllerContext
                {
                    HttpContext = new DefaultHttpContext()
                }
            };

            if (etag == true)
            {
                controller.Request.Headers["If-None-Match"] = testItem.GetEtag();
            }
            else if (etag == false)
            {
                controller.Request.Headers["If-None-Match"] = _fixture.Create <string>();
            }

            if (lastModified == true)
            {
                controller.Request.Headers["If-Modified-Since"] = testItem.LastModified.ToString(ModifiedDateFormat);
            }
            else if (lastModified == false)
            {
                controller.Request.Headers["If-Modified-Since"] = testItem.LastModified.AddDays(-1).ToString(ModifiedDateFormat);
            }

            var result = await controller.GetMedication(testItem.Id);

            if (etag == true || (lastModified == true && etag == null))
            {
                result.Should().BeOfType <StatusCodeResult>()
                .Which.StatusCode.Should().Be((int)HttpStatusCode.NotModified);
            }
            else
            {
                result.Should().BeOkResultWithValue(testItem);

                controller.Response.Headers.Should().Contain(KeyValuePair.Create("ETag", new StringValues(testItem.GetEtag())));
                controller.Response.Headers.Should().Contain(KeyValuePair.Create("Last-Modified", new StringValues(testItem.LastModified.ToUniversalTime().ToString(ModifiedDateFormat))));
            }
        }
Example #10
0
        public async Task CreateReturnsAddsItemOnGoodRequest()
        {
            PopulateDatabaseWithItems();

            var controller = new MedicationsController(CreateDatabase());

            var testItem = _fixture.Create <Medication>();

            var result = await controller.AddMedication(testItem);

            var newItem = await CreateDatabase().Medications.FirstOrDefaultAsync(m => m.Name == testItem.Name);

            testItem.Id = newItem.Id;
            newItem.Should().BeEquivalentTo(testItem);

            result.Should().BeCreatedResultWithValue($"/api/get-medication/{testItem.Id}", newItem);
        }
Example #11
0
        public async Task Get_NoInput_ReturnsMedications()
        {
            //ASSERT
            var medicationsController = new MedicationsController(context);

            //ACT
            var actionResult = await medicationsController.GetMedications();

            //ARRANGE
            Assert.IsType <ActionResult <IEnumerable <Medication> > >(actionResult);
            var genericMedications = actionResult.Value;
            var medications        = genericMedications as List <Medication>;

            Assert.Equal(3, medications.Count);
            Assert.Equal(1, medications[0].MedicationId);
            Assert.Equal("Ibuprofen", medications[1].MedicationDescription);
            Assert.Equal(1.47M, medications[2].MedicationCost);
        }
Example #12
0
        private async Task UpdateHandlesInputModel(bool goodId = true, bool duplicateName = false, [CallerMemberName] string name = null)
        {
            var items = PopulateDatabaseWithItems(name);

            var controller = new MedicationsController(CreateDatabase(name));

            var testItem = _fixture.Create <Medication>();

            var oldItem    = items.OrderBy(m => m.Id).First();
            var secondItem = items.OrderBy(m => m.Id).Skip(1).First();

            var oldId = goodId ? oldItem.Id : -1;

            if (duplicateName)
            {
                testItem.Name = secondItem.Name;
            }

            var result = await controller.UpdateMedication(oldId, testItem);

            var newItem = await CreateDatabase(name).Medications.FirstOrDefaultAsync(m => m.Id == oldItem.Id);

            if (goodId && !duplicateName)
            {
                testItem.Id = oldId;

                newItem.Should().BeEquivalentTo(testItem);

                result.Should().BeOkResultWithValue(newItem);
            }
            else
            {
                newItem.Should().BeEquivalentTo(oldItem);

                if (duplicateName)
                {
                    result.Should().BeIsInUseResultForPath("name");
                }
                else
                {
                    result.Should().BeOfType <NotFoundResult>();
                }
            }
        }