using NUnit.Framework;
using OpenQA.Selenium;
using Reqnroll;
namespace Muchuos.Qa.Release;
[TestFixture]
public class CheckoutGate
{
private IWebDriver _driver;
[Test]
public async Task PaymentRetry_OnDeclinedCard()
{
await _driver.Navigate()
.GoToUrlAsync("/checkout");
var retry = _driver.FindElement(
By.Id("pay-retry"));
Assert.That(retry.Displayed, Is.True);
Assert.That(_board.Call,
Is.EqualTo("wait"));
}
}
using NUnit.Framework;
using OpenQA.Selenium;
using Reqnroll;
namespace Muchuos.Qa.Release;
[TestFixture]
public class CheckoutGate
{
private IWebDriver _driver;
[Test]
public async Task PaymentRetry_OnDeclinedCard()
{
await _driver.Navigate()
.GoToUrlAsync("/checkout");
var retry = _driver.FindElement(
By.Id("pay-retry"));
Assert.That(retry.Displayed, Is.True);
Assert.That(_board.Call,
Is.EqualTo("wait"));
}
}
[Binding]
public sealed class ReleaseSteps
{
private readonly TestContext _ctx;
[Given(@"critical journeys are mapped")]
public void GivenJourneys()
{
_ctx.RiskMap.Load();
}
[When(@"the quality gate runs")]
public async Task WhenGateRuns()
{
await _ctx.Runner.ExecuteAsync();
}
[Then(@"the recommendation is (.*)")]
public void ThenCall(string call)
{
Assert.That(_ctx.Call, Is.EqualTo(call));
}
}
[Binding]
public sealed class ReleaseSteps
{
private readonly TestContext _ctx;
[Given(@"critical journeys are mapped")]
public void GivenJourneys()
{
_ctx.RiskMap.Load();
}
[When(@"the quality gate runs")]
public async Task WhenGateRuns()
{
await _ctx.Runner.ExecuteAsync();
}
[Then(@"the recommendation is (.*)")]
public void ThenCall(string call)
{
Assert.That(_ctx.Call, Is.EqualTo(call));
}
}
public async Task SignOff_WhenCriticalsAreGreen()
{
var failed = _report.Failed
.Where(d => d.Severity == "Critical");
if (failed.Any())
{
_board.Recommend("fix first");
return;
}
_board.Recommend("ship");
await _git.CommentAsync(
"Release QA: go-live approved.");
}
// evidence attached, not a ticket dump
await expect(page
.GetByRole("button", new() { Name = "Pay" }))
.ToBeEnabledAsync();
public async Task SignOff_WhenCriticalsAreGreen()
{
var failed = _report.Failed
.Where(d => d.Severity == "Critical");
if (failed.Any())
{
_board.Recommend("fix first");
return;
}
_board.Recommend("ship");
await _git.CommentAsync(
"Release QA: go-live approved.");
}
// evidence attached, not a ticket dump
await expect(page
.GetByRole("button", new() { Name = "Pay" }))
.ToBeEnabledAsync();
services.AddSelenium()
.AddNUnit()
.AddReqnroll();
[OneTimeSetUp]
public void Boot()
{
_driver = new ChromeDriver();
_driver.Manage().Timeouts()
.ImplicitWait = TimeSpan.FromSeconds(4);
}
[TearDown]
public void Capture()
{
if (TestContext.CurrentContext
.Result.Outcome.Status == Failed)
{
((ITakesScreenshot)_driver)
.GetScreenshot()
.SaveAsFile("evidence.png");
}
}
services.AddSelenium()
.AddNUnit()
.AddReqnroll();
[OneTimeSetUp]
public void Boot()
{
_driver = new ChromeDriver();
_driver.Manage().Timeouts()
.ImplicitWait = TimeSpan.FromSeconds(4);
}
[TearDown]
public void Capture()
{
if (TestContext.CurrentContext
.Result.Outcome.Status == Failed)
{
((ITakesScreenshot)_driver)
.GetScreenshot()
.SaveAsFile("evidence.png");
}
}
public sealed class WeeklyStatus
{
public int Passed { get; init; }
public int Failed { get; init; }
public int Blocked { get; init; }
public string Recommendation =>
Failed > 0 ? "wait" : "ship";
}
await pipeline.AddGateAsync(
name: "qa-release",
command: "dotnet test");
// CI in their repo, not ours
Assert.That(coverage.CriticalPaths,
Is.GreaterThanOrEqualTo(0.9));
public sealed class WeeklyStatus
{
public int Passed { get; init; }
public int Failed { get; init; }
public int Blocked { get; init; }
public string Recommendation =>
Failed > 0 ? "wait" : "ship";
}
await pipeline.AddGateAsync(
name: "qa-release",
command: "dotnet test");
// CI in their repo, not ours
Assert.That(coverage.CriticalPaths,
Is.GreaterThanOrEqualTo(0.9));
Welcome to Muchuo’s Centre
For Training & Development
Train for software testing, then sit with Muchuo’s QA Services on a supervised internship — in the room with the QA on the project, and on a live task where the client agrees.
Explore Courses →Latest Jobs
20 Software Testing jobs currently available
Senior Test Specialist
Gedu
Halifax
💰 Not specified
Apply →HV Test Engineer
BTP Recruit
Wokingham
💰 £40000 - £60000
Apply →Software Test
ibm
UK
💰 £43312.27 - £43312.27
Apply →Software Tester
Lime Street Recruitment Limited
The City, Central London
💰 £45000 - £45000
Apply →Software Tester
Rise Technical Recruitment
Farringdon, Central London
💰 £40000 - £50000
Apply →Software Tester
James Frank Associates
West Malling, Kent
💰 £30000 - £30000
Apply → See Job Board →About Us
At Muchuo’s Centre for Training & Development, we equip individuals with practical skills and industry-relevant knowledge to succeed in today’s competitive job market. Through hands-on training, mentorship, supervised internships as client work comes in, and career-focused support, we bridge the gap between education and employment — preparing learners with in-demand IT and business skills, guided by industry mentors, real-world projects, and inclusive learning tailored to all levels. Our vision is to create a global community of confident professionals, connected with top recruiters and employers, ready to thrive in roles such as Software Testing, Development, and Business Analysis. At Muchuo’s Centre, we don’t just teach — we build futures.