Koha Test Wiki MW Canasta on Koha Portainer

Test major Koha Wiki changes or bug fixes here without fear of breaking the production wiki.

For the current Koha Wiki, visit https://wiki.koha-community.org .

Module:Reply to/testcases

From Koha Test Wiki MW Canasta on Koha Portainer
Jump to navigation Jump to search

Documentation for this module may be created at Module:Reply to/testcases/doc

local mReplyTo = require('Module:Reply to/sandbox') -- the module to be tested
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
local frame = mw.getCurrentFrame()

--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------

local function makeFrameWithParentArgs(args)
	local parent = frame:newChild{title = 'Template:Reply to', args = args}
	local child = parent:newChild{title = 'Module:Reply to'}
	return child
end

local function replyTo(args)
	return mReplyTo.replyto(makeFrameWithParentArgs(args))
end

-- Returns an array of n unique strings.
local function makeNUniqueStrings(n)
	local ret = {}
	for i = 1, n do
		ret[i] = tostring(i)
	end
	return ret
end

function suite:assertHtmlError(pattern, output)
	pattern = '^<strong class="error">Error in %[%[Template:Reply to%]%]: ' .. pattern .. '.</strong>$'
	self:assertStringContains(pattern, output)
end

function suite:assertContentEquals(expected, actual)
	expected = '<span class="template-ping">' .. expected .. '</span>'
	self:assertEquals(mw.text.trim(expected), mw.text.trim(actual))
end

--------------------------------------------------------------------------------
-- Error tests
--------------------------------------------------------------------------------

function suite:testNoUsernamesError()
    self:assertHtmlError('No usernames given', replyTo{})
end

function suite:testInvalidUsernameError()
    self:assertHtmlError("'%S+' is not a valid username or user page", replyTo{'Examp|le'})
end

function suite:testTooManyUsernamesError()
	self:assertHtmlError(
		'More than %d+ names specified',
		replyTo(makeNUniqueStrings(1000)) -- The limit is probably always going to be lower than 1000
	)
end

--------------------------------------------------------------------------------
-- Test defaults
--------------------------------------------------------------------------------

function suite:testOneUsername()
	self:assertContentEquals(
		'@[[User:Example|Example]]:',
		replyTo{'Example'}
	)
end

function suite:testTwoUsernames()
	self:assertContentEquals(
		'@[[User:Example|Example]] and [[User:Example2|Example2]]:',
		replyTo{'Example', 'Example2'}
	)
end

function suite:testThreeUsernames()
	self:assertContentEquals(
		'@[[User:Example|Example]], [[User:Example2|Example2]], and [[User:Example3|Example3]]:',
		replyTo{'Example', 'Example2', 'Example3'}
	)
end

function suite:testFourUsernames()
	self:assertContentEquals(
		'@[[User:Example|Example]], [[User:Example2|Example2]], [[User:Example3|Example3]], and [[User:Example4|Example4]]:',
		replyTo{'Example', 'Example2', 'Example3', 'Example4'}
	)
end

--------------------------------------------------------------------------------
-- Test labels
--------------------------------------------------------------------------------

function suite:testLabel()
	self:assertContentEquals(
		'@[[User:Example|Foo]]:',
		replyTo{[1] = 'Example', label = 'Foo'}
	)
end

function suite:testLabel1()
	self:assertContentEquals(
		'@[[User:Example|Foo]]:',
		replyTo{[1] = 'Example', label1 = 'Foo'}
	)
end

function suite:testTwoLabels()
	self:assertContentEquals(
		'@[[User:Example|Foo]] and [[User:Example2|Bar]]:',
		replyTo{[1] = 'Example', label1 = 'Foo', [2] = 'Example2', label2 = 'Bar'}
	)
end

function suite:testThreeLabels()
	self:assertContentEquals(
		'@[[User:Example|Foo]], [[User:Example2|Bar]], and [[User:Example3|Baz]]:',
		replyTo{[1] = 'Example', label1 = 'Foo', [2] = 'Example2', label2 = 'Bar', [3] = 'Example3', label3 = 'Baz'}
	)
end

--------------------------------------------------------------------------------
-- Test special formatting
--------------------------------------------------------------------------------

function suite:testPrefix()
	self:assertContentEquals(
		'foo[[User:Example|Example]]:',
		replyTo{'Example', prefix = 'foo'}
	)
end

function suite:testBlankPrefix()
	self:assertContentEquals(
		'[[User:Example|Example]]:',
		replyTo{'Example', prefix = ''}
	)
end

function suite:testConjunction()
	self:assertContentEquals(
		'@[[User:Example|Example]], [[User:Example2|Example2]], foo [[User:Example3|Example3]]:',
		replyTo{'Example', 'Example2', 'Example3', c = 'foo'}
	)
end

function suite:testBlankConjunction()
	self:assertContentEquals(
		'@[[User:Example|Example]], [[User:Example2|Example2]], [[User:Example3|Example3]]:',
		replyTo{'Example', 'Example2', 'Example3', c = ''}
	)
end

function suite:testPunctuation()
	self:assertContentEquals(
		'@[[User:Example|Example]]foo',
		replyTo{'Example', p = 'foo'}
	)
end

function suite:testBlankPunctuation()
	self:assertContentEquals(
		'@[[User:Example|Example]]',
		replyTo{'Example', p = ''}
	)
end

--------------------------------------------------------------------------------
-- Test non-standard parameter orders
--------------------------------------------------------------------------------

function suite:testNoFirstParam()
	self:assertContentEquals(
		'@[[User:Example|Example]]:',
		replyTo{[2] = 'Example'}
	)
end

function suite:testNoFirstParamWithLabel()
	self:assertContentEquals(
		'@[[User:Example|Example]]:',
		replyTo{[2] = 'Example', label = 'Foo'}
	)
end

function suite:testNoFirstParamWithLabel2()
	self:assertContentEquals(
		'@[[User:Example|Foo]]:',
		replyTo{[2] = 'Example', label2 = 'Foo'}
	)
end

return suite