private async Task RunTestablesOnlyRunAllAsync(Test container, List <ControllerBase> testables, bool runAll) { foreach (var testable in testables) { var methods = testable.GetType() .GetMethods() .Where(testMethod => { var group = testMethod.GetCustomAttribute <SwaggerGroupAttribute>(); var hideInSwagger = testMethod.GetCustomAttribute <ApiExplorerSettingsAttribute>(); return(group != null && hideInSwagger == null && ((runAll && testMethod.Name == nameof(ITestable.RunAllAsync)) || (!runAll && testMethod.Name != nameof(ITestable.RunAllAsync))) && testMethod.Name != "TopLevelAllTestsAsync"); // Special for preventing loops in AllTestsController }) .ToList(); foreach (var method in methods) { Test test = null; try { #pragma warning disable 8632 var task = (Task <Test>)method.Invoke(testable, new object?[] { container }); #pragma warning restore 8632 test = await task; } catch (Exception e) { if (test != null) { await TestLogic.SetStateAsync(test, StateEnum.Failed, e.Message); } else { await TestLogic.SetStateAsync(container, StateEnum.Failed, e.Message); } } } } }
public async Task Publish(string entityName, string eventName, int major, int minor, JObject content) { ServiceContract.RequireNotNull(entityName, nameof(entityName)); ServiceContract.RequireNotNull(eventName, nameof(eventName)); ServiceContract.RequireGreaterThan(0, major, nameof(major)); ServiceContract.RequireGreaterThanOrEqualTo(0, minor, nameof(minor)); ServiceContract.RequireNotNull(content, nameof(content)); var correlationId = FulcrumApplication.Context.CorrelationId; var test = await _testLogic.GetAsync(correlationId); if (test != null) { try { var client = FulcrumApplication.Context.CallingClientName; var payload = JObject.FromObject(content); var result = await _integrationApiClient.TestBenchPublish(entityName, eventName, major, minor, client, payload); if (result.Verified) { await _integrationApiClient.PublishEvent(entityName, eventName, major, minor, client, payload); await _testLogic.SetStateAsync(test, StateEnum.Ok, "Event intercepted and verified with BE Test bench"); } else { var message = string.Join(", ", result.Errors) + $" | Contract: {JsonConvert.SerializeObject(result.Contract)}" + $" | Payload: {JsonConvert.SerializeObject(result.Payload)}"; await _testLogic.SetStateAsync(test, StateEnum.Failed, message); } } catch (Exception e) { await _testLogic.SetStateAsync(test, StateEnum.Failed, e.Message); } } }