test_whisper_disabled.rb

 1# frozen_string_literal: true
 2
 3require "test_helper"
 4require_relative "../../sgx-bwmsgsv2"
 5require "rantly/minitest_extensions"
 6require_relative "rantly_extensions/data_extensions"
 7
 8class WhisperDisabledPropertyTest < Minitest::Test
 9	REGEXP_EXAMPLES_OPTS = {
10		max_group_results: 10,
11		max_repeater_variance: 10
12	}.freeze
13
14	def setup
15		reset_stanzas!
16		reset_redis!
17	end
18
19	def test_message_from_whisper_number_is_rejected
20		property_of {
21			words = array(range(1, 6)) { sized(range(3, 10)) { string(:alnum) } }
22			guard(words.none? { |w| BADWORD_LIST.include?(w.downcase) })
23			body = words.join(" ")
24
25			usern = WHISPER_NUMBER.random_example(**REGEXP_EXAMPLES_OPTS)
26			dest = nanpa_phone
27			[body, dest, usern]
28		}.check { |body, dest, usern|
29			reset_stanzas!
30			reset_redis!(tn: usern)
31			WebMock.reset!
32
33			process_stanza(build_outbound_message(body, dest))
34
35			assert_equal 1, written.length,
36			             "Expected exactly one error stanza for usern: #{usern.inspect}"
37
38			stanza = Blather::XMPPNode.parse(written.first.to_xml)
39			assert stanza.error?,
40			       "Expected error stanza for usern: #{usern.inspect}"
41
42			error = stanza.find_first("error")
43			assert_equal "cancel", error["type"],
44			             "Expected error type 'cancel' for usern: #{usern.inspect}"
45			assert_equal "recipient-unavailable", xmpp_error_name(error),
46			             "Expected 'recipient-unavailable' for usern: #{usern.inspect}"
47		}
48	end
49	em :test_message_from_whisper_number_is_rejected
50
51	def test_message_from_non_whisper_number_is_not_rejected_as_whisper
52		property_of {
53			words = array(range(1, 6)) { sized(range(3, 10)) { string(:alnum) } }
54			guard(words.none? { |w| BADWORD_LIST.include?(w.downcase) })
55			body = words.join(" ")
56
57			dest = nanpa_phone
58			[body, dest]
59		}.check { |body, dest|
60			reset_stanzas!
61			reset_redis!
62			WebMock.reset!
63
64			bw_req = stub_request(:post, BW_MESSAGES_URL).with(
65				body: hash_including(
66					to: dest,
67					text: body
68				)
69			).to_return(
70				status: 201,
71				body: JSON.dump(id: "bw-msg-stub")
72			)
73
74			m = Blather::Stanza::Message.new("#{dest}@component", body)
75			m.from = "test@example.com"
76			process_stanza(m)
77
78			assert_requested bw_req
79			assert_empty written
80		}
81	end
82	em :test_message_from_non_whisper_number_is_not_rejected_as_whisper
83end