- Added tests to cover. - Refactored some existing testing. - Requires password or external_auth_id to be provided. Defaults to password. - Randomly sets password to 32 digit random chars if external_auth_id provided instead. For #3222