Jump to content

Module:Mock title/testcases

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Mr. Stradivarius (talk | contribs) at 09:43, 7 March 2021 (add more tests for simple properties). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local mMockTitle = require("Module:Mock title")
local ScribuntoUnit = require("Module:ScribuntoUnit")

local suite = ScribuntoUnit:new()

--------------------------------------------------------------------------------
-- MockTitle tests
--------------------------------------------------------------------------------

suite["test MockTitle: when no argument table is supplied, an error is raised"] = function (self)
	self:assertThrows(
		function () mMockTitle.MockTitle() end,
		"bad argument #1 to 'MockTitle' (table expected, got nil)"
	)
end

suite["test MockTitle: when no page argument is supplied, an error is raised"] = function (self)
	self:assertThrows(
		function () mMockTitle.MockTitle{} end,
		"bad named argument page to 'MockTitle' (string expected, got nil)"
	)
end

local pageNames = {
	"Example",
	"fr:Example",
	"Module:Sandbox",
	"Module:Sandbox/subpage",
	"mw:Test",
	"fr:b:Example",
}

for _, pageName in ipairs(pageNames) do
	suite[
		string.format(
			'test MockTitle: when using page name "%s", the prefixedText property equals the page name',
			pageName
		)
	] = function (self)
		self:assertEquals("Example", mMockTitle.MockTitle({page = "Example"}).prefixedText)
	end
end

local simplePropertyTestData = {
	{
		property = "id",
		page = "Example",
		value = 123456,
	},
	{
		property = "isRedirect",
		page = "Main Page",
		value = true,
	},
	{
		property = "exists",
		page = "Main Page",
		value = false,
	},
	{
		property = "contentModel",
		page = "Main Page",
		value = "foo",
	},
}

for _, testData in ipairs(simplePropertyTestData) do
	suite[string.format("test MockTitle: property %s is mocked using the %s option", testData.property, testData.property)] = function (self)
		local title = mMockTitle.MockTitle({page = testData.page, [testData.property] = testData.value})
		self:assertEquals(testData.value, title[testData.property])
	end
end

local protectionLevelTestData = {
	{
		optionName = "editProtection",
		optionValue = "sysop",
		expectedProtectionAction = "edit",
	},
	{
		optionName = "moveProtection",
		optionValue = "sysop",
		expectedProtectionAction = "move",
	},
	{
		optionName = "createProtection",
		optionValue = "sysop",
		expectedProtectionAction = "create",
	},
	{
		optionName = "uploadProtection",
		optionValue = "sysop",
		expectedProtectionAction = "upload",
	},
}

for _, testData in ipairs(protectionLevelTestData) do
	suite[
		string.format(
			'test MockTitle: when setting option %s to "%s", the protectionLevels table is updated accordingly',
			testData.optionName,
			testData.optionValue
		)
	] = function (self)
		local title = mMockTitle.MockTitle{page = "Example", [testData.optionName] = testData.optionValue}
		self:assertEquals(testData.optionValue, title.protectionLevels[testData.expectedProtectionAction][1])
	end
end

local fallbackPropertyTestData = {
	{
		property = "id",
		option = "id",
		page = "Example",
	},
	{
		property = "isRedirect",
		option = "isRedirect",
		page = "WP:ANI",
	},
	{
		property = "exists",
		option = "exists",
		page = "Non-existent title f292umz0tyi",
	},
	{
		property = "contentModel",
		option = "contentModel",
		page = "User:Example/common.js",
	},
	{
		property = "redirectTarget",
		option = "redirectTarget",
		page = "WP:ANI",
	},
	{
		property = "protectionLevels",
		option = "editProtection",
		page = "Main Page",
	},
}

for _, testData in ipairs(fallbackPropertyTestData) do
	suite[string.format("test MockTitle: if no %s option is specified, the real %s value is used", testData.option, testData.property)] = function (self)
		suite:assertDeepEquals(
			mw.title.new(testData.page)[testData.property],
			mMockTitle.MockTitle{page = testData.page}[testData.property]
		)
	end
end

return suite