72 lines
1.8 KiB
TypeScript
72 lines
1.8 KiB
TypeScript
import * as E from "fp-ts/Either"
|
|
import { expect } from "vitest"
|
|
|
|
expect.extend({
|
|
toBeLeft(received, expected) {
|
|
const { isNot } = this
|
|
|
|
return {
|
|
pass:
|
|
E.isLeft(received) &&
|
|
this.equals(received.left, expected, undefined, false),
|
|
message: () =>
|
|
`Expected received value ${isNot ? "not " : ""}to be a left`,
|
|
}
|
|
},
|
|
toBeRight(received) {
|
|
const { isNot } = this
|
|
|
|
return {
|
|
pass: E.isRight(received),
|
|
message: () =>
|
|
`Expected received value ${isNot ? "not " : ""}to be a right`,
|
|
}
|
|
},
|
|
toEqualLeft(received, expected) {
|
|
const { isNot } = this
|
|
|
|
const isLeft = E.isLeft(received)
|
|
const leftEquals = E.isLeft(received)
|
|
? this.equals(received.left, expected)
|
|
: false
|
|
|
|
return {
|
|
pass: isLeft && leftEquals,
|
|
message: () => {
|
|
if (!isLeft) {
|
|
return `Expected received value ${isNot ? "not " : ""}to be a left`
|
|
} else if (!leftEquals) {
|
|
return `Expected received left value ${
|
|
isNot ? "not" : ""
|
|
} to equal expected value`
|
|
}
|
|
|
|
throw new Error("Invalid state on `toEqualLeft` matcher")
|
|
},
|
|
}
|
|
},
|
|
toSubsetEqualRight(received, expected) {
|
|
const { isNot } = this
|
|
|
|
const isRight = E.isRight(received)
|
|
const rightSubsetEquals = E.isRight(received)
|
|
? !!this.utils.subsetEquality(received.right, expected)
|
|
: false
|
|
|
|
return {
|
|
pass: isRight && rightSubsetEquals,
|
|
message: () => {
|
|
if (!isRight) {
|
|
return `Expected received value ${isNot ? "not " : ""}to be a left`
|
|
} else if (!rightSubsetEquals) {
|
|
return `Expected received left value to ${
|
|
isNot ? "not " : ""
|
|
}equal expected value`
|
|
}
|
|
|
|
throw new Error("Invalid state on `toSubsetEqualRight` matcher")
|
|
},
|
|
}
|
|
},
|
|
})
|