Skip to content
This repository has been archived by the owner on May 5, 2023. It is now read-only.

Commit

Permalink
fix(mergePersona): Do not error if the merge from does not exist (#117)
Browse files Browse the repository at this point in the history
* fix(mergePersona): Do not error if the merge from does not exist

* fix(mergePersona): Ensure we catch NoModel on delete
  • Loading branch information
ht2 authored Nov 12, 2018
1 parent 069ece0 commit 0143fe1
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 18 deletions.
29 changes: 15 additions & 14 deletions src/service/mergePersona.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import NoModel from 'jscommons/dist/errors/NoModel';
import DuplicateMergeId from '../errors/DuplicateMergeId';
import MissingMergeFromPersona from '../errors/MissingMergeFromPersona';
import MissingMergeToPersona from '../errors/MissingMergeToPersona';
import NoModelWithId from '../errors/NoModelWithId';
import MergePersonaOptions from '../serviceFactory/options/MergePersonaOptions';
Expand All @@ -15,17 +15,9 @@ export default (config: Config) => async ({
throw new DuplicateMergeId(fromPersonaId);
}
try {
await Promise.all([
config.repo.getPersona({ personaId: fromPersonaId, organisation }),
config.repo.getPersona({ personaId: toPersonaId, organisation }),
]);
await config.repo.getPersona({ personaId: toPersonaId, organisation });
} catch (err) {
/* istanbul ignore else */
if (err instanceof NoModelWithId) {
if (err.id === fromPersonaId) {
throw new MissingMergeFromPersona(err.modelName, err.id);
}
/* istanbul ignore else */
if (err.id === toPersonaId) {
throw new MissingMergeToPersona(err.modelName, err.id);
}
Expand All @@ -41,10 +33,19 @@ export default (config: Config) => async ({
toPersonaId,
});

await config.repo.deletePersona({
organisation,
personaId: fromPersonaId,
});
try {
await config.repo.deletePersona({
organisation,
personaId: fromPersonaId,
});
} catch (err) {
if (err instanceof NoModel) {
// potentially expected, if persona was removed by another process during this exchange
return { identifierIds };
}
/* istanbul ignore next */
throw err;
}

return { identifierIds };
};
6 changes: 2 additions & 4 deletions src/tests/mergePersona/mergeNonExistingPersona.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import assertError from 'jscommons/dist/tests/utils/assertError';
import MissingMergeFromPersona from '../../errors/MissingMergeFromPersona';
import MissingMergeToPersona from '../../errors/MissingMergeToPersona';
import createTestPersona from '../utils/createTestPersona';
import setup from '../utils/setup';
Expand All @@ -20,13 +19,12 @@ describe('mergePersona with non-existing personas', () => {
await assertError(MissingMergeToPersona, promise);
});

it('Should throw error if fromModel does not exist', async () => {
it('Should not throw error if fromModel does not exist', async () => {
const persona = await createTestPersona();
const promise = service.mergePersona({
await service.mergePersona({
fromPersonaId: MISSING_ID,
organisation: TEST_ORGANISATION,
toPersonaId: persona.id,
});
await assertError(MissingMergeFromPersona, promise);
});
});

0 comments on commit 0143fe1

Please sign in to comment.