Jump to content

Module:WikiProject assessment progression/testcases

From Wikipedia, the free encyclopedia
-- Unit tests for [[Module:WikiProject assessment progression]]. Click talk page to run tests.
local moduleName = 'WikiProject assessment progression/sandbox'
local myModule = require('Module:' .. moduleName)
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()

function suite:calculateProjectTotal()
	local projectTotal = self.frame:preprocess(
		'{{#expr:{{PAGESINCATEGORY:FA-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:FL-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:FM-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:A-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:GA-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:B-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:C-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Start-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Stub-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:List-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Book-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Category-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Disambig-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:File-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Portal-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Project-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Redirect-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Template-Class spaceflight articles|pages|R}} + {{PAGESINCATEGORY:Unassessed spaceflight articles|pages|R}}}}'
		)
	return projectTotal
end

function suite:assertTypeEquals(expectedType, functionName, message)
	local outputType = type(functionName)
	self:assertEquals(expectedType, outputType, message)
end

-- Confirm test function itself is working
function suite:test_assertTypeEquals_returns_correctly()
	self:assertTypeEquals('number', 10, 'assertTypeEquals failed to compare value to its type')
end

-- Confirm output is a number formatted as a string
function suite:test_module_outputs_number_as_string()
	local asString = self.frame:preprocess('{{#invoke:'..moduleName..'|main|project=spaceflight}}')
	local asNumber = tonumber(asString)
	self:assertTypeEquals('string', asString, 'Module output is not formatted as a string')
	self:assertTypeEquals('number', asNumber, 'Module output cannot be converted to a number')
end

-- Confirm output returns expected value
function suite:test_module_outputs_expected_value()
	local projectTotal = self:calculateProjectTotal()
	local expectedOutput = self.frame:preprocess('{{#expr:100 * ((' .. projectTotal .. ' - {{PAGESINCATEGORY:Unassessed spaceflight articles|pages|R}} ) / ' .. projectTotal .. ' ) round 1}}')
	local moduleOutput = self.frame:preprocess('{{#invoke:'..moduleName..'|main|project=spaceflight}}')
	self:assertEquals(expectedOutput, moduleOutput, 'Module output does not match expected calculation')
end

-- Confirm output returns expected value for single class
function suite:test_module_outputs_expected_for_single_class()
	local projectTotal = self:calculateProjectTotal()
	local expectedOutput = self.frame:preprocess('{{#expr:100 * ({{PAGESINCATEGORY:Stub-Class spaceflight articles|pages|R}} / ' .. projectTotal .. ' ) round 1}}')
	local moduleOutput = self.frame:preprocess('{{#invoke:'..moduleName..'|main|project=spaceflight|class=Stub}}')
	self:assertEquals(expectedOutput, moduleOutput, 'Module output differs for total on single class')
end

--[[ Confirm that module returns an error if no results are found for project name given
function suite:test_module_returns_error_if_invalid_project_specified()
	local invalidProject = self.frame:preprocess('{{#invoke:WikiProject assessment progression|main|project=SPAceflight}}')
	self:assertEquals('Error: project not found for project name "SPAceflight"', invalidProject)
end
--]]
return suite