Converting Tests back to C# but still with Playwright
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
using Microsoft.Playwright.NUnit;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Tests.Specs;
|
||||
|
||||
[Parallelizable(ParallelScope.Self)]
|
||||
[FixtureLifeCycle(LifeCycle.SingleInstance)]
|
||||
public class BuildCalculatorTests : PageTest
|
||||
{
|
||||
private Helpers.Website _website = null!;
|
||||
|
||||
[SetUp]
|
||||
public void CreateWebsite() => _website = new Helpers.Website(Page);
|
||||
|
||||
[Test]
|
||||
public async Task AddEntitiesViaKeyboardQWE()
|
||||
{
|
||||
var calc = _website.BuildCalculatorPage;
|
||||
await calc.GotoAsync();
|
||||
|
||||
await calc.Filter.SelectFactionAsync("Q'Rath");
|
||||
await calc.Filter.SelectImmortalAsync("Orzum");
|
||||
|
||||
await calc.Hotkeys.ClickKeyAsync("TAB");
|
||||
|
||||
var keyMap = new Dictionary<string, string> { ["Q"] = "q", ["W"] = "w", ["E"] = "e", ["TAB"] = "Tab" };
|
||||
|
||||
foreach (var key in new[] { "Q", "W", "E", "TAB" })
|
||||
{
|
||||
var entityNames = await calc.Hotkeys.GetEntityNamesOnKeyAsync(key);
|
||||
if (entityNames.Count == 0) continue;
|
||||
|
||||
await Page.Keyboard.PressAsync(keyMap[key]);
|
||||
|
||||
var viewName = await calc.EntityView.GetEntityNameAsync();
|
||||
Assert.That(viewName, Is.Not.Null.And.Not.Empty);
|
||||
Assert.That(entityNames, Does.Contain(viewName));
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task AddEntitiesViaHotkeysClickTABQWE()
|
||||
{
|
||||
var calc = _website.BuildCalculatorPage;
|
||||
await calc.GotoAsync();
|
||||
|
||||
await calc.Filter.SelectFactionAsync("Q'Rath");
|
||||
await calc.Filter.SelectImmortalAsync("Orzum");
|
||||
|
||||
foreach (var key in new[] { "TAB", "Q", "W", "E" })
|
||||
{
|
||||
var entityNames = await calc.Hotkeys.GetEntityNamesOnKeyAsync(key);
|
||||
if (entityNames.Count == 0) continue;
|
||||
|
||||
await calc.Hotkeys.ClickKeyAsync(key);
|
||||
|
||||
var viewName = await calc.EntityView.GetEntityNameAsync();
|
||||
Assert.That(viewName, Is.Not.Null.And.Not.Empty);
|
||||
Assert.That(entityNames, Does.Contain(viewName));
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task AddAcropolisViaQVerifyEntityViewAndTimelineThenClear()
|
||||
{
|
||||
var calc = _website.BuildCalculatorPage;
|
||||
await calc.GotoAsync();
|
||||
|
||||
await calc.Filter.SelectFactionAsync("Q'Rath");
|
||||
await calc.Filter.SelectImmortalAsync("Orzum");
|
||||
|
||||
Assert.That(await calc.Timeline.ContainsEntityAsync("Acropolis"), Is.False);
|
||||
|
||||
await calc.Hotkeys.ClickKeyAsync("Q");
|
||||
|
||||
Assert.That(await calc.EntityView.GetEntityNameAsync(), Is.EqualTo("Acropolis"));
|
||||
Assert.That(await calc.Timeline.ContainsEntityAsync("Acropolis"), Is.True);
|
||||
|
||||
await calc.ClickClearBuildOrderAsync();
|
||||
await Task.Delay(1000);
|
||||
|
||||
Assert.That(await calc.Timeline.ContainsEntityAsync("Acropolis"), Is.False);
|
||||
Assert.That(await calc.EntityView.GetEntityNameAsync(), Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task MissingRequirementsToastWhenBuildingSoulFoundryWithoutLegionHall()
|
||||
{
|
||||
var calc = _website.BuildCalculatorPage;
|
||||
await calc.GotoAsync();
|
||||
|
||||
await calc.Filter.SelectFactionAsync("Q'Rath");
|
||||
await calc.Filter.SelectImmortalAsync("Orzum");
|
||||
|
||||
await calc.Hotkeys.ClickKeyAsync("E");
|
||||
var hasToast = await calc.Toast.HasToastContainingAsync("Missing Requirements");
|
||||
Assert.That(hasToast, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task NotEnoughEtherToastWhenBuildingSoulFoundryAfterLegionHall()
|
||||
{
|
||||
var calc = _website.BuildCalculatorPage;
|
||||
await calc.GotoAsync();
|
||||
|
||||
await calc.Filter.SelectFactionAsync("Q'Rath");
|
||||
await calc.Filter.SelectImmortalAsync("Orzum");
|
||||
|
||||
await calc.Hotkeys.ClickKeyAsync("W");
|
||||
await calc.Hotkeys.ClickKeyAsync("E");
|
||||
|
||||
var hasToast = await calc.Toast.HasToastContainingAsync("Not Enough Ether");
|
||||
Assert.That(hasToast, Is.True);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
using Microsoft.Playwright.NUnit;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Tests.Specs;
|
||||
|
||||
[Parallelizable(ParallelScope.Self)]
|
||||
[FixtureLifeCycle(LifeCycle.SingleInstance)]
|
||||
public class HarassCalculatorTests : PageTest
|
||||
{
|
||||
private Helpers.Website _website = null!;
|
||||
|
||||
[SetUp]
|
||||
public void CreateWebsite() => _website = new Helpers.Website(Page);
|
||||
|
||||
[Test]
|
||||
public async Task CalculatorInput()
|
||||
{
|
||||
var page = _website.HarassCalculatorPage;
|
||||
await page.GotoAsync();
|
||||
await page.SetWorkersLostToHarassAsync(3);
|
||||
await page.SetNumberOfTownHallsExistingAsync(2);
|
||||
await page.SetTownHallTravelTimeAsync(0, 30);
|
||||
var result = await page.GetTotalAlloyHarassmentAsync();
|
||||
Assert.That(result, Is.EqualTo(240));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task CalculatedExampleInformation()
|
||||
{
|
||||
var page = _website.HarassCalculatorPage;
|
||||
await page.GotoAsync();
|
||||
|
||||
Assert.Multiple(async () =>
|
||||
{
|
||||
Assert.That(await page.GetExampleTotalAlloyLossAsync(), Is.EqualTo(720));
|
||||
Assert.That(await page.GetExampleWorkerCostAsync(), Is.EqualTo(300));
|
||||
Assert.That(await page.GetExampleMiningTimeCostAsync(), Is.EqualTo(420));
|
||||
Assert.That(await page.GetExampleTotalAlloyLossAccurateAsync(), Is.EqualTo(450));
|
||||
Assert.That(await page.GetExampleTotalAlloyLossDifferenceAsync(), Is.EqualTo(300));
|
||||
Assert.That(await page.GetExampleTotalAlloyLossAccurateDifferenceAsync(), Is.EqualTo(270));
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using Microsoft.Playwright.NUnit;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Tests.Specs;
|
||||
|
||||
[Parallelizable(ParallelScope.Self)]
|
||||
[FixtureLifeCycle(LifeCycle.SingleInstance)]
|
||||
public class LinksTests : PageTest
|
||||
{
|
||||
private Helpers.Website _website = null!;
|
||||
|
||||
[SetUp]
|
||||
public void CreateWebsite() => _website = new Helpers.Website(Page);
|
||||
|
||||
[Test]
|
||||
public async Task VerifyPageLinks()
|
||||
{
|
||||
_website = new Helpers.Website(Page);
|
||||
|
||||
await _website.HarassCalculatorPage.GotoAsync();
|
||||
var harassLinks = await _website.HarassCalculatorPage.GetLinksAsync();
|
||||
foreach (var link in harassLinks) await VerifyLinkAsync(link);
|
||||
|
||||
await _website.DatabasePage.GotoAsync();
|
||||
var dbLinks = await _website.DatabasePage.GetLinksAsync();
|
||||
foreach (var link in dbLinks) await VerifyLinkAsync(link);
|
||||
|
||||
await _website.DatabaseSinglePage.GotoWithSearchAsync("throne");
|
||||
var singleLinks = await _website.DatabaseSinglePage.GetLinksAsync();
|
||||
foreach (var link in singleLinks) await VerifyLinkAsync(link);
|
||||
}
|
||||
|
||||
private static async Task VerifyLinkAsync(string link)
|
||||
{
|
||||
if (link.StartsWith("mailto")) return;
|
||||
|
||||
using var client = new System.Net.Http.HttpClient();
|
||||
var response = await client.GetAsync(link);
|
||||
Assert.That(response.IsSuccessStatusCode, Is.True, $"Link '{link}' returned {response.StatusCode}");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
using Microsoft.Playwright.NUnit;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace Tests.Specs;
|
||||
|
||||
[Parallelizable(ParallelScope.Self)]
|
||||
[FixtureLifeCycle(LifeCycle.SingleInstance)]
|
||||
public class SearchFeaturesTests : PageTest
|
||||
{
|
||||
private Helpers.Website _website = null!;
|
||||
|
||||
[SetUp]
|
||||
public void CreateWebsite() => _website = new Helpers.Website(Page);
|
||||
|
||||
[Test]
|
||||
public async Task DesktopOpenCloseSearchDialog()
|
||||
{
|
||||
await _website.GotoAsync();
|
||||
await _website.NavigationBar.ClickSearchButtonAsync();
|
||||
await _website.SearchDialog.CloseDialogAsync();
|
||||
await _website.NavigationBar.ClickHomeLinkAsync();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task DesktopSearchForThrone()
|
||||
{
|
||||
await _website.GotoAsync();
|
||||
await _website.NavigationBar.ClickSearchButtonAsync();
|
||||
await _website.SearchDialog.SearchAsync("Throne");
|
||||
await _website.SearchDialog.SelectSearchEntityAsync("Throne");
|
||||
|
||||
var name = await _website.DatabaseSinglePage.GetEntityNameAsync();
|
||||
var health = await _website.DatabaseSinglePage.GetEntityHealthAsync();
|
||||
|
||||
Assert.That(name, Is.EqualTo("Throne"));
|
||||
Assert.That(health.Trim(), Is.Not.Empty);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task DesktopFilterForThrone()
|
||||
{
|
||||
var page = _website.DatabasePage;
|
||||
await page.GotoAsync();
|
||||
await page.FilterNameAsync("Throne");
|
||||
var name = await page.GetEntityNameByIndexAsync(0);
|
||||
Assert.That(name, Is.EqualTo("Throne"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task SeeThroneByDefault()
|
||||
{
|
||||
var page = _website.DatabasePage;
|
||||
await page.GotoAsync();
|
||||
var name = await page.GetEntityNameAsync("army", "throne");
|
||||
Assert.That(name, Is.EqualTo("Throne"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task DirectLinkNotThroneFailure()
|
||||
{
|
||||
var page = _website.DatabaseSinglePage;
|
||||
await page.GotoWithSearchAsync("not throne");
|
||||
var invalidSearch = await page.GetInvalidSearchAsync();
|
||||
var validSearch = await page.GetValidSearchAsync();
|
||||
Assert.That(invalidSearch, Is.EqualTo("not throne"));
|
||||
Assert.That(validSearch, Is.EqualTo("Throne"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user