diff --git a/drinkMe.Server.Tests/ControllerTests/DrinksControllerTest.cs b/drinkMe.Server.Tests/ControllerTests/DrinksControllerTest.cs new file mode 100644 index 0000000..4d12082 --- /dev/null +++ b/drinkMe.Server.Tests/ControllerTests/DrinksControllerTest.cs @@ -0,0 +1,149 @@ +using collAnon.Pub.Shared; +using drinkMe.Server.Controllers; +using drinkMe.Server.Services.Interfaces; +using drinkMe.Shared; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Xunit; + +namespace drinkMe.Server.Tests +{ + public class DrinksControllerTest + { + readonly IDataService DataService; + readonly IPaymentService PaymentService; + + public DrinksControllerTest(IDataService dataService, IPaymentService paymentService) + { + DataService = dataService; + PaymentService = paymentService; + } + + [Theory] + [InlineData("D1AMOND_HANDS")] + public async Task IsValidDiscountCode_Test_DiscountFound(string code) + { + var controller = new DrinksController(DataService, PaymentService); + Assert.NotNull(controller); + var result = await controller.IsValidDiscountCode(code); + Assert.NotNull(result); + Assert.IsType(result); + var okResult = result as OkObjectResult; + Assert.NotNull(okResult.Value); + Assert.Equal(okResult.StatusCode, StatusCodes.Status200OK); + Assert.IsType(okResult.Value); + var discountCodeData = okResult.Value as DiscountCodeViewModel; + Assert.Equal(discountCodeData.Code, code); + } + + [Theory] + [InlineData("NOT_MY_D4Y")] + public async Task IsValidDiscountCode_Test_DiscountNotFound(string code) + { + var controller = new DrinksController(DataService, PaymentService); + Assert.NotNull(controller); + var result = await controller.IsValidDiscountCode(code); + Assert.NotNull(result); + Assert.IsType(result); + var objectResult = result as ObjectResult; + Assert.NotNull(objectResult.Value); + Assert.Equal(objectResult.StatusCode, StatusCodes.Status404NotFound); + Assert.IsType(objectResult.Value); + var webResult = objectResult.Value as WebResult; + Assert.False(webResult.IsValid); + Assert.Equal(webResult.StatusCode, StatusCodes.Status404NotFound); + } + + [Fact] + public async Task GetDrinks_Test_NotEmpty() + { + var controller = new DrinksController(DataService, PaymentService); + Assert.NotNull(controller); + var result = await controller.GetDrinks(); + Assert.NotNull(result); + Assert.IsType(result); + var okResult = result as OkObjectResult; + Assert.NotNull(okResult.Value); + Assert.Equal(okResult.StatusCode, StatusCodes.Status200OK); + Assert.IsType(okResult.Value); + var drinks = okResult.Value as DrinkViewModel[]; + Assert.NotEmpty(drinks); + } + + [Fact] + public async Task Pay_Test_WithSuccess() + { + var purchaseCart = new PurchaseCart + { + IsPayedWithCash = true, + PurchasingItems = new List + { + new CartItem + { + Id = 1, + Quantity = 1 + } + } + }; + var controller = new DrinksController(DataService, PaymentService); + Assert.NotNull(controller); + var result = await controller.Pay(purchaseCart); + Assert.NotNull(result); + Assert.IsType(result); + var okResult = result as OkResult; + Assert.Equal(okResult.StatusCode, StatusCodes.Status200OK); + } + + [Fact] + public async Task Pay_Test_WithSuccess2() + { + var purchaseCart = new PurchaseCart + { + IsPayedWithCash = false, + CreditCardNumber = "4000123412341234", + CreditCardExpirationYear = "22", + CreditCardCVVCode = "333", + CreditCardExpirationMonth = "01", + PurchasingItems = new List + { + new CartItem + { + Id = 1, + Quantity = 1 + } + } + }; + var controller = new DrinksController(DataService, PaymentService); + Assert.NotNull(controller); + var result = await controller.Pay(purchaseCart); + Assert.NotNull(result); + Assert.IsType(result); + var okResult = result as OkResult; + Assert.Equal(okResult.StatusCode, StatusCodes.Status200OK); + } + + [Fact] + public async Task Pay_Test_WithoutSuccess() + { + var purchaseCart = new PurchaseCart + { + IsPayedWithCash = false + }; + var controller = new DrinksController(DataService, PaymentService); + Assert.NotNull(controller); + var result = await controller.Pay(purchaseCart); + Assert.NotNull(result); + Assert.IsType(result); + var badResult = result as BadRequestObjectResult; + Assert.NotNull(badResult.Value); + Assert.IsType(badResult.Value); + Assert.Equal(badResult.StatusCode, StatusCodes.Status400BadRequest); + var webResult = badResult.Value as WebResult; + Assert.False(webResult.IsValid); + Assert.Equal(webResult.StatusCode, StatusCodes.Status400BadRequest); + } + } +} diff --git a/drinkMe.Server.Tests/Startup.cs b/drinkMe.Server.Tests/Startup.cs new file mode 100644 index 0000000..d97beea --- /dev/null +++ b/drinkMe.Server.Tests/Startup.cs @@ -0,0 +1,20 @@ +using drinkMe.Server.Services; +using drinkMe.Server.Services.Interfaces; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace drinkMe.Server.Tests +{ + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddScoped() + .AddScoped(); + } + } +} diff --git a/drinkMe.Server.Tests/drinkMe.Server.Tests.csproj b/drinkMe.Server.Tests/drinkMe.Server.Tests.csproj new file mode 100644 index 0000000..6fa0099 --- /dev/null +++ b/drinkMe.Server.Tests/drinkMe.Server.Tests.csproj @@ -0,0 +1,28 @@ + + + + net5.0 + + false + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + diff --git a/drinkMe.sln b/drinkMe.sln index f89bb8e..c010fc9 100644 --- a/drinkMe.sln +++ b/drinkMe.sln @@ -13,6 +13,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "drinkMe.Client.Models", "dr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "drinkMe.Server.Models", "drinkMe\drinkMe.Server.Models\drinkMe.Server.Models.csproj", "{EC73DC9D-FD40-4505-989D-83B49018401D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "drinkMe.Server.Tests", "drinkMe.Server.Tests\drinkMe.Server.Tests.csproj", "{A8EAD5E1-209A-4E0E-A31E-BD3C3235C8E5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -39,6 +41,10 @@ Global {EC73DC9D-FD40-4505-989D-83B49018401D}.Debug|Any CPU.Build.0 = Debug|Any CPU {EC73DC9D-FD40-4505-989D-83B49018401D}.Release|Any CPU.ActiveCfg = Release|Any CPU {EC73DC9D-FD40-4505-989D-83B49018401D}.Release|Any CPU.Build.0 = Release|Any CPU + {A8EAD5E1-209A-4E0E-A31E-BD3C3235C8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8EAD5E1-209A-4E0E-A31E-BD3C3235C8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8EAD5E1-209A-4E0E-A31E-BD3C3235C8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8EAD5E1-209A-4E0E-A31E-BD3C3235C8E5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/drinkMe/Server/Services/PaymentService.cs b/drinkMe/Server/Services/PaymentService.cs index 56fe3c3..ea10d25 100644 --- a/drinkMe/Server/Services/PaymentService.cs +++ b/drinkMe/Server/Services/PaymentService.cs @@ -11,6 +11,13 @@ namespace drinkMe.Server.Services { public async Task Pay(PurchaseCart purchaseCart) { + if (!purchaseCart.IsPayedWithCash && + (purchaseCart.CreditCardNumber is { Length: 0 } || purchaseCart.CreditCardExpirationYear is { Length: 0 } || + purchaseCart.CreditCardExpirationMonth is { Length: 0 } || purchaseCart.CreditCardCVVCode is { Length: 0 })) + return false; + + if (purchaseCart.PurchasingItems.Count == 0) + return false; //completing the purchase return true; }