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:Hatnote/testcases
Jump to navigation
Jump to search
Documentation for this module may be created at Module:Hatnote/testcases/doc
local mHatnote = require('Module:Hatnote/sandbox') -- the module to be tested
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
function suite:assertError(func, ...)
local success, result = pcall(func, ...)
self:assertFalse(success)
end
function suite:assertNotEquals(expected, actual)
self:assertTrue(expected ~= actual)
end
function suite:assertParentFrameCallEquals(expected, func, args)
args = args or {}
local current = mw.getCurrentFrame()
local parent = current:newChild{title = 'Parent', args = args}
local child = parent:newChild{title = 'Child'}
self:assertEquals(expected, func(child))
end
-------------------------------------------------------------------------------
-- findNamespaceId tests
-------------------------------------------------------------------------------
function suite:testFindNamespaceIdInputErrors()
self:assertError(mHatnote.findNamespaceId, 9)
self:assertError(mHatnote.findNamespaceId)
self:assertError(mHatnote.findNamespaceId, 'A page', 9)
end
function suite:testFindNamespaceIdNamespaces()
self:assertEquals(0, mHatnote.findNamespaceId('Foo'))
self:assertEquals(2, mHatnote.findNamespaceId('User:Example'))
self:assertEquals(14, mHatnote.findNamespaceId('Category:Example'))
end
function suite:testFindNamespaceIdColonRemoval()
self:assertEquals(14, mHatnote.findNamespaceId(':Category:Example'))
end
function suite:testFindNamespaceIdSkipColonRemoval()
self:assertNotEquals(14, mHatnote.findNamespaceId(':Category:Example', false))
end
-------------------------------------------------------------------------------
-- formatPages tests
-------------------------------------------------------------------------------
function suite:testFormatPages()
self:assertDeepEquals({'[[:Foo]]', '[[:Bar]]'}, mHatnote.formatPages('Foo', 'Bar'))
end
-------------------------------------------------------------------------------
-- formatPageTables tests
-------------------------------------------------------------------------------
function suite:testFormatPageTables()
self:assertDeepEquals(
{'[[:Foo|foo]]', '[[:Bar|bar]]'},
mHatnote.formatPageTables({'Foo', 'foo'}, {'Bar', 'bar'})
)
end
-------------------------------------------------------------------------------
-- makeWikitextError tests
-------------------------------------------------------------------------------
function suite:testMakeWikitextError()
self:assertEquals(
'<strong class="error">Error: Foo.</strong>[[Category:Hatnote templates with errors]]',
mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Example'))
)
end
function suite:testMakeWikitextErrorHelpLink()
self:assertEquals(
'<strong class="error">Error: Foo ([[Bar|help]]).</strong>[[Category:Hatnote templates with errors]]',
mHatnote.makeWikitextError('Foo', 'Bar', nil, mw.title.new('Example'))
)
end
function suite:testMakeWikitextErrorManualCategorySuppression()
self:assertEquals(
'<strong class="error">Error: Foo.</strong>',
mHatnote.makeWikitextError('Foo', nil, false, mw.title.new('Example'))
)
end
function suite:testMakeWikitextErrorTalkPageCategorySuppression()
self:assertEquals(
'<strong class="error">Error: Foo.</strong>',
mHatnote.makeWikitextError('Foo', nil, nil, mw.title.new('Talk:Example'))
)
end
-------------------------------------------------------------------------------
-- formatLink tests
-------------------------------------------------------------------------------
function suite:testFormatLink()
self:assertEquals('[[:Foo]]', mHatnote._formatLink{link = 'Foo'})
end
function suite:testFormatLinkColonHandling()
self:assertEquals(
'[[:Category:Foo]]',
mHatnote._formatLink{link = ':Category:Foo'}
)
end
function suite:testFormatLinkSectionLinking()
self:assertEquals(
'[[:Foo#Bar|Foo § Bar]]',
mHatnote._formatLink{link = 'Foo#Bar'}
)
end
function suite:testFormatLinkPipeHandling()
self:assertEquals('[[:Foo|Bar]]', mHatnote._formatLink{link = 'Foo|Bar'})
end
function suite:testFormatLinkDisplay()
self:assertEquals(
'[[:Foo|Bar]]',
mHatnote._formatLink{link = 'Foo', display = 'Bar'}
)
end
function suite:testFormatLinkDisplayOverwritesManualPiping()
self:assertEquals(
'[[:Foo|Baz]]',
mHatnote._formatLink{link = 'Foo|Bar', display = 'Baz'}
)
end
function suite:testFormatLinkPageItalicization()
self:assertEquals(
"[[:Foo|<i>Foo</i>]]",
mHatnote._formatLink{link = 'Foo', italicizePage = true}
)
end
function suite:testFormatLinkPageItalicizationWithSection()
self:assertEquals(
"[[:Foo#Bar|<i>Foo</i> § Bar]]",
mHatnote._formatLink{link = 'Foo#Bar', italicizePage = true}
)
end
function suite:testFormatLinkSectionItalicization()
self:assertEquals(
"[[:Foo#Bar|Foo § <i>Bar</i>]]",
mHatnote._formatLink{link = 'Foo#Bar', italicizeSection = true}
)
end
function suite:testFormatLinkPageItalicizationIsOverwrittenByDisplay()
self:assertEquals(
"[[:Foo#Bar|Baz]]",
mHatnote._formatLink{
link = 'Foo#Bar',
display = 'Baz',
italicizePage = true,
}
)
end
function suite:testFormatLinkSectionItalicizationIsOverwrittenByDisplay()
self:assertEquals(
"[[:Foo#Bar|Baz]]",
mHatnote._formatLink{
link = 'Foo#Bar',
display = 'Baz',
italicizeSection = true,
}
)
end
function suite:testFormatLinkItalicizationIsOverwrittenByManualPiping()
self:assertEquals(
"[[:Foo#Bar|Baz]]",
mHatnote._formatLink{
link = 'Foo#Bar|Baz',
italicizePage = true,
italicizeSection = true,
}
)
end
function suite:testFormatLinkEntryPoint()
self:assertParentFrameCallEquals('[[:Foo]]', mHatnote.formatLink, {'Foo'})
self:assertParentFrameCallEquals(
'[[:Foo|Bar]]',
mHatnote.formatLink, {'Foo', 'Bar'}
)
self:assertParentFrameCallEquals(
"[[:Foo#Bar|<i>Foo</i> § <i>Bar</i>]]",
mHatnote.formatLink,
{'Foo#Bar', italicizepage="yes", italicizesection="yes"}
)
self:assertParentFrameCallEquals(
"[[:Foo#Bar|Foo § Bar]]",
mHatnote.formatLink,
{'Foo#Bar', italicizepage="no", italicizesection="no"}
)
end
-------------------------------------------------------------------------------
-- hatnote tests
-------------------------------------------------------------------------------
function suite:testHatnoteInputErrors()
self:assertError(mHatnote._hatnote, 9)
self:assertError(mHatnote._hatnote)
self:assertError(mHatnote._hatnote, 'A page', 9)
end
function suite:testHatnote()
self:assertEquals('<div role="note" class="hatnote navigation-not-searchable">Foo</div>', mHatnote._hatnote('Foo'))
end
function suite:testHatnoteSelfref()
self:assertEquals(
'<div role="note" class="hatnote navigation-not-searchable selfref">Foo</div>',
mHatnote._hatnote('Foo', {selfref = true})
)
end
function suite:testHatnoteExtraClasses()
self:assertEquals(
'<div role="note" class="hatnote navigation-not-searchable extraclass">Foo</div>',
mHatnote._hatnote('Foo', {extraclasses = 'extraclass'})
)
end
function suite:testHatnoteEntryPoint()
self:assertParentFrameCallEquals(
'<div role="note" class="hatnote navigation-not-searchable">Foo</div>',
mHatnote.hatnote,
{'Foo'}
)
end
function suite:testHatnoteEntryPointSelfref()
self:assertParentFrameCallEquals(
'<div role="note" class="hatnote navigation-not-searchable selfref">Foo</div>',
mHatnote.hatnote,
{'Foo', selfref = 'yes'}
)
end
function suite:testHatnoteEntryPointExtraClasses()
self:assertParentFrameCallEquals(
'<div role="note" class="hatnote navigation-not-searchable extraclass">Foo</div>',
mHatnote.hatnote,
{'Foo', extraclasses = 'extraclass'}
)
end
return suite