test(webhook): received emits stream event

Phillip Davis created

Change summary

sgx-bwmsgsv2.rb                       | 11 ++++++
test/property/test_webhook_handler.rb | 47 +++++++++++++++++++++++++++++
2 files changed, 58 insertions(+)

Detailed changes

sgx-bwmsgsv2.rb 🔗

@@ -1105,6 +1105,17 @@ class WebhookHandler < Goliath::API
 					next unless text&.empty?
 					next unless jparams['to'].length > 1
 
+					MessageEvent::In.new(
+						timestamp: jparams['time'],
+						from: jparams['from'],
+						to: jparams['to'],
+						owner: jparams['owner'],
+						bandwidth_id: jparams['id'],
+						body: jparams['text'].to_s,
+						media_urls: media_urls
+					).emit(REDIS)
+
+
 					next [200, {}, "OK"]
 				}
 

test/property/test_webhook_handler.rb 🔗

@@ -242,4 +242,51 @@ class WebhookPropertyTest < Minitest::Test
 		}
 	end
 	em :test_failed_emits_correct_stream_event
+
+	def test_inbound_received_emits_correct_in_stream_event
+		property_of {
+			Webhook
+				.new(REDIS)
+				.message { |registered, jid, dir, top_level_to|
+					Message
+						.new(REDIS)
+						.to {
+							array(integer(2)) { nanpa_phone } +
+								[top_level_to] +
+								array(integer(2)) { nanpa_phone }
+						}
+						.generate(registered, jid, dir)
+				}
+				.type { "message-received" }
+				.generate
+		}.check { |metadata, example|
+			result = invoke_webhook(example)
+			assert_equal 200, result[0]
+
+			entries = REDIS.stream_entries("messages").sync
+			assert_equal 1, entries.length
+
+			fields = entries.first[:fields]
+			expected_keys = %w[
+				event source timestamp owner from to
+				bandwidth_id body media_urls
+			].sort
+			assert_equal expected_keys, fields.keys.sort
+
+			assert_equal "in", fields["event"]
+			assert_equal "bwmsgsv2", fields["source"]
+			assert_equal example["message"]["time"], fields["timestamp"]
+			assert_equal example["message"]["owner"], fields["owner"]
+			assert_equal example["message"]["from"], fields["from"]
+			assert_equal JSON.dump(example["message"]["to"]), fields["to"]
+			assert_equal example["message"]["id"], fields["bandwidth_id"]
+			assert_equal example["message"]["text"].to_s, fields["body"]
+
+			expected_media = Array(example["message"]["media"]).reject { |u|
+				u.end_with?(".smil", ".txt", ".xml")
+			}
+			assert_equal JSON.dump(expected_media), fields["media_urls"]
+		}
+	end
+	em :test_inbound_received_emits_correct_in_stream_event
 end