Skip to content

Commit

Permalink
fb interface setups webhook once it receive http interface
Browse files Browse the repository at this point in the history
  • Loading branch information
hyzhak committed Oct 13, 2016
1 parent c65a8be commit 955378b
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 52 deletions.
1 change: 0 additions & 1 deletion botstory/chat_test.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import aiohttp
import logging
import pytest
from unittest import mock

import botstory.integrations.fb.messenger
from . import story
Expand Down
15 changes: 10 additions & 5 deletions botstory/integrations/fb/messenger.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,22 @@ class FBInterface:

def __init__(self,
api_uri='https://graph.facebook.com/v2.6',
token=None):
token=None,
webhook=None,
):
"""
:param token: should take from os.environ['FB_ACCESS_TOKEN']
"""
self.api_uri = api_uri
self.token = token
self.webhook = webhook

self.http = None
self.processor = None
self.storage = None

async def send_text_message(self, recipient, text, options=[]):
async def send_text_message(self, recipient, text, options=None):
"""
async send message to the facebook user (recipient)
Expand Down Expand Up @@ -59,18 +62,20 @@ def add_http(self, http):
logger.debug('add_http')
logger.debug(http)
self.http = http
if self.webhook:
http.webhook(self.webhook, self.handle)

def add_storage(self, storage):
logger.debug('add_storage')
logger.debug(storage)
self.storage = storage

async def handle(self, entry):
async def handle(self, data):
logger.debug('')
logger.debug('> handle <')
logger.debug('')
logger.debug(' entry: {}'.format(entry))
for e in entry:
logger.debug(' entry: {}'.format(data))
for e in data.get('entry', []):
messaging = e.get('messaging', [])
logger.debug(' messaging: {}'.format(messaging))

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import logging
import json
import pytest

from . import fake_fb
from .. import messenger
from ... import mockdb, mockhttp
from .... import chat, story, utils
from ....middlewares import option
from . import messenger
from .. import mockdb, mockhttp
from ... import chat, story, utils
from ...middlewares import option

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -125,6 +123,19 @@ async def test_options():
)


@pytest.mark.asyncio
async def test_setup_webhook():
fb_interface = story.use(messenger.FBInterface(webhook='/webhook'))
mock_http = story.use(mockhttp.MockHttpInterface())

mock_http.webhook.assert_called_with(
'/webhook',
fb_interface.handle,
)


# integration

@pytest.fixture
def build_fb_interface():
async def builder():
Expand Down Expand Up @@ -161,8 +172,9 @@ def incorrect_story():
def store_result(message):
incorrect_trigger.receive(message)

await fb_interface.handle([
{
await fb_interface.handle({
"object": "page",
"entry": [{
"id": "PAGE_ID",
"time": 1473204787206,
"messaging": [
Expand All @@ -181,8 +193,8 @@ def store_result(message):
}
}
]
}
])
}]
})

assert incorrect_trigger.value is None
assert correct_trigger.value == {
Expand Down Expand Up @@ -215,31 +227,30 @@ def incorrect_story():
def store_result(message):
incorrect_trigger.receive(message)

await fb_interface.handle([
{
await fb_interface.handle({
"object": "page",
"entry": [{
"id": "PAGE_ID",
"time": 1473204787206,
"messaging": [
{
"sender": {
"id": "USER_ID"
},
"recipient": {
"id": "PAGE_ID"
},
"timestamp": 1458692752478,
"message": {
"mid": "mid.1457764197618:41d102a3e1ae206a38",
"seq": 73,
"text": "Green!",
"quick_reply": {
"payload": "GREEN"
}
"messaging": [{
"sender": {
"id": "USER_ID"
},
"recipient": {
"id": "PAGE_ID"
},
"timestamp": 1458692752478,
"message": {
"mid": "mid.1457764197618:41d102a3e1ae206a38",
"seq": 73,
"text": "Green!",
"quick_reply": {
"payload": "GREEN"
}
}
]
}
])
}]
}]
})

assert incorrect_trigger.value is None
assert correct_trigger.value == {
Expand Down
33 changes: 18 additions & 15 deletions botstory/integrations/tests/integration_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,12 @@ def correct_story():
def store_result(message):
trigger.receive(message)

await facebook.handle([{
'id': 'PAGE_ID',
'time': 1473204787206,
'messaging': [
{
await facebook.handle({
"object": "page",
"entry": [{
'id': 'PAGE_ID',
'time': 1473204787206,
'messaging': [{
'sender': {
'id': user['facebook_user_id'],
},
Expand All @@ -123,8 +124,9 @@ def store_result(message):
'text': 'hello, world!'
}
}
]
}])
]
}]
})

del trigger.value['session']
assert trigger.value == {
Expand All @@ -150,11 +152,12 @@ def correct_story():
def store_result_for_new_user(message):
trigger.receive(message)

await facebook.handle([{
'id': 'PAGE_ID',
'time': 1473204787206,
'messaging': [
{
await facebook.handle({
"object": "page",
"entry": [{
'id': 'PAGE_ID',
'time': 1473204787206,
'messaging': [{
'sender': {
'id': 'some-facebook-id',
},
Expand All @@ -167,9 +170,9 @@ def store_result_for_new_user(message):
'seq': 73,
'text': 'hello, world!'
}
}
]
}])
}]
}]
})

assert trigger.value
assert trigger.value['data']['text']['raw'] == 'hello, world!'
Expand Down

0 comments on commit 955378b

Please sign in to comment.