Listing 1:
CREATE TABLE IF NOT EXISTS accounts ( user_id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY, email VARCHAR ( 255 ) UNIQUE NOT NULL, password VARCHAR ( 50 ) NOT NULL, first_name VARCHAR ( 50 ) NOT NULL, last_name VARCHAR ( 50 ) NOT NULL, created_on TIMESTAMP NOT NULL, last_login TIMESTAMP );
Listing 2:
#language: nl-NL Functionaliteit: Het klantenbestand kan worden opgeschoond Scenario: Een medewerker kan het klantenbestand opschonen Gegeven de medewerker Isabella Als de medewerker het klantenbestand opschoont Dan bevat het klantenbestand geen inactieve klanten meer die zijn aangemaakt voor 2020-01-01
Listing 3:
[When(@"de medewerker het klantenbestand opschoont")]
public void WhenDeMedewerkerHetKlantenbestandOpschoont()
{
_numberOfAccountsRemoved = _numberOfAccountsRemoved = _accountService.RemoveAllStaleAccounts();
}
Waarbij de functie “RemoveAllStaleAccounts()” het volgende SQL commando uitvoert: “DELETE FROM Accounts WHERE last_login is null AND created_on < '2020-01-01'”
Listing 4:
using DotNet.Testcontainers.Builders;
using DotNet.Testcontainers.Containers;
var testcontainersBuilder =
new TestcontainersBuilder()
.WithImage("hello-world")
.WithName("hello-world")
.WithOutputConsumer(Consume.RedirectStdoutAndStderrToConsole());
await using (var testcontainers = testcontainersBuilder.Build())
{
await testcontainers.StartAsync();
Console.ReadKey();
}
Listing 5:
public PostgreSqlFixture()
{
var testcontainersBuilder =
new TestcontainersBuilder()
.WithDatabase(new PostgreSqlTestcontainerConfiguration()
{
Database = "db",
Username = "db_user",
Password = "db_password",
})
.WithOutputConsumer(Consume.RedirectStdoutAndStderrToConsole())
.WithWaitStrategy(Wait.ForUnixContainer().UntilCommandIsCompleted($"pg_isready -h 'localhost' -p '5432'"));
Container = testcontainersBuilder.Build();
}
public async Task UseBackupFile(byte[] backupFile)
{
await Container.CopyFileAsync("/tmp/db_backup.dump", backupFile);
var command = "pg_restore --username=db_user --dbname=db -1 /tmp/db_backup.dump";
await Container.ExecAsync(command.Split(' '));
}
Listing 6:
[BeforeFeature]
public static async Task BeforeFeature(FeatureContext featureContext)
{
PostgreSqlFixture postgreSqlFixture = new();
await postgreSqlFixture.InitializeAsync();
await postgreSqlFixture.UseBackupFile(await File.ReadAllBytesAsync("Support/db_backup.dump"));
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseNpgsql(postgreSqlFixture.Connection!);
featureContext.Set(postgreSqlFixture);
}
Listing 7:
public async Task InitializeAsync()
{
await _semaphoreSlim.WaitAsync();
try
{
await new ImageFromDockerfileBuilder()
.WithName(this)
.WithDockerfileDirectory(CommonDirectoryPath.GetSolutionDirectory(), string.Empty)
.WithDockerfile("Dockerfile")
.WithBuildArgument("RESOURCE_REAPER_SESSION_ID", ResourceReaper.DefaultSessionId.ToString("D"))
.WithDeleteIfExists(false)
.Build();
}
finally
{
_semaphoreSlim.Release();
}
}
Listing 8:
_demoAppNetwork = new TestcontainersNetworkBuilder()
.WithName(Guid.NewGuid().ToString("D"))
.Build();
Listing 9:
new TestcontainersBuilder()
.WithImage(Image)
.WithNetwork(_demoAppNetwork)
.WithPortBinding(DemoAppImage.HttpsPort, true)
.WithEnvironment("ASPNETCORE_URLS", "https://+")
.WithEnvironment("ASPNETCORE_Kestrel__Certificates__Default__Path", DemoAppImage.CertificateFilePath)
.WithEnvironment("ASPNETCORE_Kestrel__Certificates__Default__Password", DemoAppImage.CertificatePassword)
.WithEnvironment("ConnectionStrings__StoreConnectionString", connectionString)
.WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(DemoAppImage.HttpsPort))
.Build();
Listing 10:
public async Task Get_Accounts_Should_Return_100_Pages_Of_Accounts()
{
// Arrange
string ScreenshotFileName() => $"{nameof(Get_Accounts_Should_Return_100_Pages_Of_Accounts)}_{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}.png";
using var chrome = new ChromeDriver(_chromeOptions);
// Act
chrome.Navigate().GoToUrl(_demoAppContainer.BaseAddress);
chrome.GetScreenshot().SaveAsFile(Path.Combine(CommonDirectoryPath.GetProjectDirectory().DirectoryPath, ScreenshotFileName()));
chrome.FindElement(By.Id("accounts_link")).Click();
await Task.Delay(TimeSpan.FromSeconds(5));
SDN – Software Development Network SDN – Software Development Network – De SDN verenigt software ontwikkelaars, architecten, ICT managers, studenten, new media developers en haar businesspartners met algemene interesse in alle aspecten van Microsoft en .NET.