mirror of
https://github.com/bitwarden/browser
synced 2025-12-06 00:13:28 +00:00
[PM-16917] Remove jest-extended dependency (#12798)
* add toContainPartialObjects matcher (replacing toIncludeAllPartialMembers from jest-extended) * replace jest-extended matchers with equivalent default matchers
This commit is contained in:
@@ -1,16 +1,12 @@
|
||||
import * as matchers from "jest-extended";
|
||||
|
||||
import { toBeFulfilled, toBeResolved, toBeRejected } from "./promise-fulfilled";
|
||||
import { toAlmostEqual } from "./to-almost-equal";
|
||||
import { toContainPartialObjects } from "./to-contain-partial-objects";
|
||||
import { toEqualBuffer } from "./to-equal-buffer";
|
||||
|
||||
export * from "./to-equal-buffer";
|
||||
export * from "./to-almost-equal";
|
||||
export * from "./promise-fulfilled";
|
||||
|
||||
// add all jest-extended matchers
|
||||
expect.extend(matchers);
|
||||
|
||||
export function addCustomMatchers() {
|
||||
expect.extend({
|
||||
toEqualBuffer: toEqualBuffer,
|
||||
@@ -18,6 +14,7 @@ export function addCustomMatchers() {
|
||||
toBeFulfilled: toBeFulfilled,
|
||||
toBeResolved: toBeResolved,
|
||||
toBeRejected: toBeRejected,
|
||||
toContainPartialObjects,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -59,4 +56,9 @@ export interface CustomMatchers<R = unknown> {
|
||||
* @returns CustomMatcherResult indicating whether or not the test passed
|
||||
*/
|
||||
toBeRejected(withinMs?: number): Promise<R>;
|
||||
/**
|
||||
* Matches if the received array contains all the expected objects using partial matching (expect.objectContaining).
|
||||
* @param expected An array of partial objects that should be contained in the received array.
|
||||
*/
|
||||
toContainPartialObjects<T>(expected: Array<T>): R;
|
||||
}
|
||||
|
||||
77
libs/common/spec/matchers/to-contain-partial-objects.spec.ts
Normal file
77
libs/common/spec/matchers/to-contain-partial-objects.spec.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
describe("toContainPartialObjects", () => {
|
||||
describe("matches", () => {
|
||||
it("if the array only contains the partial objects", () => {
|
||||
const actual = [
|
||||
{
|
||||
id: 1,
|
||||
name: "foo",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "bar",
|
||||
},
|
||||
];
|
||||
|
||||
const expected = [{ id: 1 }, { id: 2 }];
|
||||
|
||||
expect(actual).toContainPartialObjects(expected);
|
||||
});
|
||||
|
||||
it("if the array contains the partial objects and other objects", () => {
|
||||
const actual = [
|
||||
{
|
||||
id: 1,
|
||||
name: "foo",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "bar",
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
name: "baz",
|
||||
},
|
||||
];
|
||||
|
||||
const expected = [{ id: 1 }, { id: 2 }];
|
||||
|
||||
expect(actual).toContainPartialObjects(expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe("doesn't match", () => {
|
||||
it("if the array does not contain any partial objects", () => {
|
||||
const actual = [
|
||||
{
|
||||
id: 1,
|
||||
name: "foo",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "bar",
|
||||
},
|
||||
];
|
||||
|
||||
const expected = [{ id: 1, name: "Foo" }];
|
||||
|
||||
expect(actual).not.toContainPartialObjects(expected);
|
||||
});
|
||||
|
||||
it("if the array contains some but not all partial objects", () => {
|
||||
const actual = [
|
||||
{
|
||||
id: 1,
|
||||
name: "foo",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
name: "bar",
|
||||
},
|
||||
];
|
||||
|
||||
const expected = [{ id: 2 }, { id: 3 }];
|
||||
|
||||
expect(actual).not.toContainPartialObjects(expected);
|
||||
});
|
||||
});
|
||||
});
|
||||
31
libs/common/spec/matchers/to-contain-partial-objects.ts
Normal file
31
libs/common/spec/matchers/to-contain-partial-objects.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { EOL } from "os";
|
||||
|
||||
import { diff } from "jest-diff";
|
||||
|
||||
export const toContainPartialObjects: jest.CustomMatcher = function (
|
||||
received: Array<any>,
|
||||
expected: Array<any>,
|
||||
) {
|
||||
const matched = this.equals(
|
||||
received,
|
||||
expect.arrayContaining(expected.map((e) => expect.objectContaining(e))),
|
||||
);
|
||||
|
||||
if (matched) {
|
||||
return {
|
||||
message: () =>
|
||||
"Expected the received array NOT to include partial matches for all expected objects." +
|
||||
EOL +
|
||||
diff(expected, received),
|
||||
pass: true,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
message: () =>
|
||||
"Expected the received array to contain partial matches for all expected objects." +
|
||||
EOL +
|
||||
diff(expected, received),
|
||||
pass: false,
|
||||
};
|
||||
};
|
||||
@@ -184,7 +184,7 @@ describe("KeyServiceLegacyEncryptorProvider", () => {
|
||||
|
||||
singleUserId$.complete();
|
||||
|
||||
expect(completed).toBeTrue();
|
||||
expect(completed).toBe(true);
|
||||
});
|
||||
|
||||
it("completes when `userKey$` emits a falsy value after emitting a truthy value", () => {
|
||||
@@ -199,7 +199,7 @@ describe("KeyServiceLegacyEncryptorProvider", () => {
|
||||
|
||||
userKey$.next(null);
|
||||
|
||||
expect(completed).toBeTrue();
|
||||
expect(completed).toBe(true);
|
||||
});
|
||||
|
||||
it("completes once `dependencies.singleUserId$` emits and `userKey$` completes", () => {
|
||||
@@ -214,7 +214,7 @@ describe("KeyServiceLegacyEncryptorProvider", () => {
|
||||
|
||||
userKey$.complete();
|
||||
|
||||
expect(completed).toBeTrue();
|
||||
expect(completed).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -445,7 +445,7 @@ describe("KeyServiceLegacyEncryptorProvider", () => {
|
||||
|
||||
singleOrganizationId$.complete();
|
||||
|
||||
expect(completed).toBeTrue();
|
||||
expect(completed).toBe(true);
|
||||
});
|
||||
|
||||
it("completes when `orgKeys$` emits a falsy value after emitting a truthy value", () => {
|
||||
@@ -466,7 +466,7 @@ describe("KeyServiceLegacyEncryptorProvider", () => {
|
||||
orgKey$.next(OrgRecords);
|
||||
orgKey$.next(null);
|
||||
|
||||
expect(completed).toBeTrue();
|
||||
expect(completed).toBe(true);
|
||||
});
|
||||
|
||||
it("completes once `dependencies.singleOrganizationId$` emits and `userKey$` completes", () => {
|
||||
@@ -486,7 +486,7 @@ describe("KeyServiceLegacyEncryptorProvider", () => {
|
||||
|
||||
orgKey$.complete();
|
||||
|
||||
expect(completed).toBeTrue();
|
||||
expect(completed).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -56,7 +56,7 @@ describe("errorOnChange", () => {
|
||||
|
||||
source$.complete();
|
||||
|
||||
expect(complete).toBeTrue();
|
||||
expect(complete).toBe(true);
|
||||
});
|
||||
|
||||
it("errors when the input changes", async () => {
|
||||
|
||||
@@ -77,7 +77,7 @@ describe("Folder Service", () => {
|
||||
const result = await firstValueFrom(folderService.folders$(mockUserId));
|
||||
|
||||
expect(result.length).toBe(2);
|
||||
expect(result).toIncludeAllPartialMembers([
|
||||
expect(result).toContainPartialObjects([
|
||||
{ id: "1", name: makeEncString("ENC_STRING_1") },
|
||||
{ id: "2", name: makeEncString("ENC_STRING_2") },
|
||||
]);
|
||||
@@ -98,7 +98,7 @@ describe("Folder Service", () => {
|
||||
const result = await firstValueFrom(folderService.folderViews$(mockUserId));
|
||||
|
||||
expect(result.length).toBe(3);
|
||||
expect(result).toIncludeAllPartialMembers([
|
||||
expect(result).toContainPartialObjects([
|
||||
{ id: "1", name: "DEC" },
|
||||
{ id: "2", name: "DEC" },
|
||||
{ name: "No Folder" },
|
||||
|
||||
Reference in New Issue
Block a user