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)
Пример #6
0
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,
    )