UNPKG

wikibase-edit

Version:

Edit Wikibase from NodeJS

284 lines 13.7 kB
import 'should'; import config from 'config'; import { isGuid } from 'wikibase-sdk'; import WBEdit from '../../../src/lib/index.js'; import { assert, randomString } from '../../unit/utils.js'; import { getSandboxPropertyId, getSandboxItemId } from '../utils/sandbox_entities.js'; import { shouldNotBeCalled } from '../utils/utils.js'; import { waitForInstance } from '../utils/wait_for_instance.js'; const wbEdit = WBEdit(config); describe('claim create', function () { this.timeout(20 * 1000); before('wait for instance', waitForInstance); it('should create a claim', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('string'), ]); const value = randomString(); const res = await wbEdit.claim.create({ id, property, value }); res.success.should.equal(1); isGuid(res.claim.id).should.be.true(); res.claim.rank.should.equal('normal'); assert(res.claim.mainsnak.snaktype === 'value'); res.claim.mainsnak.datavalue.value.should.equal(value); }); it('should create a claim with a negative year', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('time'), ]); const res = await wbEdit.claim.create({ id, property, value: '-0028' }); res.success.should.equal(1); isGuid(res.claim.id).should.be.true(); res.claim.rank.should.equal('normal'); assert(res.claim.mainsnak.snaktype === 'value'); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('time' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.time.should.equal('-0028-00-00T00:00:00Z'); }); it('should create a claim with a preferred rank', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('string'), ]); const value = randomString(); const res = await wbEdit.claim.create({ id, property, value, rank: 'preferred' }); res.claim.rank.should.equal('preferred'); }); it('should create a claim with qualifiers and references', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('string'), ]); const value = randomString(); const res = await wbEdit.claim.create({ id, property, value, rank: 'preferred', qualifiers: { [property]: value, }, references: [ { [property]: value }, { [property]: value }, ], }); assert('datavalue' in res.claim.qualifiers[property][0]); assert('datavalue' in res.claim.references[0].snaks[property][0]); assert('datavalue' in res.claim.references[1].snaks[property][0]); res.claim.qualifiers[property][0].datavalue.value.should.equal(value); res.claim.references[0].snaks[property][0].datavalue.value.should.equal(value); res.claim.references[1].snaks[property][0].datavalue.value.should.equal(value); }); it('should create a time claim with a low precision', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('time'), ]); const value = { time: '2500000', precision: 4 }; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('time' in res.claim.mainsnak.datavalue.value); assert('precision' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.time.should.equal('+2500000-00-00T00:00:00Z'); res.claim.mainsnak.datavalue.value.precision.should.equal(4); }); // time precision not supported by the Wikibase API xit('should create a time claim with a high precision', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('time'), ]); const value = { time: '1802-02-04T11:22:33Z', precision: 14 }; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('time' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.time.should.equal('+1802-02-04T11:22:33Z'); res.claim.mainsnak.datavalue.value.precision.should.equal(14); }); it('should create a time claim with a custom calendar', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('time'), ]); const value = { time: '1402-11-12', calendar: 'julian' }; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('time' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.time.should.equal('+1402-11-12T00:00:00Z'); res.claim.mainsnak.datavalue.value.calendarmodel.should.equal('http://www.wikidata.org/entity/Q1985786'); }); it('should reject a claim with an invalid time', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('time'), ]); const value = '1802-22-33'; try { await wbEdit.claim.create({ id, property, value }).then(shouldNotBeCalled); } catch (err) { err.message.should.equal('invalid time value'); err.context.value.should.equal(value); } }); it('should create a external id claim', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('external-id'), ]); const value = 'foo'; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); res.claim.mainsnak.datavalue.value.should.equal('foo'); }); it('should create a monolingualtext claim', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('monolingualtext'), ]); const value = { text: 'bulgroz', language: 'fr' }; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('text' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.text.should.equal('bulgroz'); res.claim.mainsnak.datavalue.value.language.should.equal('fr'); }); it('should create a url claim', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('url'), ]); const value = 'http://foo.bar'; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); res.claim.mainsnak.datavalue.value.should.equal(value); }); it('should create a quantity claim from a positive number value', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('quantity'), ]); const value = 9000; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('amount' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.amount.should.equal('+9000'); res.claim.mainsnak.datavalue.value.unit.should.equal('1'); }); it('should create a quantity claim from a negative number value', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('quantity'), ]); const value = -9000; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('amount' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.amount.should.equal('-9000'); res.claim.mainsnak.datavalue.value.unit.should.equal('1'); }); it('should create a quantity claim from a positive string value', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('quantity'), ]); const value = '9001'; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('amount' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.amount.should.equal('+9001'); res.claim.mainsnak.datavalue.value.unit.should.equal('1'); }); it('should create a quantity claim from a negative string value', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('quantity'), ]); const value = '-9001'; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('amount' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.amount.should.equal('-9001'); res.claim.mainsnak.datavalue.value.unit.should.equal('1'); }); it('should create a quantity claim with a custom unit and bounds', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('quantity'), ]); const value = { amount: 9002, unit: 'Q7727', lowerBound: 9001, upperBound: 9013 }; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); assert(typeof res.claim.mainsnak.datavalue.value === 'object'); assert('amount' in res.claim.mainsnak.datavalue.value); res.claim.mainsnak.datavalue.value.amount.should.equal('+9002'); res.claim.mainsnak.datavalue.value.lowerBound.should.equal('+9001'); res.claim.mainsnak.datavalue.value.upperBound.should.equal('+9013'); res.claim.mainsnak.datavalue.value.unit.should.endWith('Q7727'); }); it('should create a globe coordinate claim', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('globe-coordinate'), ]); const value = { latitude: 45.758, longitude: 4.84138, precision: 1 / 360 }; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); const createdValue = res.claim.mainsnak.datavalue.value; assert(typeof createdValue === 'object' && 'latitude' in createdValue); createdValue.latitude.should.equal(value.latitude); createdValue.longitude.should.equal(value.longitude); createdValue.precision.should.equal(value.precision); }); it('should create a geo-shape claim', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('geo-shape'), ]); const value = 'Data:United Kingdom.map'; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); res.claim.mainsnak.datavalue.value.should.equal(value); }); it('should create a tabular-data claim', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('tabular-data'), ]); const value = 'Data:Sandbox/TheDJ/DJ.tab'; const res = await wbEdit.claim.create({ id, property, value }); assert('datavalue' in res.claim.mainsnak); res.claim.mainsnak.datavalue.value.should.equal(value); }); // Math and musical notation datatype aren't available on the wikibase-docker instance. it('should create a claim of snaktype novalue', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('url'), ]); const value = { snaktype: 'novalue' }; const res = await wbEdit.claim.create({ id, property, value }); res.claim.mainsnak.snaktype.should.equal('novalue'); }); it('should create a claim of snaktype somevalue', async () => { const [id, property] = await Promise.all([ getSandboxItemId(), getSandboxPropertyId('url'), ]); const value = { snaktype: 'somevalue' }; const res = await wbEdit.claim.create({ id, property, value }); res.claim.mainsnak.snaktype.should.equal('somevalue'); }); }); //# sourceMappingURL=create.js.map