using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using BTCPayServer.Tests.Logging; using Microsoft.AspNetCore.Mvc; using OpenQA.Selenium; using Xunit; namespace BTCPayServer.Tests { public static class Extensions { public static void AssertNoError(this IWebDriver driver) { try { Assert.NotNull(driver.FindElement(By.ClassName("navbar-brand"))); } catch { StringBuilder builder = new StringBuilder(); builder.AppendLine(); foreach (var logKind in new []{ LogType.Browser, LogType.Client, LogType.Driver, LogType.Server }) { try { var logs = driver.Manage().Logs.GetLog(logKind); builder.AppendLine($"Selenium [{logKind}]:"); foreach (var entry in logs) { builder.AppendLine($"[{entry.Level}]: {entry.Message}"); } } catch { } builder.AppendLine($"---------"); } Logs.Tester.LogInformation(builder.ToString()); builder = new StringBuilder(); builder.AppendLine($"Selenium [Sources]:"); builder.AppendLine(driver.PageSource); builder.AppendLine($"---------"); Logs.Tester.LogInformation(builder.ToString()); throw; } } public static T AssertViewModel(this IActionResult result) { Assert.NotNull(result); var vr = Assert.IsType(result); return Assert.IsType(vr.Model); } public static async Task AssertViewModelAsync(this Task task) { var result = await task; Assert.NotNull(result); var vr = Assert.IsType(result); return Assert.IsType(vr.Model); } } }