Модуль:Песочница/D6194c-1cc/WDBackendV2/testcases
Документация
local suite = require('Модуль:ScribuntoUnit'):new()
local backend = require('Модуль:Песочница/D6194c-1cc/WDBackendV2')
local wikidata = require('Модуль:WDCommon')
local base = wikidata.base
local saganEntity = 'Q410'
local saganBook = 'Q2482106'
local marsEntity = 'Q111'
local kidneyEntity = 'Q9377'
local journalEntity = 'Q582728'
local scholaryArticleEntity = 'Q13442814'
local scientificJournalEntity = 'Q5633421'
local bookWithInscriptions = 'Q114831437'
local influenzaEntity = 'Q2840'
local P_SUBCLASS_OF = 'P279'
local P_WORK_LANG = 'P407'
local P_LANG_CODE = 'P218'
function suite:test_fetchEntity_baseTypes()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, saganEntity, {
{
name = 'gender',
property = 'P21',
},
{
name = 'birthDate',
property = 'P569',
},
{
name = 'shortName',
property = 'P1813',
filter = base.tryFilterStatementsByLang,
},
})
self:assertEquals('Q6581097', source.gender.entity)
self:assertEquals('male', source.gender.value)
self:assertEquals(1934, source.birthDate.value.year)
self:assertEquals(11, source.birthDate.value.month)
self:assertEquals(9, source.birthDate.value.day)
self:assertEquals('Carl Sagan', source.shortName.value)
end
function suite:test_fetchEntity_get()
local source = {}
local f = backend.new('ru')
f:fetchEntity(source, marsEntity, {
{
name = 'parentBody',
property = 'P397',
get = {
{
name = 'center',
property = 'P397',
},
},
},
})
self:assertEquals('Q649112', source.center.entity)
end
function suite:test_fetchEntity_elseGet_exists()
local source = {}
local f = backend.new('ru')
f:fetchEntity(source, marsEntity, {
{
name = 'namedAfter',
property = 'P138',
elseGet = {
{
name = 'parentBody',
property = 'P397',
},
},
},
})
self:assertTrue(source.namedAfter ~= nil)
self:assertEquals(nil, source.parentBody)
end
function suite:test_fetchEntity_elseGet_notExists()
local source = {}
local f = backend.new('ru')
f:fetchEntity(source, marsEntity, {
{
name = 'nonExistant',
property = 'P1111',
elseGet = {
{
name = 'parentBody',
property = 'P397',
},
},
},
})
self:assertEquals(nil, source.nonExistant)
self:assertEquals('Q525', source.parentBody.entity)
end
function suite:test_fetchEntity_qualifiers()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, kidneyEntity, {
{
property = 'P2924',
qualifiers = {
{
name = 'title',
property = 'P1810',
max = 1,
},
{
name = 'date',
property = 'P577',
max = 1,
},
},
},
})
self:assertEquals('Почки', source.title.value)
self:assertEquals(2016, source.date.value.year)
self:assertEquals(nil, source.date.value.month)
end
function suite:test_fetchEntity_getValue()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, journalEntity, {
{
name = 'title',
getValue = wikidata.name,
},
})
self:assertEquals('The New England Journal of Medicine', source.title.value)
end
function suite:test_fetchEntity_isArray()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, journalEntity, {
{
name = 'title',
property = 'P921',
isArray = true,
},
})
self:assertEquals(1, table.getn(source.title))
end
function suite:test_fetchEntity_components()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, saganBook, {
{
name = 'author',
property = 'P50',
get = {
{
name = 'familyName',
property = 'P734',
isLocal = true,
},
},
},
})
self:assertEquals(saganEntity, source.author.entity)
self:assertTrue(source.author.components ~= nil)
self:assertTrue(source.author.components.familyName ~= nil)
self:assertEquals('Q17516282', source.author.components.familyName.entity)
end
function suite:test_fetchEntity_noOverwrite()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, saganBook, {
{
name = 'author',
property = 'P50',
get = {
{
name = 'author',
property = 'P734',
},
},
},
})
self:assertEquals(saganEntity, source.author.entity)
end
function suite:test_fetchEntity_overwrite()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, saganBook, {
{
name = 'author',
property = 'P50',
get = {
{
name = 'author',
property = 'P734',
overwrite = true,
},
},
},
})
self:assertEquals('Q17516282', source.author.entity)
end
function suite:test_fetchEntity_overwriteByQualifier()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, 'Q117104121', {
{
name = 'publisher',
property = 'P123',
qualifiers = {
{
name = 'publisher',
property = 'P1932',
overwrite = true,
max = 1,
},
},
},
})
self:assertEquals('Springer-Verlag', source.publisher.value)
end
function suite:test_fetchEntity_overwriteValueByQualifier()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, 'Q117104121', {
{
name = 'publisher',
property = 'P123',
qualifiers = {
{
property = 'P1932',
overwriteValue = true,
max = 1,
},
},
},
})
self:assertEquals('Springer-Verlag', source.publisher.value)
end
function suite:test_fetchEntity_array()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, saganBook, {
{
name = 'editions',
property = 'P747',
},
})
self:assertTrue(table.getn(source.editions) > 1)
end
function suite:test_fetchEntity_max()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, saganBook, {
{
name = 'author',
property = 'P747',
max = 1,
},
})
self:assertEquals(0, table.getn(source.author))
end
function suite:test_fetchEntity_defaultUnit()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, saganBook, {
{
name = 'doNotDoSo',
property = 'P1476',
defaultUnit = 'Q1069725',
max = 1,
},
})
self:assertEquals('Q1069725', source.doNotDoSo.unitEntity)
end
function suite:test_fetchEntity_map()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, journalEntity, {
{
name = 'isScholaryArticle',
property = 'P31',
mapEntity = { [scientificJournalEntity] = scholaryArticleEntity },
max = 1,
},
})
self:assertEquals(scholaryArticleEntity, source.isScholaryArticle.entity)
end
function suite:test_fetchEntity_has()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, bookWithInscriptions, {
{
name = 'info',
property = 'P1684',
has = {
{ property='P2868', value='Q116158574' },
},
isArray = true,
},
})
self:assertEquals(type(source.info), 'table')
self:assertEquals(table.getn(source.info), 1)
self:assertEquals(source.info[1].value, 'учебное пособие')
end
function suite:test_fetchEntity_overwriteEntity()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, bookWithInscriptions, {
{
name = 'info',
property = 'P1684',
has = {
{ property='P6568', value='Q136822' },
},
qualifiers = {
{
property = 'P6568',
max = 1,
overwriteEntity = true,
},
},
isArray = true,
},
})
self:assertEquals(type(source.info), 'table')
self:assertEquals(table.getn(source.info), 1)
self:assertEquals(source.info[1].value, 'высшее профессиональное образование')
self:assertEquals(source.info[1].entity, 'Q136822')
end
function suite:test_fetchEntity_overwriteValue()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, bookWithInscriptions, {
{
name = 'info',
property = 'P1684',
has = {
{ property='P6568', value='Q136822' },
},
qualifiers = {
{
property = 'P6568',
max = 1,
overwriteValue = true,
},
},
isArray = true,
},
})
self:assertEquals(type(source.info), 'table')
self:assertEquals(table.getn(source.info), 1)
self:assertEquals(source.info[1].value, 'higher education')
self:assertEquals(source.info[1].entity, nil)
end
function suite:test_fetchEntity_isLocal_in_unnamed()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, influenzaEntity, {
{
name = 'mesh',
property = 'P486',
get = {
{
entity = 'P486',
property = 'P9073',
get = {
{
name = 'lang',
property = 'P407',
isLocal = true,
},
},
}
},
},
})
self:assertTrue(source.mesh)
if not source.mesh.components then
mw.log('Test test_fetchEntity_isLocal_in_unnamed failed. Debug data:')
mw.logObject(source)
end
self:assertTrue(source.mesh.components ~= nil)
self:assertEquals(source.mesh.components.lang.entity, 'Q1860')
end
function suite:test_fetchEntity_isLocal_in_array()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, 'Q8277', {
{
name = 'omim',
property = 'P492',
qualifiers = {
{
name = 'title',
property = 'P1810',
max = 1,
isLocal = true,
},
},
},
})
self:assertTrue(table.getn(source.omim) > 1)
self:assertTrue(source.omim[1].components ~= nil)
self:assertTrue(source.omim[1].components.title.value ~= nil)
end
function suite:test_fetchEntity_isLocal_with_qualifiers_and_get_by_entity_with_isLocal()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, 'Q8277', {
{
name = 'omim',
property = 'P492',
qualifiers = {
{
name = 'title',
property = 'P1810',
max = 1,
isLocal = true,
},
},
get = {
{
name = 'test',
entity = 'P492',
property = 'P31',
isLocal = true,
},
},
},
})
self:assertTrue(table.getn(source.omim) > 1)
self:assertTrue(source.omim[1].components ~= nil)
self:assertTrue(source.omim[1].components.title.value ~= nil)
end
function suite:test_fetchEntity_forceGet()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, 'Q8277', {
{
name = 'omim',
property = 'P492',
forceGet = {
{
name = 'test',
entity = 'P492',
property = 'P31',
max = 1,
isLocal = true,
},
},
},
})
self:assertTrue(table.getn(source.omim) > 0)
self:assertTrue(source.omim[1].components ~= nil)
self:assertTrue(source.omim[1].components.test.value ~= nil)
end
function suite:test_fetchEntity_forceGet_predefined_value()
local source = {
omim = { value = { '612594 '} }
}
local f = backend.new('en')
f:fetchEntity(source, 'Q8277', {
{
name = 'omim',
property = 'P492',
forceGet = {
{
name = 'test',
entity = 'P492',
property = 'P31',
max = 1,
isLocal = true,
},
},
},
})
self:assertTrue(table.getn(source.omim) == 0)
self:assertTrue(source.omim.components ~= nil)
self:assertTrue(source.omim.components.test.value ~= nil)
end
function suite:test_fetchEntity_forceGet_predefined_value()
local source = {
omim = { value = { '612594 '} }
}
local f = backend.new('en')
f:fetchEntity(source, nil, {
{
name = 'omim',
property = 'P492',
forceGet = {
{
name = 'test',
entity = 'P492',
property = 'P31',
max = 1,
isLocal = true,
},
},
},
})
self:assertTrue(table.getn(source.omim) == 0)
self:assertTrue(source.omim.components ~= nil)
self:assertTrue(source.omim.components.test.value ~= nil)
end
function suite:test_fetchEntity_elseGet_in_inLocal_with_overwriteEntity()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, 'Q455', {
{
name = 'lang',
property = P_WORK_LANG,
get = {
{
name = 'langCode',
property = P_LANG_CODE,
isLocal = true,
max = 1,
elseGet = {
-- for ethnolects determine parent language
{
property = P_SUBCLASS_OF,
overwriteEntity = true,
max = 1,
get = {
{
name = 'langCode',
property = P_LANG_CODE,
isLocal = true,
max = 1,
},
},
},
},
},
},
},
})
self:assertTrue(source.lang ~= nil)
self:assertEquals('Q1860', source.lang.entity)
if not source.lang.components then
mw.log('Test test_fetchEntity_elseGet_in_inLocal_with_overwriteEntity failed. Debug data:')
mw.logObject(source)
end
self:assertTrue(source.lang.components ~= nil)
self:assertTrue(source.lang.components.langCode ~= nil)
self:assertEquals('en', source.lang.components.langCode.value)
end
function suite:test_fetchEntity_substInto()
local source = {}
local f = backend.new('en')
f:fetchEntity(source, 'Q2', {
{
name = 'urlMask',
entity = 'P1417',
property = 'P1630',
max = 1,
},
{
name = 'id',
property = 'P1417',
substInto = {
name = 'url',
template = {
name = 'urlMask',
},
},
},
})
self:assertTrue(source.id ~= nil)
self:assertTrue(source.urlMask ~= nil)
self:assertTrue(source.url ~= nil)
self:assertEquals(source.url.value, 'https://www.britannica.com/place/Earth')
end
return suite