To answer to the main question: Both. Short, complete and test only thing. Avoid doing checks in different parts in the same test(check email + check back-end + check front-end)
The first issue I see its the whey the scenario is defined (too many details, not following the BDD principles -> one of them is to define steps that are very easy to understand and they don't talk about ui, when is defined to set a precondition: i am on some page, i have some data -> used if needed)
Does not seem very clear if the notifications are sent after registration or after login or if the user needs to confirm the email to complete te registration or not.
Scenario: Some meaningful name
Given I have some state
When I do some actions
Then the expected results are met
Short example based on your case using api:
Scenario: New user registration sends notification to the administrator
When I create a new user -> create user via api
Then the administrator receives a notification -> check notification via api
Short example using ui:
Scenario: New user registration sends notification to the administrator
Given I am on the registration page
When I register with a new user -> generate data dynamically and does registration
And I login with the new user -> logs in with data from registration saved in a variable
Then the administrator receives a notification -> does the validation(via api if you check some email inbox)
What I would do
- Identify tests by steps and one expected outcome
- Define each test in a simple way without thinking to much to details
- See what makes sense to have in UI and what not (more integration > less ui)
- When implementing UI tests make sure you use some fast methods to do the setup (for example when you need a new user don't go trough the ui each time)
- Combine validation only when makes sense, for example if you check multiple things in the same place, for example in the same email or in the same response
If you do something and seems to complicated or hard to understand => then you are doing something wrong. You should be able to understand what you define a yesr from now, also using BDD should allow anyone to understand