I agree that the tests are full of setup duplication, but I would prefer to a keep a module/function pattern over class/method pattern for this case. It's not clear to me what a class buys us in exchange for the flexibility of first class functions.

I do think you are right that there is tons of duplication and that the utility functions have grown organically without much consideration for progressively increasing abstractions.

I think it would be awesome if the author of a test case could reach deeper into the module for lower level functions until they reach their desired level of granularity. For example, there could be a `make_god_role` and a `make_god_user` function, each satisfying the most common use case, with `make_god_user` being the preferred, high-level utility. When the test author needs to do something a little bit different, they can drill in with `make_god_role`.