test_webhook_handler.rb

 1# frozen_string_literal: true
 2
 3require "test_helper"
 4require_relative "../../sgx-bwmsgsv2"
 5require "rantly/minitest_extensions"
 6require_relative "generators/webhook"
 7require_relative "generators/message"
 8
 9def panic(e)
10	$panic = e
11end
12
13MMS_PROXY = "https://proxy.test.example.com/"
14
15class WebhookPropertyTest < Minitest::Test
16	def setup
17		reset_stanzas!
18		reset_redis!
19	end
20
21	def test_single_recipient_message_delivered_sends_one_receipt
22		property_of {
23			Webhook
24				.new(REDIS)
25				.type { "message-delivered" }
26				.message { |registered, jid, dir, top_level_to|
27					Message
28						.new(REDIS)
29						.to { [top_level_to] }
30						.generate(registered, jid, dir)
31				}
32				.generate
33		}.check { |metadata, example|
34			result = invoke_webhook(example)
35			assert_equal 200, result[0]
36			assert_equal 1, written.length, "Should only send the delivery receipt"
37			receipt = written.shift
38			assert_equal(
39				receipt.to,
40				metadata["jid"],
41				"Should send receipt to customer's jid"
42			)
43			assert_equal(
44				receipt.from.to_s,
45				"#{example["to"]}@#{ARGV[0]}",
46				"Should send receipt from sender's Cheogram jid"
47			)
48		}
49	end
50	em :test_single_recipient_message_delivered_sends_one_receipt
51
52	def test_multi_recipient_outbound_sends_no_receipts
53		property_of {
54			Webhook
55				.new(REDIS)
56				.type { choose(*Webhook::OUTBOUND_TYPES) }
57				.message { |registered, jid, dir, top_level_to|
58					Message
59						.new(REDIS)
60						.to {
61							array(integer(2)) { nanpa_phone } +
62								[top_level_to] +
63								array(range(1, 3)) { nanpa_phone }
64						}
65						.generate(registered, jid, dir)
66				}
67				.generate
68		}.check { |metadata, example|
69			result = invoke_webhook(example)
70			assert_equal 200, result[0]
71			assert_equal 0, written.length, "Should not group chat receipts"
72		}
73	end
74	em :test_multi_recipient_outbound_sends_no_receipts
75end