Is there a way to dynamically assert the Responses with CompareToSet in SpecFlow

Viewed 25

I have two Data Service EnquiryType and EnquirySource the Common Step between them is when I try to assert the response for both in there feature files, currently I am distinguishing the Scenario Step with the Data Service name, but I want to separate out the assertion step and use that for both Data Service.

Current Logic

    /// <summary>
    /// The step that gets all of the enquiry types.
    /// </summary>
    /// <returns></returns>
    [Given(@"I request all enquiry types")]
    public async Task RequestAllEnquiryTypes()
    {
        try
        {
            var results = await EnquiryTypesApi.GetEnquiryTypes(enquiryTypeData);
            enquiryTypes = new List<EnquiryTypeModel>(results.Results);
            FeatureSteps.statusCode = results.StatusCode;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    /// <summary>
    /// Makes sure that the retrieved enquiries types match the expected  data.
    /// </summary>
    /// <param name="data">The expected enquiry type data.</param>
    [Then("The following Enquiry Type result is returned:")]
    public void ThenTheFollowingResultIsReturned(TechTalk.SpecFlow.Table data)
    {
        data.CompareToSet<EnquiryTypeModel>(enquiryTypes);
    }

    /// <summary>
    /// The step that gets all of the enquiry sources.
    /// </summary>
    /// <returns></returns>
    [Given(@"I request all enquiry sources")]
    public async Task RequestAllEnquirySources()
    {
        try
        {
            var results = await EnquirySourcesApi.GetEnquirySources(enquirySourceData);
            enquirySources = new List<EnquirySourceModel>(results.Results);
            FeatureSteps.statusCode = results.StatusCode;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

    /// <summary>
    /// Makes sure that the retrieved enquiries sources match the expected  data.
    /// </summary>
    /// <param name="data">The expected enquiry source data.</param>
    [Then("The following Enquiry Source result is returned:")]
    public void ThenTheFollowingResultIsReturned(TechTalk.SpecFlow.Table data)
    {     
        data.CompareToSet<EnquirySourceModel>(enquirySources);
    }

What I want to achieve

    /// <summary>
    /// Makes sure that the Result match the expected  data.
    /// </summary>
    /// <param name="data">The expected data.</param>
    [Then("The following result is returned:")]
    public void ThenTheFollowingResultIsReturned(TechTalk.SpecFlow.Table data)
    {     
        data.CompareToSet(dynamicObject);
    }
0 Answers
Related