Esempio n. 1
0
def test_event_emission(adapter):
    test_event_emission.event_handled = False

    # Events should trigger an event
    @adapter.on('reaction_added')
    def event_handler(event_data):
        test_event_emission.event_handled = True

        event = event_data['event']
        assert event["reaction"] == 'grinning'

    data = pytest.reaction_event_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature(adapter.signing_secret, timestamp,
                                        data)

    with adapter.server.test_client() as client:
        res = client.post('/slack/events',
                          data=data,
                          content_type='application/json',
                          headers={
                              'X-Slack-Request-Timestamp': timestamp,
                              'X-Slack-Signature': signature
                          })
        assert res.status_code == 200

    assert test_event_emission.event_handled
def test_error_signature(adapter):
    test_error_signature.event_handled = False

    # Error should trigger an event
    @adapter.on('error')
    def event_handler(exception):
        test_error_signature.event_handled = True
        assert isinstance(exception, SlackEventAdapterException)
        assert str(exception) == 'Invalid request signature'

    data = pytest.reaction_event_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature('INVALID SIGNATURE', timestamp, data)

    with adapter.server.test_client() as client:
        res = client.post('/slack/events',
                          data=data,
                          content_type='application/json',
                          headers={
                              'X-Slack-Request-Timestamp': timestamp,
                              'X-Slack-Signature': signature
                          })
        assert res.status_code == 403

    assert test_error_signature.event_handled
async def test_event_dispatch_exception(slack_event_manager):
    async def handler(data):
        raise Exception

    exception_handled = []

    async def exception_handler(exception):
        exception_handled.append(exception)

    slack_event_manager.on_event('reaction_added', handler)
    slack_event_manager.add_exception('reaction_added', exception_handler)
    slack_event_manager.add_exception(Exception, exception_handler)

    timestamp = int(time())
    data = pytest.reaction_event_fixture
    signature = pytest.create_signature(slack_event_manager.singing_secret,
                                        timestamp, data)
    async with AsyncClient(app=slack_event_manager.app,
                           base_url='http://test') as client:
        response = await client.post('/',
                                     content=data,
                                     headers={
                                         'Content-Type':
                                         'application/json',
                                         'X-Slack-Request-Timestamp':
                                         str(timestamp),
                                         'X-Slack-Signature':
                                         signature
                                     })
        assert response.status_code == 200, 'Not valid response code'
        assert len(exception_handled) == 2, 'Not all exception handled'
def test_error_timestamp(adapter):
    test_error_timestamp.event_handled = False

    # Error should trigger an event
    @adapter.on('error')
    def event_handler(exception):
        test_error_timestamp.event_handled = True
        assert isinstance(exception, SlackEventAdapterException)
        assert str(exception) == 'Invalid request timestamp'

    data = pytest.reaction_event_fixture

    # Set timestamp to Thu Jan 01 00:00:00 1970 UTC (Epoch 0)
    timestamp = 0

    signature = pytest.create_signature(adapter.signing_secret, timestamp,
                                        data)

    with adapter.server.test_client() as client:
        res = client.post('/slack/events',
                          data=data,
                          content_type='application/json',
                          headers={
                              'X-Slack-Request-Timestamp': timestamp,
                              'X-Slack-Signature': signature
                          })
        assert res.status_code == 403

    assert test_error_timestamp.event_handled
def test_no_timestamp(client):
    data = pytest.sig_challenge_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature('SIGNING_SECRET', timestamp, data)

    res = client.post('/',
                      data=data,
                      content_type='application/json',
                      headers={'X-Slack-Signature': signature})

    assert res.status_code == 403
def test_no_secret_app_config(app, client):
    app.config['SLACK_SIGNING_SECRET'] = None
    data = pytest.sig_challenge_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature('SIGNING_SECRET', timestamp, data)

    res = client.post('/',
                      data=data,
                      content_type='application/json',
                      headers={
                          'X-Slack-Request-Timestamp': timestamp,
                          'X-Slack-Signature': signature
                      })

    assert res.status_code == 403
Esempio n. 7
0
def test_url_challenge(client):
    slack_adapter = SlackEventAdapter("SIGNING_SECRET")
    data = pytest.url_challenge_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature(slack_adapter.signing_secret,
                                        timestamp, data)

    res = client.post('/slack/events',
                      data=data,
                      content_type='application/json',
                      headers={
                          'X-Slack-Request-Timestamp': timestamp,
                          'X-Slack-Signature': signature
                      })
    assert res.status_code == 200
    assert bytes.decode(res.data) == "valid_challenge_token"
def test_event_emission(client):
    # Events should trigger an event
    @ADAPTER.on('reaction_added')
    def event_handler(event):
        assert event["reaction"] == 'grinning'

    data = bytes(pytest.twitter_like_event_fixture, 'ascii')
    signature = pytest.create_signature(ADAPTER.consumer_secret, data)
    res = client.post(
        '/webhooks/twitter',
        data=data,
        content_type='application/json',
        headers={
            'X-Twitter-Webhooks-Signature': signature
        }
    )

    assert res.status_code == 200
def test_event_emission(client):
    # Events should trigger an event
    @ADAPTER.on('reaction_added')
    def event_handler(event):
        assert event["reaction"] == 'grinning'

    data = pytest.reaction_event_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature(ADAPTER.signing_secret, timestamp,
                                        data)

    res = client.post('/slack/events',
                      data=data,
                      content_type='application/json',
                      headers={
                          'X-Slack-Request-Timestamp': timestamp,
                          'X-Slack-Signature': signature
                      })

    assert res.status_code == 200
Esempio n. 10
0
def test_version_header(client):
    # Verify [package metadata header is set
    slack_adapter = SlackEventAdapter("SIGNING_SECRET")
    package_info = slack_adapter.server.package_info

    data = pytest.reaction_event_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature(slack_adapter.signing_secret,
                                        timestamp, data)

    res = client.post('/slack/events',
                      data=data,
                      content_type='application/json',
                      headers={
                          'X-Slack-Request-Timestamp': timestamp,
                          'X-Slack-Signature': signature
                      })

    assert res.status_code == 200
    assert res.headers["X-Slack-Powered-By"] == package_info
async def test_challenge_request(slack_event_manager):
    timestamp = int(time())
    data = pytest.url_challenge_fixture
    signature = pytest.create_signature(slack_event_manager.singing_secret,
                                        timestamp, data)
    async with AsyncClient(app=slack_event_manager.app,
                           base_url='http://test') as client:
        response = await client.post('/',
                                     content=data,
                                     headers={
                                         'Content-Type':
                                         'application/json',
                                         'X-Slack-Request-Timestamp':
                                         str(timestamp),
                                         'X-Slack-Signature':
                                         signature
                                     })
        assert response.status_code == 200, 'Invalid response code'
        assert response.text.strip(
            '"') == "valid_challenge_token", 'Challenge token not match'
Esempio n. 12
0
def test_compare_digest_fallback(client, monkeypatch):
    # Verify [package metadata header is set
    slack_adapter = SlackEventAdapter("SIGNING_SECRET")

    if hasattr(hmac, "compare_digest"):
        monkeypatch.delattr(hmac, 'compare_digest')

    data = pytest.reaction_event_fixture
    timestamp = int(time.time())
    signature = pytest.create_signature(slack_adapter.signing_secret,
                                        timestamp, data)

    res = client.post('/slack/events',
                      data=data,
                      content_type='application/json',
                      headers={
                          'X-Slack-Request-Timestamp': timestamp,
                          'X-Slack-Signature': signature
                      })

    assert res.status_code == 200
async def test_event_dispatch(slack_event_manager):
    async def handler(data):
        assert json.dumps(data) == pytest.reaction_event_fixture, 'Wrong body'

    slack_event_manager.on_event('reaction_added', handler)

    timestamp = int(time())
    data = pytest.reaction_event_fixture
    signature = pytest.create_signature(slack_event_manager.singing_secret,
                                        timestamp, data)
    async with AsyncClient(app=slack_event_manager.app,
                           base_url='http://test') as client:
        response = await client.post('/',
                                     content=data,
                                     headers={
                                         'Content-Type':
                                         'application/json',
                                         'X-Slack-Request-Timestamp':
                                         str(timestamp),
                                         'X-Slack-Signature':
                                         signature
                                     })
        assert response.status_code == 200, 'Not valid response code'