| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569 |
- import {expect} from 'chai';
- import {ObjectId} from 'mongodb';
- import {MongoClient} from 'mongodb';
- import {format} from '@e22m4u/js-format';
- import {Schema} from '@e22m4u/js-repository';
- import {DataType} from '@e22m4u/js-repository';
- import {createMongodbUrl} from './utils/index.js';
- import {MongodbAdapter} from './mongodb-adapter.js';
- import {AdapterRegistry} from '@e22m4u/js-repository';
- import {DEFAULT_PRIMARY_KEY_PROPERTY_NAME as DEF_PK} from '@e22m4u/js-repository';
- const CONFIG = {
- host: process.env.MONGODB_HOST || 'localhost',
- port: process.env.MONGODB_PORT || 27017,
- database: process.env.MONGODB_DATABASE,
- };
- const MDB_CLIENT = new MongoClient(createMongodbUrl(CONFIG));
- const ADAPTERS_STACK = [];
- function createSchema() {
- const schema = new Schema();
- const adapter = new MongodbAdapter(schema.container, CONFIG);
- ADAPTERS_STACK.push(adapter);
- schema.defineDatasource({name: 'mongodb', adapter: 'mongodb'});
- schema.getService(AdapterRegistry)._adapters['mongodb'] = adapter;
- return schema;
- }
- describe('MongodbAdapter', function () {
- this.timeout(15000);
- afterEach(async function () {
- await MDB_CLIENT.db(CONFIG.database).dropDatabase();
- });
- after(async function () {
- for await (const adapter of ADAPTERS_STACK) {
- await adapter.client.close(true);
- }
- await MDB_CLIENT.close(true);
- });
- describe('_buildProjection', function () {
- describe('single field', function () {
- it('returns undefined if the second argument is undefined', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', undefined);
- expect(res).to.be.undefined;
- });
- it('returns undefined if the second argument is null', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', null);
- expect(res).to.be.undefined;
- });
- it('requires the second argument to be a non-empty string', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const throwable = v => () => A._buildProjection('model', v);
- const error = v =>
- format(
- 'The provided option "fields" should be a non-empty String ' +
- 'or an Array of non-empty String, but %s given.',
- v,
- );
- expect(throwable('')).to.throw(error('""'));
- expect(throwable(10)).to.throw(error('10'));
- expect(throwable(0)).to.throw(error('0'));
- expect(throwable(true)).to.throw(error('true'));
- expect(throwable(false)).to.throw(error('false'));
- expect(throwable({})).to.throw(error('Object'));
- expect(throwable('bar')()).to.be.eql({_id: 1, bar: 1});
- expect(throwable(undefined)()).to.be.undefined;
- expect(throwable(null)()).to.be.undefined;
- });
- it('converts the given property name to the column name', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.STRING,
- columnName: 'bar',
- },
- },
- });
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', 'foo');
- expect(res).to.be.eql({_id: 1, bar: 1});
- });
- it('includes "_id" field to the projection', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', 'foo');
- expect(res).to.be.eql({_id: 1, foo: 1});
- });
- it('includes "_id" as a column name of the given property', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.STRING,
- primaryKey: true,
- columnName: '_id',
- },
- },
- });
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', 'foo');
- expect(res).to.be.eql({_id: 1});
- });
- });
- describe('multiple fields', function () {
- it('returns undefined if the second argument is an empty array', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', []);
- expect(res).to.be.undefined;
- });
- it('requires the second argument to be an array of non-empty strings', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const throwable = v => () => A._buildProjection('model', v);
- const error = v =>
- format(
- 'The provided option "fields" should be a non-empty String ' +
- 'or an Array of non-empty String, but %s given.',
- v,
- );
- expect(throwable([''])).to.throw(error('""'));
- expect(throwable([10])).to.throw(error('10'));
- expect(throwable([0])).to.throw(error('0'));
- expect(throwable([true])).to.throw(error('true'));
- expect(throwable([false])).to.throw(error('false'));
- expect(throwable([{}])).to.throw(error('Object'));
- expect(throwable([undefined])).to.throw(error('undefined'));
- expect(throwable([null])).to.throw(error('null'));
- expect(throwable([])()).to.be.undefined;
- expect(throwable(['bar'])()).to.be.eql({_id: 1, bar: 1});
- });
- it('converts the given property names to column names', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.STRING,
- columnName: 'bar',
- },
- baz: {
- type: DataType.STRING,
- columnName: 'qux',
- },
- },
- });
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', ['foo', 'baz']);
- expect(res).to.be.eql({_id: 1, bar: 1, qux: 1});
- });
- it('includes "_id" field to the projection', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', ['foo', 'bar']);
- expect(res).to.be.eql({_id: 1, foo: 1, bar: 1});
- });
- it('includes "_id" as a column name of the given property', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.STRING,
- primaryKey: true,
- columnName: '_id',
- },
- },
- });
- const A = await schema
- .getService(AdapterRegistry)
- .getAdapter('mongodb');
- const res = A._buildProjection('model', ['foo', 'bar']);
- expect(res).to.be.eql({_id: 1, bar: 1});
- });
- });
- });
- describe('create', function () {
- it('generates a new identifier when a value of a primary key is not provided', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: 'bar'});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 'bar'});
- expect(typeof result[DEF_PK]).to.be.eq('string');
- expect(result[DEF_PK]).to.have.lengthOf(24);
- });
- it('generates a new identifier when a value of a primary key is undefined', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({[DEF_PK]: undefined, foo: 'bar'});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 'bar'});
- expect(typeof result[DEF_PK]).to.be.eq('string');
- expect(result[DEF_PK]).to.have.lengthOf(24);
- });
- it('generates a new identifier when a value of a primary key is null', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({[DEF_PK]: null, foo: 'bar'});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 'bar'});
- expect(typeof result[DEF_PK]).to.be.eq('string');
- expect(result[DEF_PK]).to.have.lengthOf(24);
- });
- it('generates a new identifier for a primary key of a "string" type', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.STRING,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const result = await rep.create({[DEF_PK]: null, foo: 'bar'});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 'bar'});
- expect(typeof result[DEF_PK]).to.be.eq('string');
- expect(result[DEF_PK]).to.have.lengthOf(24);
- });
- it('generates a new identifier for a primary key of a "any" type', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.ANY,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const result = await rep.create({[DEF_PK]: null, foo: 'bar'});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 'bar'});
- expect(typeof result[DEF_PK]).to.be.eq('string');
- expect(result[DEF_PK]).to.have.lengthOf(24);
- });
- it('throws an error when generating a new value for a primary key of a "number" type', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.NUMBER,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const promise = rep.create({});
- expect(promise).to.be.rejectedWith(
- 'MongoDB unable to generate primary keys of Number. ' +
- 'Do provide your own value for the "id" property ' +
- 'or set the property type to String.',
- );
- });
- it('throws an error when generating a new value for a primary key of a "boolean" type', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.BOOLEAN,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const promise = rep.create({});
- expect(promise).to.be.rejectedWith(
- 'MongoDB unable to generate primary keys of Boolean. ' +
- 'Do provide your own value for the "id" property ' +
- 'or set the property type to String.',
- );
- });
- it('throws an error when generating a new value for a primary key of a "array" type', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.ARRAY,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const promise = rep.create({});
- expect(promise).to.be.rejectedWith(
- 'MongoDB unable to generate primary keys of Array. ' +
- 'Do provide your own value for the "id" property ' +
- 'or set the property type to String.',
- );
- });
- it('throws an error when generating a new value for a primary key of a "object" type', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.OBJECT,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const promise = rep.create({});
- expect(promise).to.be.rejectedWith(
- 'MongoDB unable to generate primary keys of Object. ' +
- 'Do provide your own value for the "id" property ' +
- 'or set the property type to String.',
- );
- });
- it('allows to specify an ObjectID instance for a default primary key', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const result = await rep.create({[DEF_PK]: oid});
- expect(result).to.be.eql({[DEF_PK]: String(oid)});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.not.null;
- });
- it('allows to specify an ObjectID string for a default primary key', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const id = String(oid);
- const result = await rep.create({[DEF_PK]: id});
- expect(result).to.be.eql({[DEF_PK]: id});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.not.null;
- });
- it('allows to specify an ObjectID instance for "id" primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.ANY,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const result = await rep.create({id: oid});
- expect(result).to.be.eql({id: String(oid)});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.not.null;
- });
- it('allows to specify an ObjectID string for "id" primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- id: {
- type: DataType.STRING,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const id = String(oid);
- const result = await rep.create({id});
- expect(result).to.be.eql({id});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.not.null;
- });
- it('allows to specify an ObjectID instance for "_id" primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- _id: {
- type: DataType.ANY,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const result = await rep.create({_id: oid});
- expect(result).to.be.eql({_id: String(oid)});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.not.null;
- });
- it('allows to specify an ObjectID string for "_id" primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- _id: {
- type: DataType.STRING,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const id = String(oid);
- const result = await rep.create({_id: id});
- expect(result).to.be.eql({_id: id});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.not.null;
- });
- it('throws an error for a custom primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- myId: {
- type: DataType.ANY,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const promise = rep.create({myId: oid});
- await expect(promise).to.be.rejectedWith(
- 'MongoDB is not supporting custom names of the primary key. ' +
- 'Do use "id" as a primary key instead of "myId".',
- );
- });
- it('throws an error if a given "number" identifier already exists', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({[DEF_PK]: 10});
- const promise = rep.create({[DEF_PK]: 10});
- await expect(promise).to.be.rejectedWith(
- 'E11000 duplicate key error collection: test.model index: ' +
- '_id_ dup key: { _id: 10 }',
- );
- });
- it('throws an error if a given "string" identifier already exists', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({[DEF_PK]: 'str'});
- const promise = rep.create({[DEF_PK]: 'str'});
- await expect(promise).to.be.rejectedWith(
- 'E11000 duplicate key error collection: test.model index: ' +
- '_id_ dup key: { _id: "str" }',
- );
- });
- it('throws an error if a given ObjectId instance identifier already exists', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- await rep.create({[DEF_PK]: oid});
- const promise = rep.create({[DEF_PK]: oid});
- await expect(promise).to.be.rejectedWith(
- format(
- 'E11000 duplicate key error collection: test.model index: ' +
- "_id_ dup key: { _id: ObjectId('%s') }",
- oid,
- ),
- );
- });
- it('throws an error if a given ObjectId string identifier already exists', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const id = String(oid);
- await rep.create({[DEF_PK]: id});
- const promise = rep.create({[DEF_PK]: id});
- await expect(promise).to.be.rejectedWith(
- format(
- 'E11000 duplicate key error collection: test.model index: ' +
- "_id_ dup key: { _id: ObjectId('%s') }",
- id,
- ),
- );
- });
- it('uses a specified column name for a regular property', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'bar',
- },
- },
- });
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: 10});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 10});
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, bar: 10});
- });
- it('uses a specified column name for a regular property with a default value', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'bar',
- default: 10,
- },
- },
- });
- const rep = schema.getRepository('model');
- const result = await rep.create({});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 10});
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, bar: 10});
- });
- it('stores a Date instance as date and returns string type', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const date = new Date();
- const dateString = date.toISOString();
- const result = await rep.create({date});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], date: dateString});
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, date});
- });
- it('stores a Date string as date and returns string type', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const date = new Date();
- const dateString = date.toISOString();
- const result = await rep.create({date: dateString});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], date: dateString});
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, date});
- });
- it('stores a string as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: 'str'});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 'str'});
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 'str'});
- });
- it('stores a number as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: 10});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 10});
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 10});
- });
- it('stores a boolean as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: true, bar: false});
- expect(result).to.be.eql({
- [DEF_PK]: result[DEF_PK],
- foo: true,
- bar: false,
- });
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: true, bar: false});
- });
- it('stores an array as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: ['bar']});
- expect(result).to.be.eql({
- [DEF_PK]: result[DEF_PK],
- foo: ['bar'],
- });
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: ['bar']});
- });
- it('stores an object as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: {bar: 10}});
- expect(result).to.be.eql({
- [DEF_PK]: result[DEF_PK],
- foo: {bar: 10},
- });
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: {bar: 10}});
- });
- it('stores an undefined as null', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: undefined});
- expect(result).to.be.eql({
- [DEF_PK]: result[DEF_PK],
- foo: null,
- });
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: null});
- });
- it('stores an null as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: null});
- expect(result).to.be.eql({
- [DEF_PK]: result[DEF_PK],
- foo: null,
- });
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: null});
- });
- it('uses a short fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create({foo: 10, bar: 20}, {fields: 'foo'});
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 10});
- });
- it('uses a full fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.create(
- {foo: 10, bar: 20, baz: 30},
- {fields: ['foo', 'bar']},
- );
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK], foo: 10, bar: 20});
- const oid = new ObjectId(result[DEF_PK]);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 10, bar: 20, baz: 30});
- });
- it('a fields clause uses property names instead of column names', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'fooCol',
- },
- bar: {
- type: DataType.NUMBER,
- columnName: 'barCol',
- },
- baz: {
- type: DataType.NUMBER,
- columnName: 'bazCol',
- },
- },
- });
- const rep = schema.getRepository('model');
- const result = await rep.create(
- {foo: 10, bar: 20, baz: 30},
- {fields: ['fooCol', 'barCol']},
- );
- expect(result).to.be.eql({[DEF_PK]: result[DEF_PK]});
- });
- });
- describe('replaceById', function () {
- it('removes properties when replacing an item by a given identifier', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {bar: 20});
- expect(replaced).to.be.eql({[DEF_PK]: id, bar: 20});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, bar: 20});
- });
- it('ignores identifier value in a given data in case of a default primary key', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({[DEF_PK]: 'foo', prop: 10});
- const replaced = await rep.replaceById('foo', {
- [DEF_PK]: 'bar',
- prop: 20,
- });
- expect(replaced).to.be.eql({[DEF_PK]: 'foo', prop: 20});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: 'foo'});
- expect(rawData).to.be.eql({_id: 'foo', prop: 20});
- });
- it('ignores identifier value in a given data in case of a custom primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- myId: {
- type: DataType.STRING,
- primaryKey: true,
- columnName: '_id',
- },
- },
- });
- const rep = schema.getRepository('model');
- await rep.create({myId: 'foo', prop: 10});
- const replaced = await rep.replaceById('foo', {myId: 'bar', prop: 20});
- expect(replaced).to.be.eql({myId: 'foo', prop: 20});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: 'foo'});
- expect(rawData).to.be.eql({_id: 'foo', prop: 20});
- });
- it('throws an error if a given identifier does not exist', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const promise = rep.replaceById(oid, {foo: 10});
- await expect(promise).to.be.rejectedWith(
- format('Identifier "%s" is not found.', oid),
- );
- });
- it('throws an error for a custom primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- myId: {
- type: DataType.ANY,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const promise = rep.replaceById('id', {foo: 10});
- await expect(promise).to.be.rejectedWith(
- 'MongoDB is not supporting custom names of the primary key. ' +
- 'Do use "id" as a primary key instead of "myId".',
- );
- });
- it('uses a specified column name for a regular property', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'bar',
- },
- },
- });
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: 20});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: 20});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, bar: 20});
- });
- it('stores a Date instance as date and returns string type', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const date = new Date();
- const dateString = date.toISOString();
- const created = await rep.create({date: null});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {date});
- expect(replaced).to.be.eql({[DEF_PK]: id, date: dateString});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, date});
- });
- it('stores a Date string as date and returns string type', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const date = new Date();
- const dateString = date.toISOString();
- const created = await rep.create({date: null});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {date: dateString});
- expect(replaced).to.be.eql({[DEF_PK]: id, date: dateString});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, date});
- });
- it('stores a string as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: 'str'});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: 'str'});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 'str'});
- });
- it('stores a number as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: 10});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: 10});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 10});
- });
- it('stores a boolean as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null, bar: null});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: true, bar: false});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: true, bar: false});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: true, bar: false});
- });
- it('stores an array as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: ['bar']});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: ['bar']});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: ['bar']});
- });
- it('stores an object as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: {bar: 10}});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: {bar: 10}});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: {bar: 10}});
- });
- it('stores an undefined as null', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: undefined});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: null});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: null});
- });
- it('stores an null as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(id, {foo: null});
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: null});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: null});
- });
- it('uses a short fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10, bar: 20});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(
- id,
- {foo: 15, bar: 25},
- {fields: 'foo'},
- );
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: 15});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 15, bar: 25});
- });
- it('uses a full fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10, bar: 20, baz: 30});
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(
- id,
- {foo: 15, bar: 25, baz: 35},
- {fields: ['foo', 'bar']},
- );
- expect(replaced).to.be.eql({[DEF_PK]: id, foo: 15, bar: 25});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 15, bar: 25, baz: 35});
- });
- it('a fields clause uses property names instead of column names', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'fooCol',
- },
- bar: {
- type: DataType.NUMBER,
- columnName: 'barCol',
- },
- baz: {
- type: DataType.NUMBER,
- columnName: 'bazCol',
- },
- },
- });
- const rep = schema.getRepository('model');
- const created = await rep.create(
- {foo: 10, bar: 20, baz: 30},
- {fields: ['fooCol', 'barCol']},
- );
- const id = created[DEF_PK];
- const replaced = await rep.replaceById(
- id,
- {foo: 15, bar: 25, baz: 35},
- {fields: ['fooCol', 'barCol']},
- );
- expect(replaced).to.be.eql({[DEF_PK]: replaced[DEF_PK]});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, fooCol: 15, barCol: 25, bazCol: 35});
- });
- });
- describe('patchById', function () {
- it('updates only provided properties by a given identifier', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {bar: 20});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: 10, bar: 20});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 10, bar: 20});
- });
- it('does not throw an error if a partial data does not have required property', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- required: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const {insertedId: oid} = await MDB_CLIENT.db()
- .collection('model')
- .insertOne({bar: 10});
- const patched = await rep.patchById(oid, {baz: 20});
- const id = String(oid);
- expect(patched).to.be.eql({[DEF_PK]: id, bar: 10, baz: 20});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, bar: 10, baz: 20});
- });
- it('ignores identifier value in a given data in case of a default primary key', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({[DEF_PK]: 'foo', prop: 10});
- const patched = await rep.patchById('foo', {
- [DEF_PK]: 'bar',
- prop: 20,
- });
- expect(patched).to.be.eql({[DEF_PK]: 'foo', prop: 20});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: 'foo'});
- expect(rawData).to.be.eql({_id: 'foo', prop: 20});
- });
- it('ignores identifier value in a given data in case of a custom primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- myId: {
- type: DataType.STRING,
- primaryKey: true,
- columnName: '_id',
- },
- },
- });
- const rep = schema.getRepository('model');
- await rep.create({myId: 'foo', prop: 10});
- const patched = await rep.patchById('foo', {myId: 'bar', prop: 20});
- expect(patched).to.be.eql({myId: 'foo', prop: 20});
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: 'foo'});
- expect(rawData).to.be.eql({_id: 'foo', prop: 20});
- });
- it('throws an error if a given identifier does not exist', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const promise = rep.patchById(oid, {foo: 10});
- await expect(promise).to.be.rejectedWith(
- format('Identifier "%s" is not found.', oid),
- );
- });
- it('throws an error for a custom primary key', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- myId: {
- type: DataType.ANY,
- primaryKey: true,
- },
- },
- });
- const rep = schema.getRepository('model');
- const promise = rep.patchById('id', {foo: 10});
- await expect(promise).to.be.rejectedWith(
- 'MongoDB is not supporting custom names of the primary key. ' +
- 'Do use "id" as a primary key instead of "myId".',
- );
- });
- it('uses a specified column name for a regular property', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'bar',
- },
- },
- });
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const patched = await rep.replaceById(id, {foo: 20});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: 20});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, bar: 20});
- });
- it('stores a Date instance as date and returns string type', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const date = new Date();
- const dateString = date.toISOString();
- const created = await rep.create({date: null});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {date});
- expect(patched).to.be.eql({[DEF_PK]: id, date: dateString});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, date});
- });
- it('stores a Date string as date and returns string type', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const date = new Date();
- const dateString = date.toISOString();
- const created = await rep.create({date: null});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {date: dateString});
- expect(patched).to.be.eql({[DEF_PK]: id, date: dateString});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, date});
- });
- it('stores a string as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {foo: 'str'});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: 'str'});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 'str'});
- });
- it('stores a number as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {foo: 10});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: 10});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 10});
- });
- it('stores a boolean as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null, bar: null});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {foo: true, bar: false});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: true, bar: false});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: true, bar: false});
- });
- it('stores an array as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {foo: ['bar']});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: ['bar']});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: ['bar']});
- });
- it('stores an object as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: null});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {foo: {bar: 10}});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: {bar: 10}});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: {bar: 10}});
- });
- it('stores an undefined as null', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {foo: undefined});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: null});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: null});
- });
- it('stores an null as is', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10});
- const id = created[DEF_PK];
- const patched = await rep.patchById(id, {foo: null});
- expect(patched).to.be.eql({[DEF_PK]: id, foo: null});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: null});
- });
- it('uses a short fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10, bar: 20});
- const id = created[DEF_PK];
- const patched = await rep.patchById(
- id,
- {foo: 15, bar: 25},
- {fields: 'foo'},
- );
- expect(patched).to.be.eql({[DEF_PK]: id, foo: 15});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 15, bar: 25});
- });
- it('uses a full fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10, bar: 20, baz: 30});
- const id = created[DEF_PK];
- const patched = await rep.patchById(
- id,
- {foo: 15, bar: 25, baz: 35},
- {fields: ['foo', 'bar']},
- );
- expect(patched).to.be.eql({[DEF_PK]: id, foo: 15, bar: 25});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, foo: 15, bar: 25, baz: 35});
- });
- it('a fields clause uses property names instead of column names', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'fooCol',
- },
- bar: {
- type: DataType.NUMBER,
- columnName: 'barCol',
- },
- baz: {
- type: DataType.NUMBER,
- columnName: 'bazCol',
- },
- },
- });
- const rep = schema.getRepository('model');
- const created = await rep.create(
- {foo: 10, bar: 20, baz: 30},
- {fields: ['fooCol', 'barCol']},
- );
- const id = created[DEF_PK];
- const patched = await rep.patchById(
- id,
- {foo: 15, bar: 25, baz: 35},
- {fields: ['fooCol', 'barCol']},
- );
- expect(patched).to.be.eql({[DEF_PK]: patched[DEF_PK]});
- const oid = new ObjectId(id);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .findOne({_id: oid});
- expect(rawData).to.be.eql({_id: oid, fooCol: 15, barCol: 25, bazCol: 35});
- });
- });
- describe('find', function () {
- it('returns an empty array', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.find();
- expect(result).to.be.empty;
- expect(result).to.be.instanceOf(Array);
- });
- it('returns all items', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const doc1 = await rep.create({foo: 1});
- const doc2 = await rep.create({bar: 2});
- const doc3 = await rep.create({baz: 3});
- const result = await rep.find();
- expect(result).to.be.eql([doc1, doc2, doc3]);
- });
- it('uses a short fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 10, bar: 20});
- const created2 = await rep.create({foo: 20, bar: 30});
- const id1 = created1[DEF_PK];
- const id2 = created2[DEF_PK];
- const result = await rep.find({fields: 'foo'});
- expect(result).to.be.eql([
- {[DEF_PK]: id1, foo: 10},
- {[DEF_PK]: id2, foo: 20},
- ]);
- });
- it('uses a full fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 10, bar: 20, baz: 30});
- const created2 = await rep.create({foo: 20, bar: 30, baz: 40});
- const id1 = created1[DEF_PK];
- const id2 = created2[DEF_PK];
- const result = await rep.find({fields: ['foo', 'bar']});
- expect(result).to.be.eql([
- {[DEF_PK]: id1, foo: 10, bar: 20},
- {[DEF_PK]: id2, foo: 20, bar: 30},
- ]);
- });
- it('a fields clause uses property names instead of column names', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'fooCol',
- },
- bar: {
- type: DataType.NUMBER,
- columnName: 'barCol',
- },
- baz: {
- type: DataType.NUMBER,
- columnName: 'bazCol',
- },
- },
- });
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 10, bar: 20, baz: 30});
- const created2 = await rep.create({foo: 20, bar: 30, baz: 40});
- const id1 = created1[DEF_PK];
- const id2 = created2[DEF_PK];
- const result = await rep.find({fields: ['fooCol', 'barCol']});
- expect(result).to.be.eql([{[DEF_PK]: id1}, {[DEF_PK]: id2}]);
- });
- it('uses a short order clause to sort results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 20});
- const created2 = await rep.create({foo: 5});
- const created3 = await rep.create({foo: 10});
- const result1 = await rep.find({order: 'foo'});
- const result2 = await rep.find({order: 'foo ASC'});
- const result3 = await rep.find({order: 'foo DESC'});
- expect(result1).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 5},
- {[DEF_PK]: created3[DEF_PK], foo: 10},
- {[DEF_PK]: created1[DEF_PK], foo: 20},
- ]);
- expect(result2).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 5},
- {[DEF_PK]: created3[DEF_PK], foo: 10},
- {[DEF_PK]: created1[DEF_PK], foo: 20},
- ]);
- expect(result3).to.be.eql([
- {[DEF_PK]: created1[DEF_PK], foo: 20},
- {[DEF_PK]: created3[DEF_PK], foo: 10},
- {[DEF_PK]: created2[DEF_PK], foo: 5},
- ]);
- });
- it('uses a full order clause to sort results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 20, bar: 'b'});
- const created2 = await rep.create({foo: 5, bar: 'b'});
- const created3 = await rep.create({foo: 10, bar: 'a'});
- const result1 = await rep.find({order: ['bar DESC', 'foo']});
- const result2 = await rep.find({order: ['bar', 'foo ASC']});
- expect(result1).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 5, bar: 'b'},
- {[DEF_PK]: created1[DEF_PK], foo: 20, bar: 'b'},
- {[DEF_PK]: created3[DEF_PK], foo: 10, bar: 'a'},
- ]);
- expect(result2).to.be.eql([
- {[DEF_PK]: created3[DEF_PK], foo: 10, bar: 'a'},
- {[DEF_PK]: created2[DEF_PK], foo: 5, bar: 'b'},
- {[DEF_PK]: created1[DEF_PK], foo: 20, bar: 'b'},
- ]);
- });
- it('an order clause uses property names instead of column names', async function () {
- const schema = createSchema();
- schema.defineModel({
- name: 'model',
- datasource: 'mongodb',
- properties: {
- foo: {
- type: DataType.NUMBER,
- columnName: 'fooCol',
- },
- bar: {
- type: DataType.STRING,
- columnName: 'barCol',
- },
- },
- });
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 20, bar: 'b'});
- const created2 = await rep.create({foo: 5, bar: 'b'});
- const created3 = await rep.create({foo: 10, bar: 'a'});
- const result1 = await rep.find({order: ['bar DESC', 'foo']});
- const result2 = await rep.find({order: ['bar', 'foo ASC']});
- expect(result1).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 5, bar: 'b'},
- {[DEF_PK]: created1[DEF_PK], foo: 20, bar: 'b'},
- {[DEF_PK]: created3[DEF_PK], foo: 10, bar: 'a'},
- ]);
- expect(result2).to.be.eql([
- {[DEF_PK]: created3[DEF_PK], foo: 10, bar: 'a'},
- {[DEF_PK]: created2[DEF_PK], foo: 5, bar: 'b'},
- {[DEF_PK]: created1[DEF_PK], foo: 20, bar: 'b'},
- ]);
- });
- it('uses a limit clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 10});
- const created2 = await rep.create({foo: 20});
- await rep.create({foo: 30});
- const result = await rep.find({limit: 2});
- expect(result).to.be.eql([created1, created2]);
- });
- it('uses a skip clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 10});
- const created2 = await rep.create({foo: 20});
- const created3 = await rep.create({foo: 30});
- const result = await rep.find({skip: 1});
- expect(result).to.be.eql([created2, created3]);
- });
- describe('uses a where clause to filter results', function () {
- it('matches by a document subset', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5, bar: 'b'});
- const created2 = await rep.create({foo: 10, bar: 'a'});
- const result1 = await rep.find({where: {foo: 10}});
- const result2 = await rep.find({where: {foo: 5, bar: 'b'}});
- expect(result1).to.be.eql([
- {
- [DEF_PK]: created2[DEF_PK],
- foo: 10,
- bar: 'a',
- },
- ]);
- expect(result2).to.be.eql([
- {
- [DEF_PK]: created1[DEF_PK],
- foo: 5,
- bar: 'b',
- },
- ]);
- });
- it('matches by the "eq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- const created3 = await rep.create({foo: 10});
- const result = await rep.find({where: {foo: {eq: 10}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 10},
- {[DEF_PK]: created3[DEF_PK], foo: 10},
- ]);
- });
- it('matches by the "neq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 10});
- const result = await rep.find({where: {foo: {neq: 10}}});
- expect(result).to.be.eql([{[DEF_PK]: created1[DEF_PK], foo: 5}]);
- });
- it('matches by the "gt" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- const created3 = await rep.create({foo: 15});
- const result = await rep.find({where: {foo: {gt: 10}}});
- expect(result).to.be.eql([{[DEF_PK]: created3[DEF_PK], foo: 15}]);
- });
- it('matches by the "lt" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.find({where: {foo: {lt: 10}}});
- expect(result).to.be.eql([{[DEF_PK]: created1[DEF_PK], foo: 5}]);
- });
- it('matches by the "gte" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- const created3 = await rep.create({foo: 15});
- const result = await rep.find({where: {foo: {gte: 10}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 10},
- {[DEF_PK]: created3[DEF_PK], foo: 15},
- ]);
- });
- it('matches by the "lte" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.find({where: {foo: {lte: 10}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created1[DEF_PK], foo: 5},
- {[DEF_PK]: created2[DEF_PK], foo: 10},
- ]);
- });
- it('matches by the "inq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.find({where: {foo: {inq: [5, 10]}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created1[DEF_PK], foo: 5},
- {[DEF_PK]: created2[DEF_PK], foo: 10},
- ]);
- });
- it('matches by the "nin" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- const created3 = await rep.create({foo: 15});
- const result = await rep.find({where: {foo: {nin: [5, 10]}}});
- expect(result).to.be.eql([{[DEF_PK]: created3[DEF_PK], foo: 15}]);
- });
- it('matches by the "between" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- const created3 = await rep.create({foo: 15});
- await rep.create({foo: 20});
- const result = await rep.find({where: {foo: {between: [9, 16]}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 10},
- {[DEF_PK]: created3[DEF_PK], foo: 15},
- ]);
- });
- it('matches by the "exists" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({});
- const created2 = await rep.create({foo: undefined});
- const created3 = await rep.create({foo: null});
- const created4 = await rep.create({foo: 10});
- const result1 = await rep.find({where: {foo: {exists: true}}});
- const result2 = await rep.find({where: {foo: {exists: false}}});
- expect(result1).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: null},
- {[DEF_PK]: created3[DEF_PK], foo: null},
- {[DEF_PK]: created4[DEF_PK], foo: 10},
- ]);
- expect(result2).to.be.eql([{[DEF_PK]: created1[DEF_PK]}]);
- });
- it('matches by the "like" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- const created2 = await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- const created4 = await rep.create({foo: 'sit amet'});
- const result = await rep.find({where: {foo: {like: 'sit amet'}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 'dolor sit amet'},
- {[DEF_PK]: created4[DEF_PK], foo: 'sit amet'},
- ]);
- });
- it('matches by the "ilike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- const created2 = await rep.create({foo: 'dolor sit amet'});
- const created3 = await rep.create({foo: 'DOLOR SIT AMET'});
- const created4 = await rep.create({foo: 'sit amet'});
- const result = await rep.find({where: {foo: {ilike: 'sit amet'}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 'dolor sit amet'},
- {[DEF_PK]: created3[DEF_PK], foo: 'DOLOR SIT AMET'},
- {[DEF_PK]: created4[DEF_PK], foo: 'sit amet'},
- ]);
- });
- it('matches by the "nlike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- const created3 = await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.find({where: {foo: {nlike: 'sit amet'}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created1[DEF_PK], foo: 'lorem ipsum'},
- {[DEF_PK]: created3[DEF_PK], foo: 'DOLOR SIT AMET'},
- ]);
- });
- it('matches by the "nilike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.find({where: {foo: {nilike: 'sit amet'}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created1[DEF_PK], foo: 'lorem ipsum'},
- ]);
- });
- it('matches by the "regexp" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- const created2 = await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- const created4 = await rep.create({foo: 'sit amet'});
- const result = await rep.find({where: {foo: {regexp: 'sit am+'}}});
- expect(result).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 'dolor sit amet'},
- {[DEF_PK]: created4[DEF_PK], foo: 'sit amet'},
- ]);
- });
- it('matches by the "regexp" operator with flags', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- const created2 = await rep.create({foo: 'dolor sit amet'});
- const created3 = await rep.create({foo: 'DOLOR SIT AMET'});
- const created4 = await rep.create({foo: 'sit amet'});
- const result = await rep.find({
- where: {
- foo: {regexp: 'sit am+', flags: 'i'},
- },
- });
- expect(result).to.be.eql([
- {[DEF_PK]: created2[DEF_PK], foo: 'dolor sit amet'},
- {[DEF_PK]: created3[DEF_PK], foo: 'DOLOR SIT AMET'},
- {[DEF_PK]: created4[DEF_PK], foo: 'sit amet'},
- ]);
- });
- });
- });
- describe('findById', function () {
- it('throws an error if a given identifier does not exist', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const promise = rep.findById(oid);
- await expect(promise).to.be.rejectedWith(
- format('Identifier "%s" is not found.', oid),
- );
- });
- it('uses a short fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10, bar: 20});
- const id = created[DEF_PK];
- const result = await rep.findById(id, {fields: 'foo'});
- expect(result).to.be.eql({[DEF_PK]: id, foo: 10});
- });
- it('uses a full fields clause to filter results', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created = await rep.create({foo: 10, bar: 20, baz: 30});
- const id = created[DEF_PK];
- const result = await rep.findById(id, {fields: ['foo', 'bar']});
- expect(result).to.be.eql({[DEF_PK]: id, foo: 10, bar: 20});
- });
- });
- describe('delete', function () {
- it('removes all table items and returns their number', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 1});
- await rep.create({foo: 2});
- await rep.create({foo: 3});
- const result = await rep.delete();
- expect(result).to.be.eql(3);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.empty;
- });
- describe('removes by a where clause', function () {
- it('removes by a document subset', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- await rep.create({foo: 10});
- const result = await rep.delete({foo: 10});
- expect(result).to.be.eq(1);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 5},
- ]);
- });
- it('matches by the "eq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 10});
- const result = await rep.delete({foo: {eq: 10}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 5},
- ]);
- });
- it('matches by the "neq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 5});
- const created3 = await rep.create({foo: 10});
- const result = await rep.delete({foo: {neq: 10}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created3[DEF_PK]), foo: 10},
- ]);
- });
- it('matches by the "gt" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.delete({foo: {gt: 10}});
- expect(result).to.be.eq(1);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 5},
- {_id: new ObjectId(created2[DEF_PK]), foo: 10},
- ]);
- });
- it('matches by the "lt" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- const created3 = await rep.create({foo: 15});
- const result = await rep.delete({foo: {lt: 10}});
- expect(result).to.be.eq(1);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created2[DEF_PK]), foo: 10},
- {_id: new ObjectId(created3[DEF_PK]), foo: 15},
- ]);
- });
- it('matches by the "gte" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.delete({foo: {gte: 10}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 5},
- ]);
- });
- it('matches by the "lte" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- const created3 = await rep.create({foo: 15});
- const result = await rep.delete({foo: {lte: 10}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created3[DEF_PK]), foo: 15},
- ]);
- });
- it('matches by the "inq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- const created3 = await rep.create({foo: 15});
- const result = await rep.delete({foo: {inq: [5, 10]}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created3[DEF_PK]), foo: 15},
- ]);
- });
- it('matches by the "nin" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- const created2 = await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.delete({foo: {nin: [5, 10]}});
- expect(result).to.be.eq(1);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 5},
- {_id: new ObjectId(created2[DEF_PK]), foo: 10},
- ]);
- });
- it('matches by the "between" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const created4 = await rep.create({foo: 20});
- const result = await rep.delete({foo: {between: [9, 16]}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 5},
- {_id: new ObjectId(created4[DEF_PK]), foo: 20},
- ]);
- });
- it('matches by the "exists" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({});
- await rep.create({foo: undefined});
- await rep.create({foo: null});
- await rep.create({foo: 10});
- const result = await rep.delete({foo: {exists: true}});
- expect(result).to.be.eq(3);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([{_id: new ObjectId(created1[DEF_PK])}]);
- });
- it('matches by the "like" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- const created3 = await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.delete({foo: {like: 'sit amet'}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 'lorem ipsum'},
- {_id: new ObjectId(created3[DEF_PK]), foo: 'DOLOR SIT AMET'},
- ]);
- });
- it('matches by the "nlike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- const created2 = await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- const created4 = await rep.create({foo: 'sit amet'});
- const result = await rep.delete({foo: {nlike: 'sit amet'}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created2[DEF_PK]), foo: 'dolor sit amet'},
- {_id: new ObjectId(created4[DEF_PK]), foo: 'sit amet'},
- ]);
- });
- it('matches by the "ilike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.delete({foo: {ilike: 'sit amet'}});
- expect(result).to.be.eq(3);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 'lorem ipsum'},
- ]);
- });
- it('matches by the "nilike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- const created2 = await rep.create({foo: 'dolor sit amet'});
- const created3 = await rep.create({foo: 'DOLOR SIT AMET'});
- const created4 = await rep.create({foo: 'sit amet'});
- const result = await rep.delete({foo: {nilike: 'sit amet'}});
- expect(result).to.be.eq(1);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created2[DEF_PK]), foo: 'dolor sit amet'},
- {_id: new ObjectId(created3[DEF_PK]), foo: 'DOLOR SIT AMET'},
- {_id: new ObjectId(created4[DEF_PK]), foo: 'sit amet'},
- ]);
- });
- it('matches by the "regexp" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- const created3 = await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.delete({foo: {regexp: 'sit am+'}});
- expect(result).to.be.eq(2);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 'lorem ipsum'},
- {_id: new ObjectId(created3[DEF_PK]), foo: 'DOLOR SIT AMET'},
- ]);
- });
- it('matches by the "regexp" operator with flags', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const created1 = await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.delete({foo: {regexp: 'sit am+', flags: 'i'}});
- expect(result).to.be.eq(3);
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.eql([
- {_id: new ObjectId(created1[DEF_PK]), foo: 'lorem ipsum'},
- ]);
- });
- });
- });
- describe('deleteById', function () {
- it('returns false if a given identifier is not exist', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const result = await rep.deleteById(oid);
- expect(result).to.be.false;
- });
- it('returns true if an item has removed by a given identifier', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- await rep.create({[DEF_PK]: oid});
- const result = await rep.deleteById(oid);
- expect(result).to.be.true;
- const rawData = await MDB_CLIENT.db()
- .collection('model')
- .find()
- .toArray();
- expect(rawData).to.be.empty;
- });
- });
- describe('exists', function () {
- it('returns false if a given identifier is not exist', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- const result = await rep.exists(oid);
- expect(result).to.be.false;
- });
- it('returns true if a given identifier is exist', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const oid = new ObjectId();
- await rep.create({[DEF_PK]: oid});
- const result = await rep.exists(oid);
- expect(result).to.be.true;
- });
- });
- describe('count', function () {
- it('returns zero if nothing to count', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- const result = await rep.count();
- expect(result).to.be.eq(0);
- });
- it('returns a number of table items', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({});
- await rep.create({});
- await rep.create({});
- const result = await rep.count();
- expect(result).to.be.eq(3);
- });
- describe('uses a where clause to count items', function () {
- it('matches by a document subset', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'a'});
- await rep.create({foo: 'b'});
- await rep.create({foo: 'b'});
- const result = await rep.count({foo: 'b'});
- expect(result).to.be.eql(2);
- });
- it('matches by the "eq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 10});
- const result = await rep.count({foo: {eq: 10}});
- expect(result).to.be.eql(2);
- });
- it('matches by the "neq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 10});
- const result = await rep.count({foo: {neq: 10}});
- expect(result).to.be.eq(1);
- });
- it('matches by the "gt" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.count({foo: {gt: 10}});
- expect(result).to.be.eq(1);
- });
- it('matches by the "lt" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.count({foo: {lt: 10}});
- expect(result).to.be.eq(1);
- });
- it('matches by the "gte" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.count({foo: {gte: 10}});
- expect(result).to.be.eq(2);
- });
- it('matches by the "lte" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.count({foo: {lte: 10}});
- expect(result).to.be.eq(2);
- });
- it('matches by the "inq" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.count({foo: {inq: [5, 10]}});
- expect(result).to.be.eq(2);
- });
- it('matches by the "nin" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- const result = await rep.count({foo: {nin: [5, 10]}});
- expect(result).to.be.eq(1);
- });
- it('matches by the "between" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 5});
- await rep.create({foo: 10});
- await rep.create({foo: 15});
- await rep.create({foo: 20});
- const result = await rep.count({foo: {between: [9, 16]}});
- expect(result).to.be.eq(2);
- });
- it('matches by the "exists" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({});
- await rep.create({foo: undefined});
- await rep.create({foo: null});
- await rep.create({foo: 10});
- const result1 = await rep.count({foo: {exists: true}});
- expect(result1).to.be.eq(3);
- });
- it('matches by the "like" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.count({foo: {like: 'sit amet'}});
- expect(result).to.be.eql(2);
- });
- it('matches by the "nlike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.count({foo: {nlike: 'sit amet'}});
- expect(result).to.be.eql(2);
- });
- it('matches by the "ilike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.count({foo: {ilike: 'sit amet'}});
- expect(result).to.be.eql(3);
- });
- it('matches by the "nilike" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.count({foo: {nilike: 'sit amet'}});
- expect(result).to.be.eql(1);
- });
- it('matches by the "regexp" operator', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.count({foo: {regexp: 'sit am+'}});
- expect(result).to.be.eql(2);
- });
- it('matches by the "regexp" operator with flags', async function () {
- const schema = createSchema();
- schema.defineModel({name: 'model', datasource: 'mongodb'});
- const rep = schema.getRepository('model');
- await rep.create({foo: 'lorem ipsum'});
- await rep.create({foo: 'dolor sit amet'});
- await rep.create({foo: 'DOLOR SIT AMET'});
- await rep.create({foo: 'sit amet'});
- const result = await rep.count({foo: {regexp: 'sit am+', flags: 'i'}});
- expect(result).to.be.eql(3);
- });
- });
- });
- });
|