def test_crud_user(sdk: mtds.Looker40SDK): """Test creating, retrieving, updating and deleting a user.""" # Create user user = sdk.create_user( ml.WriteUser( first_name=TEST_FIRST_NAME, last_name=TEST_LAST_NAME, is_disabled=False, locale="fr", )) assert isinstance(user, ml.User) assert isinstance(user.id, int) assert user.first_name == TEST_FIRST_NAME assert user.last_name == TEST_LAST_NAME assert not user.is_disabled assert user.locale == "fr" # sudo checks user_id = user.id sdk.login_user(user_id) user = sdk.me() assert user.first_name == TEST_FIRST_NAME assert user.last_name == TEST_LAST_NAME sdk.logout() user = sdk.me() assert user.first_name != TEST_FIRST_NAME assert user.last_name != TEST_LAST_NAME # Update user and check fields we didn't intend to change didn't change update_user = ml.WriteUser(is_disabled=True, locale="uk") sdk.update_user(user_id, update_user) user = sdk.user(user_id) assert user.first_name == TEST_FIRST_NAME assert user.last_name == TEST_LAST_NAME assert user.locale == "uk" assert user.is_disabled # Update user and check fields we intended to wipe out are now None # first way to specify nulling out a field update_user = ml.WriteUser(first_name=ml.EXPLICIT_NULL) # second way update_user.last_name = ml.EXPLICIT_NULL sdk.update_user(user_id, update_user) user = sdk.user(user_id) assert user.first_name == "" assert user.last_name == "" # Try adding email creds sdk.create_user_credentials_email( user_id, ml.WriteCredentialsEmail(email="*****@*****.**")) user = sdk.user(user_id) assert isinstance(user.credentials_email, ml.CredentialsEmail) assert user.credentials_email.email == "*****@*****.**" # Delete user resp = sdk.delete_user(user_id) assert resp == ""
def test_search_users_matches_pattern(sdk: mtds.Looker40SDK, users: List[Dict[str, str]], email_domain: str): """search_users should return a list of all matches.""" user = users[0] # Search by full email search_email = f'{user["first_name"]}.{user["last_name"]}{email_domain}' search_results = sdk.search_users_names(pattern=search_email) assert len(search_results) == 1 assert search_results[0].first_name == user["first_name"] assert search_results[0].last_name == user["last_name"] assert search_results[0].email == search_email # Search by first name search_results = sdk.search_users_names(pattern=user["first_name"]) assert len(search_results) > 0 assert search_results[0].first_name == user["first_name"] # First name with spaces u = sdk.create_user( ml.WriteUser(first_name="John Allen", last_name="Smith")) if u.id: search_results = sdk.search_users_names(pattern="John Allen") assert len(search_results) == 1 assert search_results[0].first_name == "John Allen" assert search_results[0].last_name == "Smith" # Delete user resp = sdk.delete_user(u.id) assert resp == ""
def create_test_users(sdk40: methods40.Looker40SDK, users: List[Dict[str, str]], email_domain: str): user_ids: List[int] = [] for u in users: # TODO: if the test crashes it doesn't clean up the users. user = sdk40.create_user( models40.WriteUser(first_name=u["first_name"], last_name=u["last_name"])) if user.id: user_ids.append(user.id) email = f"{u['first_name']}.{u['last_name']}{email_domain}" sdk40.create_user_credentials_email( user.id, models40.WriteCredentialsEmail(email=email)) yield for user_id in user_ids: sdk40.delete_user(user_id)