I'm developing a BDD test automation solution with C# using Specflow (Cucumber) with tests written as plain text Gherkins. I am currently writing a regression test suite amongst others.
When asserting that a user UI transaction has updated successfully i can think of a couple of approaches:
Using the Steps/Step Definitions: enter the data into the webpage and click save button, then assert that the success dialog box appears. Then navigate to another webpage or what could be multiple other webpages where the data will be changed and assert the data has been updated correctly in the necessary fields.
Using the Steps/Step Definitions: enter the data into the webpage and click save, assert that the success dialog box appears. Then write steps/step definitions that call API classes to retrieve the data stored (get) and then assert all the data stored to the database is correct.
The first option looks like a true representation of a functional test how a user would do it and it also guarantees the data is showing correctly to the user. The second option when I write Gherkin steps "Then the API call will return the following data:" - seems not right for a business readable format? There is also the chance that the data still may not be presented correctly on the UI. It would entail writing a number of API classes.
As a software engineering approach, is the second option a recommended approach?