Skip to content

Commit 3219f21

Browse files
committed
fix(conflict-resolution): ensure conflict resolution is done on raw docs rather than entity instance
1 parent 298e27a commit 3219f21

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/app/child-dev-project/attendance/attendance-month-conflict-resolution-strategy.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ import { ConflictResolutionStrategy } from "../../conflict-resolution/auto-resol
33
import { AttendanceMonth } from "./model/attendance-month";
44
import _ from "lodash";
55
import { diff } from "deep-object-diff";
6+
import { EntitySchemaService } from "../../core/entity/schema/entity-schema.service";
67

78
/**
89
* Auto resolve simple database document conflicts concerning {@link AttendanceMonth} entities.
910
*/
1011
@Injectable()
1112
export class AttendanceMonthConflictResolutionStrategy
1213
implements ConflictResolutionStrategy {
14+
constructor(private entitySchemaService: EntitySchemaService) {}
15+
1316
/**
1417
* Checks if the given conflict is about AttendanceMonth entities (otherwise this strategy doesn't apply)
1518
* and suggests whether the conflict is trivial and can be automatically deleted.
@@ -24,6 +27,17 @@ export class AttendanceMonthConflictResolutionStrategy
2427
return false;
2528
}
2629

30+
if (typeof currentDoc.getId === "function") {
31+
currentDoc = this.entitySchemaService.transformEntityToDatabaseFormat(
32+
currentDoc
33+
);
34+
}
35+
if (typeof conflictingDoc.getId === "function") {
36+
conflictingDoc = this.entitySchemaService.transformEntityToDatabaseFormat(
37+
conflictingDoc
38+
);
39+
}
40+
2741
const currentDocC = _.merge({}, currentDoc);
2842
delete currentDocC._rev;
2943
const conflictingDocC = _.merge({}, conflictingDoc);
@@ -53,6 +67,10 @@ export class AttendanceMonthConflictResolutionStrategy
5367
null,
5468
]);
5569

70+
console.log(currentDoc);
71+
console.log(conflictingDoc);
72+
console.log("isIrrelevantAttendanceMonthConflict", simplifiedDiff);
73+
5674
return _.isObjectLike(simplifiedDiff) && _.isEmpty(simplifiedDiff);
5775
}
5876

src/app/child-dev-project/attendance/attendance-month-conflict-resolution.spec.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ import { TestBed } from "@angular/core/testing";
22
import { AttendanceMonthConflictResolutionStrategy } from "./attendance-month-conflict-resolution-strategy";
33
import { AttendanceMonth } from "./model/attendance-month";
44
import { AttendanceDay, AttendanceStatus } from "./model/attendance-day";
5+
import { EntitySchemaService } from "../../core/entity/schema/entity-schema.service";
56

6-
describe("AutoResolutionService", () => {
7+
describe("AttendanceMonthConflictResolutionStrategy", () => {
78
let service: AttendanceMonthConflictResolutionStrategy;
89

910
beforeEach(() => {
1011
TestBed.configureTestingModule({
11-
providers: [AttendanceMonthConflictResolutionStrategy],
12+
providers: [
13+
AttendanceMonthConflictResolutionStrategy,
14+
EntitySchemaService,
15+
],
1216
});
1317
service = TestBed.inject<AttendanceMonthConflictResolutionStrategy>(
1418
AttendanceMonthConflictResolutionStrategy
@@ -35,6 +39,7 @@ describe("AutoResolutionService", () => {
3539
currentDoc,
3640
conflictingDoc
3741
);
42+
3843
expect(result).toBe(true);
3944
});
4045

0 commit comments

Comments
 (0)