def test_user_uninstall_logs_message(caplog, test_file): event = json.loads(test_file("user_token_revoked.json")) user_to_be_removed = User("U019LN451HT", "T019PQN3UAE", "token1") token_store = StubUserTokenStore() token_store.store(user_to_be_removed) with caplog.at_level(logging.INFO): UserUninstall(user_link_store=StubUserLinkStore(), user_token_store=token_store).execute(event) assert "uninstalled user" in caplog.text, "missing log entry"
def test_remove_non_existent_is_silent(): team_id = "team" user_id = "user" expected_token = "foobar" gateway = StubUserTokenStore() expected_user = User(user_id=user_id, team_id=team_id, token=expected_token) unstored_user = User(user_id="foo", team_id="bar", token=None) gateway.store(expected_user) assert gateway.remove(unstored_user) is False
def test_remove_a_user_token(): team_id = "team" user_id = "user" expected_token = "foobar" gateway = StubUserTokenStore() expected_user = User(user_id=user_id, team_id=team_id, token=expected_token) gateway.store(expected_user) gateway.fetch(expected_user) assert gateway.remove(expected_user) is True with pytest.raises(KeyError): gateway.fetch(expected_user)
def test_can_get_a_user_token(): team_id = "team" user_id = "user" expected_token = "foobar" gateway = StubUserTokenStore() expected_user = User(user_id=user_id, team_id=team_id, token=expected_token) gateway.store(expected_user) user = gateway.fetch(expected_user) assert expected_user == user assert expected_token == user.token
def test_user_uninstall_removed_users_from_gateways(test_file): event = test_file("user_token_revoked.json") secret = "secret" user_to_be_removed = User("U019LN451HT", "T019PQN3UAE", "token1") linked_user_1 = User("user1", "team1", "token2") linked_user_2 = User("user2", "team1", "token3") link_store = StubUserLinkStore() link_store.link(user_to_be_removed, linked_user_1) link_store.link(user_to_be_removed, linked_user_2) token_store = StubUserTokenStore() token_store.store(user_to_be_removed) token_store.store(linked_user_1) token_store.store(linked_user_2) response = HandleEvent( environment={ "SLACK_SIGNING_SECRET": secret }, headers=event_signature_headers(secret, event), raw_body=event, user_link_store=link_store, user_token_store=token_store, ).execute() assert response.present() == { "statusCode": 204, "headers": {}, "body": None, } with pytest.raises(KeyError): token_store.fetch(user_to_be_removed) with pytest.raises(KeyError): link_store.fetch(user_to_be_removed) # does not remove linked users token_store.fetch(linked_user_1) token_store.fetch(linked_user_2) link_store.fetch(linked_user_2) link_store.fetch(linked_user_2)
def test_updates_status_of_linked_users(caplog, test_file, mocker): mocker.patch( "slack_profile_update.gateway.slack.update_status", return_value=True, ) event = json.loads(test_file("example_user_updated_event.json")) source_user = User("U019LN451HT", "T019PQN3UAE", "token1") dest_user_1 = User("user1", "team1", "token2") dest_user_2 = User("user3", "team3", "token3") link_store = StubUserLinkStore() link_store.link(source_user, dest_user_1) link_store.link(source_user, dest_user_2) token_store = StubUserTokenStore() token_store.store(dest_user_1) token_store.store(dest_user_2) UpdateAllProfiles(user_link_store=link_store, user_token_store=token_store).execute(event) slack.update_status.assert_has_calls( [ call( status_emoji=":smile:", status_expiration=0, status_text="This is a test!", token=dest_user_1.token, ), call( status_emoji=":smile:", status_expiration=0, status_text="This is a test!", token=dest_user_2.token, ), ], any_order=True, )