test_non_nanp_oob.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 NonNanpOobPropertyTest < Minitest::Test
 9	def build_oob_message(dest, body, oob_url)
10		m = Blather::Stanza::Message.new("#{dest}@component", body)
11		m.from = "test@example.com/res"
12
13		x = Nokogiri::XML::Node.new("x", m.document)
14		ns = x.add_namespace(nil, "jabber:x:oob")
15		url_node = Nokogiri::XML::Node.new("url", m.document)
16		url_node.namespace = ns
17		url_node.content = oob_url
18		x.add_child(url_node)
19		m.add_child(x)
20		m
21	end
22
23	def test_non_nanp_oob_sends_url_as_text_not_mms
24		property_of {
25			dest = non_nanp_phone
26			oob_path = sized(range(3, 12)) { string(:alnum) }
27			oob_url = "https://example.com/media/#{oob_path}.jpg"
28			[dest, message_body, oob_url]
29		}.check { |dest, body, oob_url|
30			reset_stanzas!
31			reset_redis!
32
33			bw_req = stub_request(:post, BW_MESSAGES_URL).with(
34				body: hash_including(
35					text: /#{Regexp.escape(oob_url)}/
36				)
37			).to_return(
38				status: 201, body: JSON.dump(id: "bw-msg-non-nanp")
39			)
40
41			process_stanza(build_oob_message(dest, body, oob_url))
42
43			assert_not_requested :head, oob_url
44			assert_requested bw_req
45		}
46	end
47	em :test_non_nanp_oob_sends_url_as_text_not_mms
48
49	def test_nanp_oob_attempts_mms
50		property_of {
51			dest = nanpa_phone
52			oob_path = sized(range(3, 12)) { string(:alnum) }
53			oob_url = "https://example.com/media/#{oob_path}.jpg"
54			[dest, message_body, oob_url]
55		}.check { |dest, body, oob_url|
56			reset_stanzas!
57			reset_redis!
58
59			bw_req = stub_request(:post, BW_MESSAGES_URL).with(
60				body: hash_including(media: oob_url)
61			).to_return(
62				status: 201, body: JSON.dump(id: "bw-msg-nanp")
63			)
64			media_req = stub_request(:head, oob_url).to_return(
65				status: 200,
66				headers: {
67					"Content-Length" => "500",
68					"Content-Type" => "image/jpeg"
69				}
70			)
71
72			process_stanza(build_oob_message(dest, body, oob_url))
73
74			assert_requested :head, oob_url
75			assert_requested bw_req
76			assert_requested media_req
77		}
78	end
79	em :test_nanp_oob_attempts_mms
80end