Last active
August 29, 2015 14:24
-
-
Save hodgestar/7f61d8e2bf97e6a3ff30 to your computer and use it in GitHub Desktop.
Vxyowsup Test Tweaks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/vxyowsup/tests/test_whatsapp.py b/vxyowsup/tests/test_whatsapp.py | |
index 2f80f2d..73568c8 100644 | |
--- a/vxyowsup/tests/test_whatsapp.py | |
+++ b/vxyowsup/tests/test_whatsapp.py | |
@@ -1,6 +1,7 @@ | |
import base64 | |
-from twisted.internet.defer import inlineCallbacks | |
+from twisted.internet.defer import inlineCallbacks, DeferredQueue | |
+from twisted.internet import reactor | |
from vumi.tests.utils import LogCatcher | |
from vumi.tests.helpers import VumiTestCase | |
@@ -9,7 +10,7 @@ from vumi.errors import ConfigError | |
from vumi.transports.tests.helpers import TransportHelper | |
-from vxyowsup.whatsapp import WhatsAppTransport, StackClient | |
+from vxyowsup.whatsapp import WhatsAppTransport | |
from yowsup.stacks import YowStackBuilder | |
from yowsup.layers.logger import YowLoggerLayer | |
from yowsup.layers import YowLayer | |
@@ -17,20 +18,19 @@ from yowsup.layers.protocol_messages.protocolentities import ( | |
TextMessageProtocolEntity) | |
-class DummyStackBuilder(YowStackBuilder): | |
- @staticmethod | |
- def getCoreLayers(): | |
- return ( | |
- YowLoggerLayer, | |
- TestingLayer, | |
- )[::-1] | |
+@staticmethod | |
+def getDummyCoreLayers(): | |
+ return ( | |
+ YowLoggerLayer, | |
+ TestingLayer, | |
+ )[::-1] | |
class TestWhatsAppTransport(VumiTestCase): | |
@inlineCallbacks | |
def setUp(self): | |
- self.patch(StackClient, 'STACK_BUILDER', DummyStackBuilder) | |
+ self.patch(YowStackBuilder, 'getCoreLayers', getDummyCoreLayers) | |
self.tx_helper = self.add_helper(TransportHelper(WhatsAppTransport)) | |
self.config = { | |
'cc': '27', | |
@@ -39,15 +39,40 @@ class TestWhatsAppTransport(VumiTestCase): | |
} | |
self.transport = yield self.tx_helper.get_transport(self.config) | |
+ self.test_layer = self.transport.stack_client.network_layer | |
- def test_nothing(self): | |
- pass | |
+ def assert_nodes_equal(self, a, b): | |
+ b["id"] = a["id"] | |
+ self.assertEqual(a.toString(), b.toString()) | |
+ | |
+ def assert_ack(self, ack, msg): | |
+ self.assertEqual(ack.payload['event_type'], 'ack') | |
+ self.assertEqual(ack.payload['user_message_id'], msg['message_id']) | |
+ self.assertEqual(ack.payload['sent_message_id'], 'remote-message-id') | |
+ | |
+ @inlineCallbacks | |
+ def test_outbound(self): | |
+ msg = self.tx_helper.make_outbound( | |
+ content="Hello!", to_addr="+1234", from_addr="+5678") | |
+ self.tx_helper.dispatch_outbound(msg) | |
+ sent = yield self.test_layer.sent.get() | |
+ self.assert_nodes_equal( | |
+ sent, | |
+ TextMessageProtocolEntity( | |
+ "Hello!", to="[email protected]").toProtocolTreeNode()) | |
+ [ack] = yield self.tx_helper.wait_for_dispatched_events(1) | |
+ self.assert_ack(ack, msg) | |
class TestingLayer(YowLayer): | |
+ def __init__(self): | |
+ YowLayer.__init__(self) | |
+ self.sent = DeferredQueue() | |
+ | |
def onEvent(self, event): | |
- print event | |
+ print "EVENT!", event | |
+ return True | |
def receive(self, data): | |
# data would've been decrypted bytes, | |
@@ -55,13 +80,14 @@ class TestingLayer(YowLayer): | |
# for convenience | |
# receive from lower (no lower in this layer) | |
# send to upper | |
+ print "RECEIVE!", data | |
self.toUpper(data) | |
def send(self, data): | |
# data is yowsup.structs.protocoltreenode.ProtocolTreeNode | |
# receive from upper | |
# send to lower (no lower in this layer) | |
- print(data) | |
+ reactor.callFromThread(self.sent.put, data) | |
def send_to_transport(self, text, to_address): | |
# method to be used in testing | |
diff --git a/vxyowsup/whatsapp.py b/vxyowsup/whatsapp.py | |
index 93e43b3..f4852a6 100644 | |
--- a/vxyowsup/whatsapp.py | |
+++ b/vxyowsup/whatsapp.py | |
@@ -67,11 +67,11 @@ class WhatsAppTransport(Transport): | |
log.info('Sending %r' % (message.to_json(),)) | |
if message['content'] == 'fail!': | |
return self.publish_nack(message['message_id'], 'failed') | |
- return self.publish_ack( | |
- message['message_id'], 'remote-message-id') | |
# assumes message['to_addr'] will be the phone number | |
self.stack_client.send_to_stack( | |
message['content'], message['to_addr'] + '@s.whatsapp.net') | |
+ return self.publish_ack( | |
+ message['message_id'], 'remote-message-id') | |
def catch_exit(self, f): | |
f.trap(WhatsAppClientDone) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment