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