Untitled

 avatar
unknown
plain_text
2 months ago
2.8 kB
7
Indexable
using Allure.Commons;
using System;
using TechTalk.SpecFlow;
using SAPAutomation.utils;

namespace SAPAutomation.steps
{
    [Binding] // ✅ REQUIRED for SpecFlow to detect Hooks!
    public class Hooks
    {
        private readonly ScenarioContext _scenarioContext;
        private readonly FeatureContext _featureContext;

        public Hooks(ScenarioContext scenarioContext, FeatureContext featureContext)
        {
            _scenarioContext = scenarioContext;
            _featureContext = featureContext;
        }

        [BeforeTestRun]
        public static void BeforeTestRun()
        {
            Console.WriteLine("[DEBUG] Running BeforeTestRun Hook.");
            AllureLifecycle.Instance.CleanupResultDirectory(); // Clean previous Allure results
        }

        [BeforeFeature]
        public void BeforeFeature()
        {
            Console.WriteLine($"[DEBUG] Running BeforeFeature Hook: {_featureContext.FeatureInfo.Title}");

            if (!_featureContext.ContainsKey("Allure.Net.Commons.AllureContext"))
            {
                string containerId = Guid.NewGuid().ToString();
                _featureContext["Allure.Net.Commons.AllureContext"] = containerId;

                var container = new TestResultContainer
                {
                    uuid = containerId,
                    name = _featureContext.FeatureInfo.Title
                };

                AllureLifecycle.Instance.StartTestContainer(container);
                Console.WriteLine($"[DEBUG] Created Allure Test Container: {containerId}");
            }
        }

        [BeforeScenario]
        public void BeforeScenario()
        {
            Console.WriteLine($"[DEBUG] Running BeforeScenario Hook: {_scenarioContext.ScenarioInfo.Title}");

            if (!_featureContext.TryGetValue("Allure.Net.Commons.AllureContext", out string featureContainerId))
            {
                Console.WriteLine("[WARNING] AllureContext missing! Initializing...");
                featureContainerId = Guid.NewGuid().ToString();
                _featureContext["Allure.Net.Commons.AllureContext"] = featureContainerId;
            }

            string testUuid = Guid.NewGuid().ToString();
            _scenarioContext["AllureTestUuid"] = testUuid;

            var testResult = new TestResult
            {
                uuid = testUuid,
                name = _scenarioContext.ScenarioInfo.Title,
                start = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
            };

            AllureLifecycle.Instance.StartTestCase(testResult);
            AllureLifecycle.Instance.UpdateTestContainer(featureContainerId, container =>
            {
                container.children.Add(testUuid);
            });
        }
    }
}
Editor is loading...
Leave a Comment