Пример #1
0
        public void GetPieRecord_returns_expected_pie_for_valid_flavour(string inputFlavour, string expectedFlavour)
        {
            PieRecord expectedResult = getPieRecord(expectedFlavour);

            //Change the casing of some flavours - should be equal even if casing is different
            expectedResult.PieAudit[4].Flavour = expectedResult.PieAudit[4].Flavour.ToLower();
            expectedResult.PieAudit[5].Flavour = expectedResult.PieAudit[5].Flavour.ToUpper();
            SetUpMocks(expectedResult, expectedFlavour);

            var actualResult = uut.GetPieRecord(inputFlavour).GetAwaiter().GetResult();

            Assert.AreEqual(expectedFlavour, actualResult.PieRecord.MostRecent.Flavour);
            // Our NowAdapter lets us test that both pie and audit have a date time and it is the same date time
            Assert.AreEqual(fixedNow.ToString("T"), actualResult.PieRecord.MostRecent.LastMadeOn);
            Assert.AreEqual(fixedNow.ToString("T"), actualResult.PieRecord.PieAudit.First().LastMadeOn);
            Assert.IsNotNull(actualResult.PieRecord);
            Assert.AreEqual(expectedResult.PieAudit.Count, actualResult.PieRecord.PieAudit.Count);

            //Check each pie in the audit record is correct
            for (var i = 0; i < expectedResult.PieAudit.Count; i++)
            {
                Assert.IsTrue(expectedResult.PieAudit[i].Equals(actualResult.PieRecord.PieAudit[i]));
            }
            Assert.AreEqual(1, actualResult.PieRecord.PieAudit.Where(p => p.Flavour == expectedFlavour).Count());
        }
Пример #2
0
 private void SetUpMocks(PieRecord expectedResult, string expectedFlavour)
 {
     _mockPastryService.Setup(p => p.Get(validPastryQuantity)).Returns(validPastryQuantity);
     _mockFillingService.Setup(p => p.Get(expectedFlavour, validFillingQuantity)).Returns(validFillingQuantity);
     _mockNowService.Setup(p => p.Now()).Returns(fixedNow);
     _mockDataService.Setup(p => p.BakePie(expectedFlavour, validPastryQuantity, validFillingQuantity, fixedNow)).ReturnsAsync(expectedResult.MostRecent);
     _mockDataService.Setup(p => p.GetPieAudit()).ReturnsAsync(expectedResult.PieAudit);
 }
Пример #3
0
        public void GetPieRecord_attempts_pastry_order_if_needed()
        {
            PieRecord expectedResult = getPieRecord(someValidFlavour);

            SetUpMocks(expectedResult, someValidFlavour);
            _mockPastryService.Setup(p => p.Get(It.IsAny <int>())).Throws <ArgumentException>();

            var actualResult = uut.GetPieRecord(someValidFlavour).GetAwaiter().GetResult();

            _mockLogger.Verify(p => p.Information("Ordering pastry. {CodeInfo}", It.IsAny <string>()), Times.Once());
            _mockPastryService.Verify(p => p.Order(), Times.Once());
        }
Пример #4
0
        public void GetPieRecord_attempts_filling_order_if_incorrect_filling_quantity_returned()
        {
            PieRecord expectedResult = getPieRecord(someValidFlavour);

            SetUpMocks(expectedResult, someValidFlavour);
            _mockFillingService.Setup(p => p.Get(someValidFlavour, It.IsAny <int>())).Throws <ArgumentException>();

            var actualResult = uut.GetPieRecord(someValidFlavour).GetAwaiter().GetResult();

            _mockLogger.Verify(p => p.Information("Ordering {Flavour} filling. {CodeInfo}", someValidFlavour, It.IsAny <string>()), Times.Once());
            _mockFillingService.Verify(p => p.Order(someValidFlavour), Times.Once());
        }
Пример #5
0
        public void GetPieRecord_returns_Ok_and_logs_error_for_no_pie_audit(string emptyType)
        {
            PieRecord expectedResult = getPieRecord(someValidFlavour);

            expectedResult.PieAudit = emptyType == null ? null : new List <Pie>();
            SetUpMocks(expectedResult, someValidFlavour);

            var actualResult = uut.GetPieRecord(someValidFlavour).GetAwaiter().GetResult();

            _mockLogger.Verify(p => p.Error("No pie audit. {CodeInfo}", It.IsAny <string>()), Times.Once());
            Assert.AreEqual(Ok, actualResult.StatusCodeHttp);
            Assert.AreEqual(expectedResult.PieAudit?.Count(), actualResult.PieRecord.PieAudit?.Count());
        }
Пример #6
0
        public void GetPieRecord_returns_InternalServerError_and_logs_error_for_no_pie()
        {
            PieRecord expectedResult = getPieRecord(someValidFlavour);

            expectedResult.MostRecent = null;
            SetUpMocks(expectedResult, someValidFlavour);

            var actualResult = uut.GetPieRecord(someValidFlavour).GetAwaiter().GetResult();

            _mockLogger.Verify(p => p.Error("{Flavour} Pie not made. {CodeInfo}", someValidFlavour, It.IsAny <string>()), Times.Once());
            Assert.AreEqual(InternalServerError, actualResult.StatusCodeHttp);
            Assert.IsNull(actualResult.PieRecord);
        }
Пример #7
0
        public void GetPieRecord_returns_InternalServerError_and_logs_error_for_unexpected_pastry_quantity(int invalid)
        {
            PieRecord expectedResult = getPieRecord(someValidFlavour);

            SetUpMocks(expectedResult, someValidFlavour);
            //overwrite this setup for this test
            _mockPastryService.Setup(p => p.Get(validPastryQuantity)).Returns(invalid);

            var actualResult = uut.GetPieRecord(someValidFlavour).GetAwaiter().GetResult();

            _mockLogger.Verify(p => p.Error("Pastry required {Required}. Pastry received {Received}. {CodeInfo}", validPastryQuantity, invalid, It.IsAny <string>()), Times.Once());
            Assert.AreEqual(InternalServerError, actualResult.StatusCodeHttp);
            Assert.IsNull(actualResult.PieRecord);
        }
Пример #8
0
        public void GetPieRecord_returns_BadRequest_pie_for_invalid_flavour(string inputFlavour)
        {
            PieRecord expectedResult = getPieRecord(inputFlavour);

            SetUpMocks(expectedResult, inputFlavour);
            // We have to recreate the Array here. If the list of recognised flavours was moved to the data service then we wouldn't need to do this.
            // Our uut service would be cleaner and our test less brittle
            string[] RecognisedFlavours = { "Cherry", "Apple", "Cheese" };

            var actualResult = uut.GetPieRecord(inputFlavour).GetAwaiter().GetResult();

            // Verify for serilog calls fails for null. Hence inputFlavour is It.IsAny<string>()
            // CodeInfo contains the line number of the calling code so can change.  The line number has no affect on functionality hence it is It.IsAny<string>()
            _mockLogger.Verify(p => p.Warning("Flavour {Flavour} not allowed. Allowed flavours {RecognisedFlavours}. {CodeInfo}",
                                              It.IsAny <string>(), RecognisedFlavours, It.IsAny <string>()), Times.Once());

            Assert.AreEqual(BadRequest, actualResult.StatusCodeHttp);
            Assert.IsNull(actualResult.PieRecord);
        }
Пример #9
0
        public void GetPie_cherry()
        {
            PieService pieService = new PieService();
            Pie        pie        = new Pie
            {
                Flavour    = "cherry",
                LastMadeOn = DateTime.Now.ToString("T")
            };
            PieRecord expectedResult = new PieRecord
            {
                MostRecent = pie,
                PieAudit   = new List <Pie> {
                    pie
                }
            };

            var actualResult = pieService.GetPieRecord("cherry").GetAwaiter().GetResult();

            Assert.AreEqual("cherry", actualResult.MostRecent.Flavour);
            Assert.AreEqual(DateTime.Now.ToString("T"), actualResult.MostRecent.LastMadeOn);
            Assert.AreEqual(1, actualResult.PieAudit.Count);
            Assert.AreEqual(1, actualResult.PieAudit.Where(p => p.Flavour == "cherry").Count());
        }