It might be worth splitting this in three separate tests.