diff --git a/BTCPayServer.Tests/UnitTest1.cs b/BTCPayServer.Tests/UnitTest1.cs index b5f6fc803..ca29fccd5 100644 --- a/BTCPayServer.Tests/UnitTest1.cs +++ b/BTCPayServer.Tests/UnitTest1.cs @@ -3103,5 +3103,65 @@ namespace BTCPayServer.Tests .GetResult()) .Where(i => i.GetAddress() == h).Any(); } + + + class MockVersionFetcher : IVersionFetcher + { + public const string MOCK_NEW_VERSION = "9.9.9.9"; + public Task Fetch(CancellationToken cancellation) + { + return Task.FromResult(MOCK_NEW_VERSION); + } + } + + [Fact(Timeout = TestTimeout)] + [Trait("Integration", "Integration")] + public async Task CanCheckForNewVersion() + { + using (var tester = ServerTester.Create(newDb: true)) + { + await tester.StartAsync(); + + var acc = tester.NewAccount(); + acc.GrantAccess(true); + + var settings = tester.PayTester.GetService(); + await settings.UpdateSetting(new PoliciesSettings() { CheckForNewVersions = true }); + + var envMock = tester.PayTester.GetService(); + // modifying environment to simulate production + envMock.NetworkType = NetworkType.Mainnet; + envMock.Environment.EnvironmentName = "Production"; + + var notificationSender = tester.PayTester.GetService(); + + var svc = new NewVersionCheckerHostedService(settings, envMock, notificationSender, new MockVersionFetcher()); + await svc.ProcessVersionCheck(); + + // since last version present in database was null, it should've been updated with version mock returned + var lastVersion = await settings.GetSettingAsync(); + Assert.Equal(MockVersionFetcher.MOCK_NEW_VERSION, lastVersion.LastVersion); + + // we should also have notification in UI + var ctrl = acc.GetController(); + var newVersion = MockVersionFetcher.MOCK_NEW_VERSION; + + var vm = Assert.IsType( + Assert.IsType(ctrl.Index()).Model); + + Assert.True(vm.Skip == 0); + Assert.True(vm.Count == 50); + Assert.True(vm.Total == 1); + Assert.True(vm.Items.Count == 1); + + var fn = vm.Items.First(); + var now = DateTimeOffset.UtcNow; + Assert.True(fn.Created >= now.AddSeconds(-3)); + Assert.True(fn.Created <= now); + Assert.Equal($"New version {newVersion} released!", fn.Body); + Assert.Equal($"https://github.com/btcpayserver/btcpayserver/releases/tag/v{newVersion}", fn.ActionLink); + Assert.False(fn.Seen); + } + } } }