test_max_media_size.rb

 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