using JdeScoping.Ui.Tests.Helpers; namespace JdeScoping.Ui.Tests.Support; public abstract class SearchFlowTestBase(PlaywrightFixture fixture) : UiTestBase(fixture) { private static bool StrictMode => string.Equals(Environment.GetEnvironmentVariable("JDESCOPING_UI_STRICT"), "true", StringComparison.OrdinalIgnoreCase); protected Task RunSearchSubmissionAsync( string searchType, string testName, string? minDate = null, string? maxDate = null, (string PanelHeader, string Value)[]? autocompleteItems = null, (string PanelHeader, string FileName)[]? uploads = null) { return RunAsync(async page => { await UiNavigationHelper.NavigateToSearchPageAsync(page); await UiSearchFormHelper.EnterSearchNameAsync(page, testName); await UiSearchFormHelper.SelectSearchTypeAsync(page, searchType); await Assertions.Expect(page.Locator(".rz-dropdown-label").First).ToContainTextAsync(searchType); if (!StrictMode) { // Default mode is smoke-only against local docker where source systems can be offline. return; } if (!string.IsNullOrWhiteSpace(minDate) && !string.IsNullOrWhiteSpace(maxDate)) { await UiSearchFormHelper.SetDateRangeAsync(page, minDate, maxDate); } if (autocompleteItems is not null) { foreach (var item in autocompleteItems) { await UiSearchFormHelper.AddAutocompleteItemAsync(page, item.PanelHeader, item.Value); } } if (uploads is not null) { foreach (var upload in uploads) { await UiSearchFormHelper.UploadFileAsync(page, upload.PanelHeader, TestDataPaths.Get(upload.FileName)); } } await UiSearchFormHelper.SubmitSearchAsync(page); await UiSearchFormHelper.AssertNoErrorNotificationAsync(page); }); } }