<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASensitive_IP_addresses%2Fblocktext%2Ftestcases</id>
	<title>Module:Sensitive IP addresses/blocktext/testcases - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASensitive_IP_addresses%2Fblocktext%2Ftestcases"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sensitive_IP_addresses/blocktext/testcases&amp;action=history"/>
	<updated>2026-05-26T17:30:30Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sensitive_IP_addresses/blocktext/testcases&amp;diff=146711&amp;oldid=prev</id>
		<title>imported&gt;Mr. Stradivarius: add a test for the _main function</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sensitive_IP_addresses/blocktext/testcases&amp;diff=146711&amp;oldid=prev"/>
		<updated>2018-11-04T07:20:40Z</updated>

		<summary type="html">&lt;p&gt;add a test for the _main function&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Unit tests for [[Module:Sensitive IP addresses/blocktext]]&lt;br /&gt;
&lt;br /&gt;
local mBlockText = require(&amp;#039;Module:Sensitive IP addresses/blocktext&amp;#039;)&lt;br /&gt;
local ScribuntoUnit = require(&amp;#039;Module:ScribuntoUnit&amp;#039;)&lt;br /&gt;
local suite = ScribuntoUnit:new()&lt;br /&gt;
&lt;br /&gt;
local mBlockTextFunctions = mBlockText._exportFunctions()&lt;br /&gt;
local parseTitle = mBlockTextFunctions.parseTitle&lt;br /&gt;
local fetchSensitivityData = mBlockTextFunctions.fetchSensitivityData&lt;br /&gt;
local parseSensitivityData = mBlockTextFunctions.parseSensitivityData&lt;br /&gt;
local renderMessage = mBlockTextFunctions.renderMessage&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- parseTitle tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_with_ipv4_address()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;1.2.3.4&amp;#039;,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Special:Block/1.2.3.4&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_with_ipv4_range()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;1.2.3.0/24&amp;#039;,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Special:Block/1.2.3.0/24&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_with_ipv6_address()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;2001:db8::ff00:12:3456&amp;#039;,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Special:Block/2001:db8::ff00:12:3456&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_with_ipv6_range()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;2001:db8::ff00:12:0/122&amp;#039;,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Special:Block/2001:db8::ff00:12:0/122&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_with_username()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		nil,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Special:Block/Example&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_with_non_normalized_ipv6_address()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;2001:db8::ff00:12:3456&amp;#039;,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Special:Block/2001:db8:0:0::ff00:12:3456&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_with_invalid_ipv4_address()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		nil,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Special:Block/1.2.3.256&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_special_block_in_french()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;1.2.3.4&amp;#039;,&lt;br /&gt;
		parseTitle(mw.title.new(&amp;#039;Spécial:Bloquer/1.2.3.4&amp;#039;))&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- fetchSensitivityData tests&lt;br /&gt;
--&lt;br /&gt;
-- Here we test against the live sensitivity data, which means that changes to&lt;br /&gt;
-- that module could make these tests fail. This is bad for isolation but a&lt;br /&gt;
-- good quick check that the interface is working. To reduce the chance of test&lt;br /&gt;
-- failures because of data changes, only test one or two items, only test the&lt;br /&gt;
-- items that are least likely to change, and only test the data points that we&lt;br /&gt;
-- need.&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_fetch_sensitivity_data_for_us_senate_ip()&lt;br /&gt;
	local ipData = fetchSensitivityData(&amp;#039;156.33.0.1&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;ussenate&amp;#039;, ipData.sensitiveips.matches[1][&amp;#039;entity-id&amp;#039;])&lt;br /&gt;
	self:assertEquals(&amp;#039;156.33.0.1&amp;#039;, ipData.sensitiveips.matches[1].ip)&lt;br /&gt;
	self:assertTrue(ipData.sensitiveips.entities.ussenate.description:find(&amp;#039;Senate&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;political&amp;#039;, ipData.sensitiveips.entities.ussenate.reason)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_fetch_sensitivity_data_for_us_senate_range()&lt;br /&gt;
	local ipData = fetchSensitivityData(&amp;#039;156.33.0.0/24&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;ussenate&amp;#039;, ipData.sensitiveips.matches[1][&amp;#039;entity-id&amp;#039;])&lt;br /&gt;
	self:assertEquals(&amp;#039;156.33.0.0/24&amp;#039;, ipData.sensitiveips.matches[1].range)&lt;br /&gt;
	self:assertTrue(ipData.sensitiveips.entities.ussenate.description:find(&amp;#039;Senate&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;political&amp;#039;, ipData.sensitiveips.entities.ussenate.reason)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_fetch_sensitivity_data_for_wmf_ip()&lt;br /&gt;
	local ipData = fetchSensitivityData(&amp;#039;185.15.56.1&amp;#039;)&lt;br /&gt;
	self:assertEquals(&amp;#039;wmf&amp;#039;, ipData.sensitiveips.matches[1][&amp;#039;entity-id&amp;#039;])&lt;br /&gt;
	self:assertEquals(&amp;#039;185.15.56.1&amp;#039;, ipData.sensitiveips.matches[1].ip)&lt;br /&gt;
	self:assertTrue(ipData.sensitiveips.entities.wmf.description:find(&amp;#039;Wikimedia Foundation&amp;#039;))&lt;br /&gt;
	self:assertEquals(&amp;#039;technical&amp;#039;, ipData.sensitiveips.entities.wmf.reason)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_fetch_sensitivity_data_for_private_ip()&lt;br /&gt;
	local ipData = fetchSensitivityData(&amp;#039;10.0.0.1&amp;#039;)&lt;br /&gt;
	self:assertEquals(0, #ipData.sensitiveips.matches)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- parseSensitivityData tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_sensitivity_data_for_us_senate_ip()&lt;br /&gt;
	local ipData = {&lt;br /&gt;
		sensitiveips = {&lt;br /&gt;
			entities = {&lt;br /&gt;
				ussenate = {&lt;br /&gt;
					description = &amp;quot;the [[United States Senate]]&amp;quot;,&lt;br /&gt;
					id = &amp;quot;ussenate&amp;quot;,&lt;br /&gt;
					ipv4Ranges = {&amp;quot;156.33.0.0/16&amp;quot;},&lt;br /&gt;
					ipv6Ranges = {&amp;quot;2620:0:8a0::/48&amp;quot;, &amp;quot;2600:803:618::/48&amp;quot;},&lt;br /&gt;
					name = &amp;quot;United States Senate&amp;quot;,&lt;br /&gt;
					reason = &amp;quot;political&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			[&amp;quot;entity-ids&amp;quot;] = {&amp;quot;ussenate&amp;quot;},&lt;br /&gt;
			[&amp;quot;matched-ranges&amp;quot;] = {&lt;br /&gt;
				[&amp;quot;156.33.0.0/16&amp;quot;] = {&lt;br /&gt;
					[&amp;quot;entity-id&amp;quot;] = &amp;quot;ussenate&amp;quot;,&lt;br /&gt;
					[&amp;quot;ip-version&amp;quot;] = &amp;quot;IPv4&amp;quot;,&lt;br /&gt;
					range = &amp;quot;156.33.0.0/16&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			matches = {&lt;br /&gt;
				{&lt;br /&gt;
					[&amp;quot;entity-id&amp;quot;] = &amp;quot;ussenate&amp;quot;,&lt;br /&gt;
					ip = &amp;quot;156.33.0.1&amp;quot;,&lt;br /&gt;
					[&amp;quot;ip-version&amp;quot;] = &amp;quot;IPv4&amp;quot;,&lt;br /&gt;
					[&amp;quot;matches-range&amp;quot;] = &amp;quot;156.33.0.0/16&amp;quot;,&lt;br /&gt;
					type = &amp;quot;ip&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	self:assertDeepEquals(&lt;br /&gt;
		{&lt;br /&gt;
			type = &amp;#039;ip&amp;#039;,&lt;br /&gt;
			ip = &amp;#039;156.33.0.1&amp;#039;,&lt;br /&gt;
			[&amp;#039;entity-id&amp;#039;] = &amp;#039;ussenate&amp;#039;,&lt;br /&gt;
			[&amp;#039;matches-range&amp;#039;] = &amp;#039;156.33.0.0/16&amp;#039;,&lt;br /&gt;
			[&amp;#039;entity-name&amp;#039;] = &amp;#039;United States Senate&amp;#039;,&lt;br /&gt;
			[&amp;#039;entity-description&amp;#039;] = &amp;#039;the [[United States Senate]]&amp;#039;,&lt;br /&gt;
			reason = &amp;#039;political&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		parseSensitivityData(ipData)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_sensitivity_data_for_us_senate_range()&lt;br /&gt;
	local ipData = {&lt;br /&gt;
		sensitiveips = {&lt;br /&gt;
			entities = {&lt;br /&gt;
				ussenate = {&lt;br /&gt;
					description = &amp;quot;the [[United States Senate]]&amp;quot;,&lt;br /&gt;
					id = &amp;quot;ussenate&amp;quot;,&lt;br /&gt;
					ipv4Ranges = {&amp;quot;156.33.0.0/16&amp;quot;},&lt;br /&gt;
					ipv6Ranges = {&amp;quot;2620:0:8a0::/48&amp;quot;, &amp;quot;2600:803:618::/48&amp;quot;},&lt;br /&gt;
					name = &amp;quot;United States Senate&amp;quot;,&lt;br /&gt;
					reason = &amp;quot;political&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			[&amp;quot;entity-ids&amp;quot;] = {&amp;quot;ussenate&amp;quot;},&lt;br /&gt;
			[&amp;quot;matched-ranges&amp;quot;] = {&lt;br /&gt;
				[&amp;quot;156.33.0.0/16&amp;quot;] = {&lt;br /&gt;
					[&amp;quot;entity-id&amp;quot;] = &amp;quot;ussenate&amp;quot;,&lt;br /&gt;
					[&amp;quot;ip-version&amp;quot;] = &amp;quot;IPv4&amp;quot;,&lt;br /&gt;
					range = &amp;quot;156.33.0.0/16&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
			matches = {&lt;br /&gt;
				{&lt;br /&gt;
					[&amp;quot;entity-id&amp;quot;] = &amp;quot;ussenate&amp;quot;,&lt;br /&gt;
					[&amp;quot;ip-version&amp;quot;] = &amp;quot;IPv4&amp;quot;,&lt;br /&gt;
					[&amp;quot;matches-range&amp;quot;] = &amp;quot;156.33.0.0/16&amp;quot;,&lt;br /&gt;
					range = &amp;quot;156.33.0.0/24&amp;quot;,&lt;br /&gt;
					type = &amp;quot;range&amp;quot;,&lt;br /&gt;
				},&lt;br /&gt;
			},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	self:assertDeepEquals(&lt;br /&gt;
		{&lt;br /&gt;
			type = &amp;#039;range&amp;#039;,&lt;br /&gt;
			range = &amp;#039;156.33.0.0/24&amp;#039;,&lt;br /&gt;
			[&amp;#039;entity-id&amp;#039;] = &amp;#039;ussenate&amp;#039;,&lt;br /&gt;
			[&amp;#039;matches-range&amp;#039;] = &amp;#039;156.33.0.0/16&amp;#039;,&lt;br /&gt;
			[&amp;#039;entity-name&amp;#039;] = &amp;#039;United States Senate&amp;#039;,&lt;br /&gt;
			[&amp;#039;entity-description&amp;#039;] = &amp;#039;the [[United States Senate]]&amp;#039;,&lt;br /&gt;
			reason = &amp;#039;political&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
		parseSensitivityData(ipData)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_sensitivity_data_when_no_match_occurs()&lt;br /&gt;
	local ipData = {&lt;br /&gt;
		sensitiveips = {&lt;br /&gt;
			entities = {},&lt;br /&gt;
			[&amp;quot;entity-ids&amp;quot;] = {},&lt;br /&gt;
			[&amp;quot;matched-ranges&amp;quot;] = {},&lt;br /&gt;
			matches = {},&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	self:assertEquals(nil, parseSensitivityData(ipData))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_parse_sensitivity_data_when_an_error_occurs()&lt;br /&gt;
	local ipData = {&lt;br /&gt;
		error = {&lt;br /&gt;
			[&amp;quot;*&amp;quot;] = &amp;quot;See https://en.wikipedia.org/wiki/Module:Sensitive_IP_addresses/API for API usage&amp;quot;,&lt;br /&gt;
			code = &amp;quot;sipa-invalid-test-string&amp;quot;,&lt;br /&gt;
			info = &amp;quot;test string #1 &amp;#039;foo&amp;#039; was not a valid IP address or CIDR string&amp;quot;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	self:assertEquals(nil, parseSensitivityData(ipData))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
-- renderMessage tests&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_render_message_template_with_ip()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;1: ip, 2: 156.33.0.1, 3: 156.33.0.0/16, 4: ussenate, &amp;#039;&lt;br /&gt;
		.. &amp;#039;5: United States Senate, 6: the [[United States Senate]], &amp;#039;&lt;br /&gt;
		.. &amp;#039;7: political&amp;#039;,&lt;br /&gt;
		renderMessage(&lt;br /&gt;
			&amp;#039;1: $1, 2: $2, 3: $3, 4: $4, 5: $5, 6: $6, 7: $7&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				type = &amp;#039;ip&amp;#039;,&lt;br /&gt;
				ip = &amp;#039;156.33.0.1&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-id&amp;#039;] = &amp;#039;ussenate&amp;#039;,&lt;br /&gt;
				[&amp;#039;matches-range&amp;#039;] = &amp;#039;156.33.0.0/16&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-name&amp;#039;] = &amp;#039;United States Senate&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-description&amp;#039;] = &amp;#039;the [[United States Senate]]&amp;#039;,&lt;br /&gt;
				reason = &amp;#039;political&amp;#039;,&lt;br /&gt;
			}&lt;br /&gt;
		)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function suite:test_render_message_template_with_range()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;1: range, 2: 156.33.0.0/24, 3: 156.33.0.0/16, 4: ussenate, &amp;#039;&lt;br /&gt;
		.. &amp;#039;5: United States Senate, 6: the [[United States Senate]], &amp;#039;&lt;br /&gt;
		.. &amp;#039;7: political&amp;#039;,&lt;br /&gt;
		renderMessage(&lt;br /&gt;
			&amp;#039;1: $1, 2: $2, 3: $3, 4: $4, 5: $5, 6: $6, 7: $7&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				type = &amp;#039;range&amp;#039;,&lt;br /&gt;
				range = &amp;#039;156.33.0.0/24&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-id&amp;#039;] = &amp;#039;ussenate&amp;#039;,&lt;br /&gt;
				[&amp;#039;matches-range&amp;#039;] = &amp;#039;156.33.0.0/16&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-name&amp;#039;] = &amp;#039;United States Senate&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-description&amp;#039;] = &amp;#039;the [[United States Senate]]&amp;#039;,&lt;br /&gt;
				reason = &amp;#039;political&amp;#039;,&lt;br /&gt;
			}&lt;br /&gt;
		)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function suite:test_render_message_template_with_ip_wikitext()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;IP address&amp;#039;,&lt;br /&gt;
		renderMessage(&lt;br /&gt;
			&amp;#039;{{#ifeq: $1 | ip | IP address | IP range}}&amp;#039;,&lt;br /&gt;
			{&lt;br /&gt;
				type = &amp;#039;ip&amp;#039;,&lt;br /&gt;
				ip = &amp;#039;156.33.0.1&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-id&amp;#039;] = &amp;#039;ussenate&amp;#039;,&lt;br /&gt;
				[&amp;#039;matches-range&amp;#039;] = &amp;#039;156.33.0.0/16&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-name&amp;#039;] = &amp;#039;United States Senate&amp;#039;,&lt;br /&gt;
				[&amp;#039;entity-description&amp;#039;] = &amp;#039;the [[United States Senate]]&amp;#039;,&lt;br /&gt;
				reason = &amp;#039;political&amp;#039;,&lt;br /&gt;
			}&lt;br /&gt;
		)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Main tests&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
function suite:test_main()&lt;br /&gt;
	self:assertEquals(&lt;br /&gt;
		&amp;#039;The IP address 156.33.0.1 belongs to the entity with id &amp;quot;ussenate&amp;quot;.&amp;#039;,&lt;br /&gt;
		mBlockText._main(&lt;br /&gt;
			{&lt;br /&gt;
				message = &amp;#039;The {{#ifeq: $1 | ip | IP address | IP range}} $2 &amp;#039;&lt;br /&gt;
				.. &amp;#039;belongs to the entity with id &amp;quot;$4&amp;quot;.&amp;#039;,&lt;br /&gt;
			},&lt;br /&gt;
		    mw.title.new(&amp;#039;Special:Block/156.33.0.1&amp;#039;)&lt;br /&gt;
		)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
return suite&lt;/div&gt;</summary>
		<author><name>imported&gt;Mr. Stradivarius</name></author>
	</entry>
</feed>