def login_user(osm_user_details, email, user_element="user") -> str: """ Generates authentication details for user, creating in DB if user is unknown to us :param osm_user_details: XML response from OSM :param redirect_to: Route to redirect user to, from callback url :param user_element: Exists for unit testing :raises AuthServiceError :returns Authorized URL with authentication details in query string """ osm_user = osm_user_details.find(user_element) if osm_user is None: raise AuthServiceError("User element not found in OSM response") osm_id = int(osm_user.attrib["id"]) username = osm_user.attrib["display_name"] try: # get gravatar profile picture file name user_picture = osm_user.find("img").attrib["href"] except (AttributeError, IndexError): user_picture = None try: UserService.get_user_by_id(osm_id) UserService.update_user(osm_id, username, user_picture) except NotFound: # User not found, so must be new user changesets = osm_user.find("changesets") changeset_count = int(changesets.attrib["count"]) new_user = UserService.register_user(osm_id, username, changeset_count, user_picture, email) MessageService.send_welcome_message(new_user) session_token = AuthenticationService.generate_session_token_for_user( osm_id) return { "username": username, "session_token": session_token, "picture": user_picture, }
def test_welcome_message_sent(self): self.test_user = create_canned_user() # Act message_id = MessageService.send_welcome_message(self.test_user) self.assertIsNotNone(message_id) message = MessageService.get_message(message_id, self.test_user.id) # Assert self.assertTrue(message, "Message should be saved to DB") # Tidyup MessageService.delete_message(message_id, self.test_user.id)
def test_welcome_message_sent(self): if self.skip_tests: return # Act message_id = MessageService.send_welcome_message(self.test_user) message = MessageService.get_message(message_id, self.test_user.id) # Assert self.assertTrue(message, "Message should be saved to DB") # Tidyup MessageService.delete_message(message_id, self.test_user.id)