71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const Datastore = require('../src/Datastore');
 | |
| 
 | |
| describe('testing document update', () => {
 | |
|     const docs = [
 | |
|         { name: '1st document' },
 | |
|         { name: '2nd document' },
 | |
|         { name: '3rd document' },
 | |
|     ];
 | |
| 
 | |
|     const datastore = Datastore.create();
 | |
|     beforeEach(() => datastore.insert(docs));
 | |
|     afterEach(() => datastore.remove({}, { multi: true }));
 | |
| 
 | |
|     describe('single', () => {
 | |
|         it('should update single document', async () => {
 | |
|             const { _id } = await datastore.findOne({ name: /^1st/ });
 | |
|             const numAffected = await datastore.update({ name: /^1st/ }, { test: true }, { multi: false });
 | |
|             expect(numAffected).toBe(1);
 | |
|             const affectedDoc = await datastore.findOne({ test: true });
 | |
|             expect(affectedDoc).toMatchObject({ _id, test: true });
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     describe('single with returnUpdatedDocs', () => {
 | |
|         it('should update and return single document', async () => {
 | |
|             const { _id } = await datastore.findOne({ name: /^1st/ });
 | |
|             const affectedDoc = await datastore.update(
 | |
|                 { name: '1st document' },
 | |
|                 { test: true },
 | |
|                 { multi: false, returnUpdatedDocs: true },
 | |
|             );
 | |
| 
 | |
|             expect(affectedDoc).toMatchObject({ _id, test: true });
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     describe('bulk', () => {
 | |
|         it('should update multiple documents', async () => {
 | |
|             const numAffected = await datastore.update(
 | |
|                 { name: { $regex: /^1st|2nd/ } },
 | |
|                 { $set: { test: true } },
 | |
|                 { multi: true },
 | |
|             );
 | |
| 
 | |
|             expect(numAffected).toBe(2);
 | |
|             const affectedDocs = await datastore.find({ test: true });
 | |
|             expect(affectedDocs.length).toBe(2);
 | |
|             affectedDocs.forEach((affectedDoc) => {
 | |
|                 expect(affectedDoc.name.match(/^1st|2nd/)).toBeTruthy();
 | |
|                 expect(affectedDoc.test).toBe(true);
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     describe('bulk with returnUpdatedDocs', () => {
 | |
|         it('should update and return multiple documents', async () => {
 | |
|             const affectedDocs = await datastore.update(
 | |
|                 { name: { $regex: /^2nd|3rd/ } },
 | |
|                 { $set: { test: true } },
 | |
|                 { multi: true, returnUpdatedDocs: true },
 | |
|             );
 | |
| 
 | |
|             expect(affectedDocs.length).toBe(2);
 | |
|             affectedDocs.forEach((affectedDoc) => {
 | |
|                 expect(affectedDoc.name.match(/^2nd|3rd/)).toBeTruthy();
 | |
|                 expect(affectedDoc.test).toBe(true);
 | |
|             });
 | |
|         });
 | |
|     });
 | |
| });
 |