fix up and add tests for updating promo codes/preferences