From the PR description:
> The last few commits contain significant test refactorings to make coins_tests easier to change in follow-ups.
---
> test, refactor: Migrate GetCoinsMapEntry to return MaybeCoin
https://github.com/bitcoin/bitcoin/pull/30906/commits/ca74aa7490a5005d227da75dc8f2d1ab73c6e9d2
---
> test: Group values and states in tests into CoinEntry wrappers
>
> Note: that this commit affects the test order, but doesn't change its behavior or coverage otherwise.
https://github.com/bitcoin/bitcoin/pull/30906/commits/d5f8d607ab1f8fd9fc17aba4105867b450117be2
---
> test: Validate error messages on fail
>
> The `ccoins_add` and `ccoins_write` tests check the actual exception error messages now instead of just that they fail for the given parameters.
> This enables us testing different exceptions in a more fine-grained way in later changes.
https://github.com/bitcoin/bitcoin/pull/30906/commits/c0b4b2c1eef95c0b626573a9a2e217f4a541a880
---
> test, refactor: Remove remaining unbounded flags from coins_tests
https://github.com/bitcoin/bitcoin/pull/30906/commits/0a159f0914775756dcac2d9fa7fe4e4d4e70ba0c
---
> test, refactor: Compact ccoins_access and ccoins_spend
>
> Also added an extra check for `AccessCoin` in `CheckAccessCoin` to make sure its result is also validated.
https://github.com/bitcoin/bitcoin/pull/30906/commits/50cce20013c97e1257cb9f4c9319701a09b0a196
---
This concludes backport of [[https://github.com/bitcoin/bitcoin/pull/30906 | core#30906]]
Depends on D18809