1# frozen_string_literal: true
2
3require "test_helper"
4require_relative "../../sgx-bwmsgsv2"
5require "rantly/minitest_extensions"
6require_relative "generators/stanza"
7
8class MaxMediaSizePropertyTest < Minitest::Test
9 def test_oversized_media_inlined_as_text
10 property_of {
11 MessageStanza.new(REDIS)
12 .recv_nums { [nanpa_phone] }
13 .media { [[deliverable_media_url, range(MAX_MEDIA_SIZE + 1, MAX_MEDIA_SIZE << 1)]] }
14 .body { message_body(segments: 1) }
15 .bandwidth_stub { |_registered, media|
16 (url, *), * = media
17 WebMock::API.stub_request(:post, BW_MESSAGES_URL).with(
18 body: WebMock::API.hash_including(text: /#{Regexp.escape(url)}/)
19 ).to_return(
20 status: 202, body: JSON.dump(id: "bw-msg-oversized")
21 )
22 }
23 .generate(ARGV[0])
24 }.check { |_metadata, example|
25 process_stanza(example["stanza"])
26 example["assertions"].each { |a| instance_exec(&a) }
27 }
28 end
29 em :test_oversized_media_inlined_as_text
30
31 def test_undersized_media_sent_as_mms
32 property_of {
33 MessageStanza.new(REDIS)
34 .recv_nums { [nanpa_phone] }
35 .media { [[deliverable_media_url, range(1, MAX_MEDIA_SIZE)]] }
36 .http_stubs { |media, _registered|
37 media.map do |u, s|
38 ext = File.extname(URI.parse(u).path)
39 WebMock::API.stub_request(:head, u).to_return(
40 status: 200,
41 headers: {
42 "Content-Length" => s.to_s,
43 "Content-Type" => Rack::Mime.mime_type(ext)
44 }
45 )
46 end
47 }
48 .bandwidth_stub { |_registered, media|
49 (url, *), * = media
50 WebMock::API.stub_request(:post, BW_MESSAGES_URL).with(
51 body: WebMock::API.hash_including(media: url)
52 ).to_return(
53 status: 202, body: JSON.dump(id: "bw-msg-undersized")
54 )
55 }
56 .generate(ARGV[0])
57 }.check { |_metadata, example|
58 process_stanza(example["stanza"])
59 example["assertions"].each { |a| instance_exec(&a) }
60 }
61 end
62 em :test_undersized_media_sent_as_mms
63end