Модуль:WDBase/testcases

Материал из Буквицы
Перейти к навигации Перейти к поиску

Для документации этого модуля может быть создана страница Модуль:WDBase/testcases/doc

local suite = require('Модуль:ScribuntoUnit'):new()
local base = require('Модуль:WDBase')

local saganBook = 'Q2482106'
local secondEntity = 'Q11574'
local minuteEntity = 'Q7727'
local mammalianKidneyEntity = 'Q113996097'
local entityWithOrderedAuthors = 'Q59330138'

local P_AUTHOR = 'P50'
local P_UNIT_SYMBOL = 'P5061'
local P_CONV_TO_SI_UNIT = 'P2370'
local P_PUBLICATION_DATE = 'P577'

function suite:test_statements()
	local statements = base.statements(saganBook, P_AUTHOR)
	self:assertTrue(table.getn(statements) > 0)

	local statements = base.statements(saganBook, 'P1855')
	self:assertEquals(nil, statements)
end

function suite:test_dateFromDatavalue()
	local statements
	local data

	statements = base.statements('Q73118986', P_PUBLICATION_DATE)
	local datavalue = statements[1].mainsnak.datavalue
	local date = base.dateFromDatavalue(datavalue)
	self:assertEquals(2000, date.year)
	self:assertEquals(11, date.month)
	self:assertEquals(01, date.day)
	self:assertEquals(nil, date.hour)
	self:assertEquals(nil, date.minute)
	self:assertEquals(nil, date.second)
end

function suite:test_dataByStatement()
	local statements
	local data

	statements = base.statements(saganBook, P_AUTHOR)
	data = base.dataByStatement(statements[1], 'en')
	self:assertEquals('table', type(data))
	self:assertEquals('Q410', data.entity)
	self:assertEquals('Carl Sagan', data.value)
	self:assertEquals(nil, data.unitEntity, 'Unit entity for P_AUTHOR is not expected.')

	statements = base.statements(secondEntity, P_UNIT_SYMBOL)
	self:assertTrue(table.getn(statements) > 1, 'More unit symbols expected.')
	data = base.dataByStatement(statements[1], 'ru')
	self:assertEquals(nil, data.entity, 'Entity for P_UNIT_SYMBOL is not expected.')
	self:assertEquals('с', data.value)
	self:assertEquals(nil, data.unitEntity, 'Unit entity for P_UNIT_SYMBOL is not expected.')

	statements = base.statements(minuteEntity, P_CONV_TO_SI_UNIT)
	self:assertEquals(1, table.getn(statements))
	data = base.dataByStatement(statements[1])
	self:assertEquals(nil, data.entity, 'Entity for P_CONV_TO_SI_UNIT is not expected.')
	self:assertEquals(60, data.value)
	self:assertEquals(secondEntity, data.unitEntity)
end

function suite:test_wikilink()
	local link

	link = base.wikilink(mammalianKidneyEntity)
	self:assertEquals(link, '[[Почка млекопитающего]]')

	link = base.wikilink(mammalianKidneyEntity, 'Почка')
	self:assertEquals(link, '[[Почка млекопитающего|Почка]]')
end

function suite:test_statementsByProperties()
	local statements = base.statementsByProperties(entityWithOrderedAuthors, { 'P50', 'P2093' })
	self:assertEquals(6, table.getn(statements))

	local data

	data = base.dataByStatement(statements[4])
	self:assertEquals('Q59679212', data.entity)

	data = base.dataByStatement(statements[5])
	self:assertEquals(nil, data.entity)
	self:assertTrue(data.value ~= nil)

	data = base.dataByStatement(statements[6])
	self:assertEquals('Q38643747', data.entity)
end

function suite:test_text()
	local articleEntity = 'Q59330138'
	local text = base.text(articleEntity, 'P1476', 'ru')
	local lang = base.text(articleEntity, 'P407', 'ru')

	self:assertEquals(text, 'Systematic review or scoping review? Guidance for authors when choosing between a systematic or scoping review approach')
	self:assertEquals(lang, 'английский язык')
end
	
function suite:test_value()
	local articleEntity = 'Q59330138'
	local text = base.value(articleEntity, 'P1476', 'ru')
	local lang = base.value(articleEntity, 'P407', 'ru')

	self:assertEquals(text, 'Systematic review or scoping review? Guidance for authors when choosing between a systematic or scoping review approach')
	self:assertEquals(lang, 'Q1860')
end

function suite:test_tryFilterStatementsByLang()
	local englishEntity = 'Q1860'
	local statements = base.statements(englishEntity, 'P1813')
	self:assertTrue(table.getn(statements) > 1)
	local statements = base.tryFilterStatementsByLang(statements, 'ru')

	self:assertEquals(1, table.getn(statements))
	self:assertEquals('английский', base.textByStatement(statements[1]))
end

function suite:test_tryFilterSnaksByLang()
	local englishEntity = 'Q1860'
	local statements = base.statements(englishEntity, 'P1813')
	self:assertTrue(table.getn(statements) > 1)
	local snaks = {}
	for i, statement in ipairs(statements) do
		snaks[i] = statement.mainsnak
	end
	local snaks = base.tryFilterSnaksByLang(snaks, 'ru')

	self:assertEquals(1, table.getn(snaks))
	self:assertEquals('английский', base.valueBySnak(snaks[1]))
end

function suite:test_filterStatementsByUnit()
	local encyclopediaEntity = 'Q1768199'
	local volumeEntity = 'Q1238720'
	local statements = base.statements(encyclopediaEntity, 'P2635')
	self:assertEquals(1, table.getn(statements))

	statements = base.filterStatementsByUnit(statements, volumeEntity)

	self:assertEquals(1, table.getn(statements))
	local count, unitEntity = base.valueByStatement(statements[1])
	self:assertEquals(35, tonumber(count))
	self:assertEquals(volumeEntity, unitEntity)
end

function suite:test_searchStatementByValue()
	local englishEntity = 'Q1860'
	local statements = base.statements(englishEntity, 'P17')
	self:assertTrue(table.getn(statements) > 1)

	local statement = base.searchStatementByValue(statements, 'Q30')

	self:assertTrue(statement ~= nil)
	self:assertEquals('США', base.textByStatement(statement))
end

function suite:test_resolveParent()
	local parentEntity = base.resolveParent('Q114676884')
	self:assertEquals(saganBook, parentEntity)

	parentEntity = base.resolveParent(saganBook)
	self:assertEquals(nil, parentEntity)
end

function suite:test_instanceOf()
	local editionEntity = 'Q3331189'
	local entity = base.instanceOf('Q114676884', 'P31', { 'Q3331189' })
	self:assertEquals(editionEntity, entity)

	entity = base.instanceOf('Q114676884', 'P31', { 'Q5292', 'Q5293' })
	self:assertEquals(nil, entity)
end

return suite