From 10fcc84379fd94ff55840a16add066882983d3f5 Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Tue, 3 Apr 2018 16:53:55 +0900 Subject: [PATCH] Properly test PoS --- BTCPayServer.Tests/BTCPayServerTester.cs | 2 +- BTCPayServer.Tests/TestAccount.cs | 5 ++ BTCPayServer.Tests/UnitTest1.cs | 78 ++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/BTCPayServer.Tests/BTCPayServerTester.cs b/BTCPayServer.Tests/BTCPayServerTester.cs index 1624bd05c..ea927fdd1 100644 --- a/BTCPayServer.Tests/BTCPayServerTester.cs +++ b/BTCPayServer.Tests/BTCPayServerTester.cs @@ -102,7 +102,7 @@ namespace BTCPayServer.Tests .ConfigureServices(s => { var mockRates = new MockRateProviderFactory(); - var btc = new MockRateProvider("BTC", new Rate("USD", 5000m)); + var btc = new MockRateProvider("BTC", new Rate("USD", 5000m), new Rate("CAD", 4500m)); var ltc = new MockRateProvider("LTC", new Rate("USD", 500m)); mockRates.AddMock(btc); mockRates.AddMock(ltc); diff --git a/BTCPayServer.Tests/TestAccount.cs b/BTCPayServer.Tests/TestAccount.cs index 61639ed30..cfcbdfdf3 100644 --- a/BTCPayServer.Tests/TestAccount.cs +++ b/BTCPayServer.Tests/TestAccount.cs @@ -54,6 +54,11 @@ namespace BTCPayServer.Tests return CreateStoreAsync().GetAwaiter().GetResult(); } + public T GetController() where T : Controller + { + return parent.PayTester.GetController(UserId); + } + public async Task CreateStoreAsync() { var store = parent.PayTester.GetController(UserId); diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index d52f203a7..fe28aff21 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -30,6 +30,8 @@ using BTCPayServer.Payments; using BTCPayServer.Payments.Bitcoin; using BTCPayServer.HostedServices; using BTCPayServer.Payments.Lightning; +using BTCPayServer.Models.AppViewModels; +using BTCPayServer.Services.Apps; namespace BTCPayServer.Tests { @@ -866,6 +868,82 @@ namespace BTCPayServer.Tests Assert.Equal($"{tpub}-[p2sh]", result.ToString()); } + [Fact] + public void CanUsePoSApp() + { + using (var tester = ServerTester.Create()) + { + tester.Start(); + var user = tester.NewAccount(); + user.GrantAccess(); + user.RegisterDerivationScheme("BTC"); + var apps = user.GetController(); + var vm = Assert.IsType(Assert.IsType(apps.CreateApp().Result).Model); + vm.Name = "test"; + vm.SelectedAppType = AppType.PointOfSale.ToString(); + Assert.IsType(apps.CreateApp(vm).Result); + var appId = Assert.IsType(Assert.IsType(apps.ListApps().Result).Model).Apps[0].Id; + var vmpos = Assert.IsType(Assert.IsType(apps.UpdatePointOfSale(appId).Result).Model); + vmpos.Title = "hello"; + vmpos.Currency = "CAD"; + vmpos.Template = + "apple:\n" + + " price: 5.0\n" + + " title: good apple\n" + + "orange:\n" + + " price: 10.0\n"; + Assert.IsType(apps.UpdatePointOfSale(appId, vmpos).Result); + vmpos = Assert.IsType(Assert.IsType(apps.UpdatePointOfSale(appId).Result).Model); + Assert.Equal("hello", vmpos.Title); + var vmview = Assert.IsType(Assert.IsType(apps.ViewPointOfSale(appId).Result).Model); + Assert.Equal("hello", vmview.Title); + Assert.Equal(2, vmview.Items.Length); + Assert.Equal("good apple", vmview.Items[0].Title); + Assert.Equal("orange", vmview.Items[1].Title); + Assert.Equal(10.0m, vmview.Items[1].Price.Value); + Assert.Equal("$5.00", vmview.Items[0].Price.Formatted); + Assert.IsType(apps.ViewPointOfSale(appId, "orange").Result); + var invoice = user.BitPay.GetInvoices().First(); + Assert.Equal(10.00, invoice.Price); + Assert.Equal("CAD", invoice.Currency); + Assert.Equal("orange", invoice.ItemDesc); + } + } + + [Fact] + public void CanCreateAndDeleteApps() + { + using (var tester = ServerTester.Create()) + { + tester.Start(); + var user = tester.NewAccount(); + user.GrantAccess(); + var user2 = tester.NewAccount(); + user2.GrantAccess(); + var apps = user.GetController(); + var apps2 = user2.GetController(); + var vm = Assert.IsType(Assert.IsType(apps.CreateApp().Result).Model); + Assert.NotNull(vm.SelectedAppType); + Assert.Null(vm.Name); + vm.Name = "test"; + var redirectToAction = Assert.IsType(apps.CreateApp(vm).Result); + Assert.Equal(nameof(apps.ListApps), redirectToAction.ActionName); + var appList = Assert.IsType(Assert.IsType(apps.ListApps().Result).Model); + var appList2 = Assert.IsType(Assert.IsType(apps2.ListApps().Result).Model); + Assert.Single(appList.Apps); + Assert.Empty(appList2.Apps); + Assert.Equal("test", appList.Apps[0].AppName); + Assert.True(appList.Apps[0].IsOwner); + Assert.Equal(user.StoreId, appList.Apps[0].StoreId); + Assert.IsType(apps2.DeleteApp(appList.Apps[0].Id).Result); + Assert.IsType(apps.DeleteApp(appList.Apps[0].Id).Result); + redirectToAction = Assert.IsType(apps.DeleteAppPost(appList.Apps[0].Id).Result); + Assert.Equal(nameof(apps.ListApps), redirectToAction.ActionName); + appList = Assert.IsType(Assert.IsType(apps.ListApps().Result).Model); + Assert.Empty(appList.Apps); + } + } + [Fact] public void InvoiceFlowThroughDifferentStatesCorrectly() {