Module:Mock title/testcases
Appearance
![]() | This is the test cases page for the module Module:Mock title. Results of the test cases. |
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