Untitled

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

namespace SAPAutomation.steps
{
    [Binding]
    public class Hooks
    {
        private readonly ScenarioContext _scenarioContext;
        private readonly FeatureContext _featureContext;
        private readonly SapHelper _sapHelper = new SapHelper();

        private const string TestUuidKey = "AllureTestUuid"; 
        private const string FeatureContainerKey = "AllureFeatureContainer"; 

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

        [BeforeFeature]
        public static void BeforeFeature(FeatureContext featureContext)
        {
            string containerId = Guid.NewGuid().ToString();
            featureContext[FeatureContainerKey] = containerId;

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

            AllureLifecycle.Instance.StartTestContainer(container);
            Console.WriteLine($"[Allure] Started container for feature: {featureContext.FeatureInfo.Title}");
        }

        [BeforeScenario]
        public void BeforeScenario()
        {
            Console.WriteLine($"[Allure] Starting Test: {_scenarioContext.ScenarioInfo.Title}");

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

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

            AllureLifecycle.Instance.StartTestCase(testResult);

            // Attach test to feature container
            if (_featureContext.TryGetValue(FeatureContainerKey, out string featureContainerId))
            {
                AllureLifecycle.Instance.UpdateTestContainer(featureContainerId, container =>
                {
                    container.children.Add(testUuid);
                });
            }
        }

        [AfterScenario]
        public void AfterScenario()
        {
            Console.WriteLine($"[Allure] Finished Test: {_scenarioContext.ScenarioInfo.Title}");

            if (_scenarioContext.TryGetValue(TestUuidKey, out string testUuid))
            {
                if (_scenarioContext.TestError != null)
                {
                    AllureLifecycle.Instance.UpdateTestCase(testUuid, tc =>
                    {
                        tc.status = Status.failed;
                        tc.statusDetails = new StatusDetails { message = _scenarioContext.TestError.Message };
                    });
                }
                else
                {
                    AllureLifecycle.Instance.UpdateTestCase(testUuid, tc =>
                    {
                        tc.status = Status.passed;
                    });
                }

                AllureLifecycle.Instance.StopTestCase(testUuid);
                AllureLifecycle.Instance.WriteTestCase(testUuid);
            }
            else
            {
                Console.WriteLine("[Allure] ERROR: No Test UUID found in ScenarioContext.");
            }

            _sapHelper.CloseSAP();
        }

        [AfterFeature]
        public static void AfterFeature(FeatureContext featureContext)
        {
            if (featureContext.TryGetValue(FeatureContainerKey, out string containerId))
            {
                AllureLifecycle.Instance.StopTestContainer(containerId);
                AllureLifecycle.Instance.WriteTestContainer(containerId);
                Console.WriteLine($"[Allure] Closed container for feature: {featureContext.FeatureInfo.Title}");
            }
            else
            {
                Console.WriteLine("[Allure] ERROR: No container context found in FeatureContext.");
            }
        }
    }
}
Editor is loading...
Leave a Comment