Skip to content

Commit

Permalink
update upload-manager test
Browse files Browse the repository at this point in the history
  • Loading branch information
freddieptf committed Feb 19, 2025
1 parent 3246ef7 commit a94cadc
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 16 deletions.
7 changes: 4 additions & 3 deletions src/services/upload-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,16 @@ export class UploadManager extends EventEmitter {

uploadGrouped = async (places: Place[], api: ChtApi) => {
const grouped = _.groupBy(places, place => place.contact.id);
Object.keys(grouped).forEach(async k => {
const places = grouped[k];
const keys = Object.keys(grouped);
for (let i = 0; i < keys.length; i++) {
const places = grouped[keys[i]];
let creationDetails = places.find(p => !!p.creationDetails.username)?.creationDetails;
if (!creationDetails) {
await this.uploadSinglePlace(places[0], api);
creationDetails = places[0].creationDetails;
}
await this.uploadGroup(creationDetails, places, api);
});
}
};

private async uploadPlacesInBatches(places: Place[], chtApi: ChtApi) {
Expand Down
29 changes: 16 additions & 13 deletions test/services/place-factory.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import fs from 'fs';
import sinon from 'sinon';

import { ChtDoc, expectInvalidProperties, mockChtSession, mockParentPlace, mockProperty, mockValidContactType } from '../mocks';
import { Config } from '../../src/config';
import { Config, ContactType } from '../../src/config';
import Place from '../../src/services/place';
import PlaceFactory from '../../src/services/place-factory';
import RemotePlaceCache from '../../src/lib/remote-place-cache';
Expand Down Expand Up @@ -515,20 +515,10 @@ it('#165 - create a place when generated property is required', async () => {
});

it('create multiple places with single contact', async () => {
const genPlaceFormData = (contactType, uniqfix) => {
const data = {};
contactType.place_properties.forEach(p => data[`place_${p.property_name}`] = p.property_name + uniqfix);
return data;
};

const { sessionCache, contactType, fakeFormData, chtApi } = mockScenario();
console.log(contactType.place_properties.map(p => p.property_name));

const placeCount = 3;
for (let i = 0; i < placeCount; i++) {
fakeFormData[`list_${i}`] = Buffer.from(JSON.stringify(genPlaceFormData(contactType, `${i}`))).toString('base64');
}
const places = await PlaceFactory.createManyWithSingleUser(fakeFormData, contactType, sessionCache, chtApi);
const formData = {...fakeFormData, ...mockGroupedFormData(contactType, placeCount)};
const places = await PlaceFactory.createManyWithSingleUser(formData, contactType, sessionCache, chtApi);
expect(places).lengthOf(placeCount);
const contact = places[0].contact.id;
for (let i = 0; i < placeCount; i++) {
Expand All @@ -540,6 +530,19 @@ it('create multiple places with single contact', async () => {
}
});

export function mockGroupedFormData(contactType: ContactType, placeCount: number) {
const genPlaceFormData = (contactType, uniqfix) => {
const data = {};
contactType.place_properties.forEach(p => data[`place_${p.property_name}`] = p.property_name + uniqfix);
return data;
};
const formData = {};
for (let i = 0; i < placeCount; i++) {
formData[`list_${i}`] = Buffer.from(JSON.stringify(genPlaceFormData(contactType, `${i}`))).toString('base64');
}
return formData;
}

function mockScenario() {
const contactType = mockValidContactType('string', undefined);
const parentDoc: ChtDoc = {
Expand Down
17 changes: 17 additions & 0 deletions test/services/upload-manager.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import RemotePlaceCache from '../../src/lib/remote-place-cache';
import { Config } from '../../src/config';
import RemotePlaceResolver from '../../src/lib/remote-place-resolver';
import { UploadManagerRetryScenario } from '../lib/retry-logic.spec';
import { mockGroupedFormData } from './place-factory.spec';

describe('services/upload-manager.ts', () => {
beforeEach(() => {
Expand Down Expand Up @@ -359,6 +360,22 @@ describe('services/upload-manager.ts', () => {
});
});

it('mock group data is properly sent to chtApi - standard', async () => {
const { fakeFormData, contactType, chtApi, sessionCache } = await createMocks();
const placeCount = 2;
const formData = {...fakeFormData, ...mockGroupedFormData(contactType, placeCount)};
const places = await PlaceFactory.createManyWithSingleUser(formData, contactType, sessionCache, chtApi);

const uploadManager = new UploadManager();
await uploadManager.doUpload(places, chtApi);

expect(chtApi.createPlace.callCount).equals(placeCount);
expect(chtApi.createUser.calledOnce).to.be.true;
expect(chtApi.updateUser.calledOnce).to.be.true;
const creationDetails = places[0].creationDetails;
places.forEach(p => expect(creationDetails.username).equals(p.creationDetails.username));
});

async function createMocks() {
const contactType = mockValidContactType('string', undefined);
const subcounty: ChtDoc = {
Expand Down

0 comments on commit a94cadc

Please sign in to comment.