joist-test-utils 1.0.727 → 1.0.730

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,12 +6,13 @@ async function toMatchEntity(actual, expected) {
6
6
  // Because the `actual` entity has lots of __orm, Reference, Collection, etc cruft in it,
7
7
  // we make a simplified copy of it, where we use the keys in `expected` to pull out/eval a
8
8
  // subset of the complex keys in an entity to be "dumb data" versions of themselves.
9
- const copy = {};
9
+ const clean = {};
10
+ const { em } = actual;
10
11
  // Because we might assert again `expect(entity).toMatchEntity({ children: [{ name: "p1" }])`, we keep
11
12
  // a queue of entities/copies to make, and work through it as we recurse through the expected/actual pair.
12
- const queue = [[actual, expected, copy]];
13
+ const queue = [[actual, expected, clean]];
13
14
  while (queue.length > 0) {
14
- const [actual, expected, copy] = queue.pop();
15
+ const [actual, expected, clean] = queue.pop();
15
16
  const keys = Object.keys(expected);
16
17
  for (const key of keys) {
17
18
  const value = actual[key];
@@ -21,45 +22,65 @@ async function toMatchEntity(actual, expected) {
21
22
  if (loaded instanceof Array) {
22
23
  const actualList = loaded;
23
24
  const expectedList = expected[key];
24
- const copyList = [];
25
+ const cleanList = [];
25
26
  // Do a hacky zip of each actual/expected pair
26
27
  for (let i = 0; i < Math.max(actualList.length, expectedList.length); i++) {
27
28
  const actualI = actualList[i];
28
29
  const expectedI = expectedList[i];
29
30
  // If actual is a list of entities (and expected is not), make a copy of each
30
- if ((0, joist_orm_1.isEntity)(actualI) && !(0, joist_orm_1.isEntity)(expectedI)) {
31
- const child = {};
32
- queue.push([actualI, expectedI, child]);
33
- copyList.push(child);
31
+ // so that we can recurse into their `{ title: ... }` properties.
32
+ if ((0, joist_orm_1.isEntity)(actualI) && !(0, joist_orm_1.isEntity)(expectedI) && expectedI) {
33
+ const cleanI = {};
34
+ queue.push([actualI, expectedI, cleanI]);
35
+ cleanList.push(cleanI);
34
36
  }
35
37
  else {
36
- copyList.push(actualI);
38
+ // Given we're stopping here, make sure neither side is an entity
39
+ if (i < expectedList.length) {
40
+ expectedList[i] = maybeTestId(em, expectedI);
41
+ }
42
+ if (i < actualList.length) {
43
+ cleanList.push(maybeTestId(em, actualI));
44
+ }
37
45
  }
38
46
  }
39
- copy[key] = copyList;
47
+ clean[key] = cleanList;
40
48
  }
41
49
  else {
42
50
  // If the `.load` result wasn't a list, assume it's an entity that we'll copy
43
51
  if ((0, joist_orm_1.isEntity)(loaded) && !(0, joist_orm_1.isEntity)(expected[key])) {
44
- const child = {};
45
- queue.push([loaded, expected[key], child]);
46
- copy[key] = child;
52
+ const loadedClean = {};
53
+ queue.push([loaded, expected[key], loadedClean]);
54
+ clean[key] = loadedClean;
47
55
  }
48
56
  else {
49
- copy[key] = loaded;
57
+ expected[key] = maybeTestId(em, expected[key]);
58
+ clean[key] = maybeTestId(em, loaded);
50
59
  }
51
60
  }
52
61
  }
53
62
  else {
54
63
  // Otherwise assume it's regular data. Probably need to handle getters/promises?
55
- copy[key] = value;
64
+ clean[key] = value;
56
65
  }
57
66
  }
58
67
  }
59
68
  // Blatantly grab `toMatchObject` from the guts of expect
60
69
  const { getMatchers } = require("expect/build/jestMatchersObject");
61
70
  // @ts-ignore
62
- return getMatchers().toMatchObject.call(this, copy, expected);
71
+ return getMatchers().toMatchObject.call(this, clean, expected);
63
72
  }
64
73
  exports.toMatchEntity = toMatchEntity;
74
+ function maybeTestId(em, maybeEntity) {
75
+ return (0, joist_orm_1.isEntity)(maybeEntity) ? getTestId(em, maybeEntity) : maybeEntity;
76
+ }
77
+ /** Returns either the persisted id or `tag#<offset-in-EntityManager>`. */
78
+ function getTestId(em, entity) {
79
+ if (entity.id) {
80
+ return entity.id;
81
+ }
82
+ const meta = (0, joist_orm_1.getMetadata)(entity);
83
+ const sameType = em.entities.filter((e) => e instanceof meta.cstr);
84
+ return `${meta.tagName}#${sameType.indexOf(entity) + 1}`;
85
+ }
65
86
  //# sourceMappingURL=toMatchEntity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toMatchEntity.js","sourceRoot":"","sources":["../src/toMatchEntity.ts"],"names":[],"mappings":";;;AACA,yCAA+F;AAExF,KAAK,UAAU,aAAa,CAAI,MAAc,EAAE,QAA0B;IAC/E,yFAAyF;IACzF,0FAA0F;IAC1F,oFAAoF;IACpF,MAAM,IAAI,GAAG,EAAE,CAAC;IAEhB,sGAAsG;IACtG,0GAA0G;IAC1G,MAAM,KAAK,GAAsB,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,KAAK,IAAI,CAAC,IAAA,uBAAW,EAAC,KAAK,CAAC,IAAI,IAAA,wBAAY,EAAC,KAAK,CAAC,CAAC,EAAE;gBACxD,wGAAwG;gBACxG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,MAAM,YAAY,KAAK,EAAE;oBAC3B,MAAM,UAAU,GAAG,MAAM,CAAC;oBAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACnC,MAAM,QAAQ,GAAG,EAAE,CAAC;oBACpB,8CAA8C;oBAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE;wBACzE,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC9B,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;wBAClC,6EAA6E;wBAC7E,IAAI,IAAA,oBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,IAAA,oBAAQ,EAAC,SAAS,CAAC,EAAE;4BAC7C,MAAM,KAAK,GAAG,EAAE,CAAC;4BACjB,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;4BACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;yBACtB;6BAAM;4BACL,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBACxB;qBACF;oBACD,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;iBACtB;qBAAM;oBACL,6EAA6E;oBAC7E,IAAI,IAAA,oBAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,IAAA,oBAAQ,EAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;wBAChD,MAAM,KAAK,GAAG,EAAE,CAAC;wBACjB,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;qBACnB;yBAAM;wBACL,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;qBACpB;iBACF;aACF;iBAAM;gBACL,gFAAgF;gBAChF,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;aACnB;SACF;KACF;IAED,yDAAyD;IACzD,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACnE,aAAa;IACb,OAAO,WAAW,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC;AAxDD,sCAwDC"}
1
+ {"version":3,"file":"toMatchEntity.js","sourceRoot":"","sources":["../src/toMatchEntity.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "joist-test-utils",
3
- "version": "1.0.727",
3
+ "version": "1.0.730",
4
4
  "license": "MIT",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",