jest-aws-client-mock
Version:
Jest mock for AWS SDK v3 Clients
109 lines • 12.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwsMock = exports.mockClient = void 0;
/**
* Mocks an aws sdk client.
*/
const mockClient = (client) => {
const instance = isInstance(client) ? client : client.prototype;
const send = jest.spyOn(instance, 'send');
return new AwsMock(send);
};
exports.mockClient = mockClient;
class AwsMock {
constructor(send) {
this._isMockFunction = true;
this.send = send;
this.send.mockImplementation(() => undefined); // default
}
/**
* Does everything that `mockFn.mockClear()` does, and also removes any mocked return values or implementations.
*/
mockReset() {
this.send.mockReset();
return this;
}
/**
* Does everything that `mockFn.mockReset()` does, and also restores the original (non-mocked) implementation.
*/
mockRestore() {
this.send.mockRestore();
}
/**
* Resets all information stored in the mockFn.mock.calls and mockFn.mock.instances arrays.
*/
mockClear() {
this.send.mockClear();
return this;
}
get mock() {
return this.send.mock;
}
/**
* Sets the name of the mock.
*/
mockName(name) {
this.send.mockName(name);
return this;
}
/**
* Returns the mock name string set by calling mockFn.mockName(value).
*/
getMockName() {
return this.send.getMockName();
}
/**
* Simple sugar function for: mockFn.mockImplementation(() => Promise.resolve(value));
*/
mockResolvedValue(value) {
this.send.mockResolvedValue(value);
return this;
}
/**
* Simple sugar function for: mockFn.mockImplementationOnce(() => Promise.resolve(value));
*/
mockResolvedValueOnce(value) {
this.send.mockResolvedValueOnce(value);
return this;
}
/**
* Simple sugar function for: mockFn.mockImplementation(() => Promise.reject(value));
*/
mockRejectedValue(error) {
if (typeof error === 'string') {
error = new Error(error);
}
this.send.mockRejectedValue(error);
return this;
}
/**
* Simple sugar function for: mockFn.mockImplementationOnce(() => Promise.reject(value));
*/
mockRejectedValueOnce(error) {
if (typeof error === 'string') {
error = new Error(error);
}
this.send.mockRejectedValueOnce(error);
return this;
}
/**
* Accepts a function that should be used as the implementation of the mock. The mock itself will still record all calls that go into and instances that come from itself – the only difference is that the implementation will also be executed when the mock is called.
*/
// eslint-disable-next-line max-len
mockImplementation(fn) {
this.send.mockImplementation(fn);
return this;
}
/**
* Accepts a function that will be used as an implementation of the mock for one call to the mocked function. Can be chained so that multiple function calls produce different results.
*/
// eslint-disable-next-line max-len
mockImplementationOnce(fn) {
this.send.mockImplementationOnce(fn);
return this;
}
}
exports.AwsMock = AwsMock;
// eslint-disable-next-line max-len
const isInstance = (client) => client.send !== undefined;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9jay1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbW9jay1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUE7O0dBRUc7QUFDSSxNQUFNLFVBQVUsR0FBRyxDQUF3RCxNQUF5RCxFQUFFLEVBQUU7SUFDN0ksTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFFaEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFMUMsT0FBTyxJQUFJLE9BQU8sQ0FBa0IsSUFBSSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBTlcsUUFBQSxVQUFVLGNBTXJCO0FBS0YsTUFBYSxPQUFPO0lBS2xCLFlBQVksSUFBa0M7UUFKOUMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFLckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVU7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLGlCQUFpQixDQUFDLEtBQTZCO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBWSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxxQkFBcUIsQ0FBQyxLQUE2QjtRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQVksQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCLENBQUMsS0FBZ0M7UUFDdkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNJLHFCQUFxQixDQUFDLEtBQWdDO1FBQzNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQ0FBbUM7SUFDNUIsa0JBQWtCLENBQUMsRUFBb0o7UUFDNUssSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILG1DQUFtQztJQUM1QixzQkFBc0IsQ0FBQyxFQUFxSTtRQUNqSyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQVMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBM0dELDBCQTJHQztBQUVELG1DQUFtQztBQUNuQyxNQUFNLFVBQVUsR0FBRyxDQUF3QyxNQUFvQyxFQUFxQixFQUFFLENBQUUsTUFBa0IsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDbGllbnQsIE1ldGFkYXRhQmVhcmVyLCBDb21tYW5kLCBTZGtFcnJvciB9IGZyb20gJ0Bhd3Mtc2RrL3R5cGVzJztcblxuLyoqXG4gKiBNb2NrcyBhbiBhd3Mgc2RrIGNsaWVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1vY2tDbGllbnQgPSA8VElucHV0IGV4dGVuZHMgb2JqZWN0LCBUT3V0cHV0IGV4dGVuZHMgTWV0YWRhdGFCZWFyZXI+KGNsaWVudDogSW5zdGFuY2VPckNsYXNzVHlwZTxDbGllbnQ8VElucHV0LCBUT3V0cHV0LCBhbnk+PikgPT4ge1xuICBjb25zdCBpbnN0YW5jZSA9IGlzSW5zdGFuY2UoY2xpZW50KSA/IGNsaWVudCA6IGNsaWVudC5wcm90b3R5cGU7XG5cbiAgY29uc3Qgc2VuZCA9IGplc3Quc3B5T24oaW5zdGFuY2UsICdzZW5kJyk7XG5cbiAgcmV0dXJuIG5ldyBBd3NNb2NrPFRJbnB1dCwgVE91dHB1dD4oc2VuZCk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuZXhwb3J0IHR5cGUgQXdzQ2xpZW50TW9jazxUQ2xpZW50IGV4dGVuZHMgQ2xpZW50PGFueSwgYW55LCBhbnk+PiA9IFRDbGllbnQgZXh0ZW5kcyBDbGllbnQ8aW5mZXIgVElucHV0LCBpbmZlciBUT3V0cHV0LCBhbnk+ID8gQXdzTW9jazxUSW5wdXQsIFRPdXRwdXQ+IDogbmV2ZXI7XG5cbmV4cG9ydCBjbGFzcyBBd3NNb2NrPFRJbnB1dCBleHRlbmRzIG9iamVjdCwgVE91dHB1dCBleHRlbmRzIE1ldGFkYXRhQmVhcmVyPiB7XG4gIF9pc01vY2tGdW5jdGlvbiA9IHRydWU7XG5cbiAgcHJpdmF0ZSBzZW5kOiBTcHlJbnN0YW5jZTxUSW5wdXQsIFRPdXRwdXQ+O1xuXG4gIGNvbnN0cnVjdG9yKHNlbmQ6IFNweUluc3RhbmNlPFRJbnB1dCwgVE91dHB1dD4pIHtcbiAgICB0aGlzLnNlbmQgPSBzZW5kO1xuICAgIHRoaXMuc2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdW5kZWZpbmVkKTsgLy8gZGVmYXVsdFxuICB9XG5cbiAgLyoqXG4gICAqIERvZXMgZXZlcnl0aGluZyB0aGF0IGBtb2NrRm4ubW9ja0NsZWFyKClgIGRvZXMsIGFuZCBhbHNvIHJlbW92ZXMgYW55IG1vY2tlZCByZXR1cm4gdmFsdWVzIG9yIGltcGxlbWVudGF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBtb2NrUmVzZXQoKSB7XG4gICAgdGhpcy5zZW5kLm1vY2tSZXNldCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERvZXMgZXZlcnl0aGluZyB0aGF0IGBtb2NrRm4ubW9ja1Jlc2V0KClgIGRvZXMsIGFuZCBhbHNvIHJlc3RvcmVzIHRoZSBvcmlnaW5hbCAobm9uLW1vY2tlZCkgaW1wbGVtZW50YXRpb24uXG4gICAqL1xuICBwdWJsaWMgbW9ja1Jlc3RvcmUoKSB7XG4gICAgdGhpcy5zZW5kLm1vY2tSZXN0b3JlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIGFsbCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gdGhlIG1vY2tGbi5tb2NrLmNhbGxzIGFuZCBtb2NrRm4ubW9jay5pbnN0YW5jZXMgYXJyYXlzLlxuICAgKi9cbiAgcHVibGljIG1vY2tDbGVhcigpIHtcbiAgICB0aGlzLnNlbmQubW9ja0NsZWFyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1vY2soKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VuZC5tb2NrO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIG1vY2suXG4gICAqL1xuICBwdWJsaWMgbW9ja05hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZW5kLm1vY2tOYW1lKG5hbWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG1vY2sgbmFtZSBzdHJpbmcgc2V0IGJ5IGNhbGxpbmcgbW9ja0ZuLm1vY2tOYW1lKHZhbHVlKS5cbiAgICovXG4gIHB1YmxpYyBnZXRNb2NrTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZW5kLmdldE1vY2tOYW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogU2ltcGxlIHN1Z2FyIGZ1bmN0aW9uIGZvcjogbW9ja0ZuLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUodmFsdWUpKTtcbiAgICovXG4gIHB1YmxpYyBtb2NrUmVzb2x2ZWRWYWx1ZSh2YWx1ZTogQ29tbWFuZE91dHB1dDxUT3V0cHV0Pikge1xuICAgIHRoaXMuc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh2YWx1ZSBhcyBhbnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXBsZSBzdWdhciBmdW5jdGlvbiBmb3I6IG1vY2tGbi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkpO1xuICAgKi9cbiAgcHVibGljIG1vY2tSZXNvbHZlZFZhbHVlT25jZSh2YWx1ZTogQ29tbWFuZE91dHB1dDxUT3V0cHV0Pikge1xuICAgIHRoaXMuc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UodmFsdWUgYXMgYW55KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgc3VnYXIgZnVuY3Rpb24gZm9yOiBtb2NrRm4ubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVqZWN0KHZhbHVlKSk7XG4gICAqL1xuICBwdWJsaWMgbW9ja1JlamVjdGVkVmFsdWUoZXJyb3I6IHN0cmluZyB8IEVycm9yIHwgU2RrRXJyb3IpIHtcbiAgICBpZiAodHlwZW9mIGVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICB0aGlzLnNlbmQubW9ja1JlamVjdGVkVmFsdWUoZXJyb3IpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXBsZSBzdWdhciBmdW5jdGlvbiBmb3I6IG1vY2tGbi5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IFByb21pc2UucmVqZWN0KHZhbHVlKSk7XG4gICAqL1xuICBwdWJsaWMgbW9ja1JlamVjdGVkVmFsdWVPbmNlKGVycm9yOiBzdHJpbmcgfCBFcnJvciB8IFNka0Vycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGVycm9yKTtcbiAgICB9XG4gICAgdGhpcy5zZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShlcnJvcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0cyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2NrLiBUaGUgbW9jayBpdHNlbGYgd2lsbCBzdGlsbCByZWNvcmQgYWxsIGNhbGxzIHRoYXQgZ28gaW50byBhbmQgaW5zdGFuY2VzIHRoYXQgY29tZSBmcm9tIGl0c2VsZiDigJMgdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGFsc28gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgbW9jayBpcyBjYWxsZWQuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBwdWJsaWMgbW9ja0ltcGxlbWVudGF0aW9uKGZuPzogKChjb21tYW5kOiBDb21tYW5kPFRJbnB1dCwgVElucHV0LCBUT3V0cHV0LCBUT3V0cHV0LCBhbnk+LCBvcHRpb25zPzogYW55LCBjYj86IENhbGxiYWNrPFRPdXRwdXQ+KSA9PiB2b2lkIHwgQ29tbWFuZE91dHB1dDxUT3V0cHV0PikgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLnNlbmQubW9ja0ltcGxlbWVudGF0aW9uKGZuIGFzIGFueSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0cyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtb2NrIGZvciBvbmUgY2FsbCB0byB0aGUgbW9ja2VkIGZ1bmN0aW9uLiBDYW4gYmUgY2hhaW5lZCBzbyB0aGF0IG11bHRpcGxlIGZ1bmN0aW9uIGNhbGxzIHByb2R1Y2UgZGlmZmVyZW50IHJlc3VsdHMuXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBwdWJsaWMgbW9ja0ltcGxlbWVudGF0aW9uT25jZShmbjogKGNvbW1hbmQ6IENvbW1hbmQ8VElucHV0LCBUSW5wdXQsIFRPdXRwdXQsIFRPdXRwdXQsIGFueT4sIG9wdGlvbnM/OiBhbnksIGNiPzogQ2FsbGJhY2s8VE91dHB1dD4pID0+IHZvaWQgfCBDb21tYW5kT3V0cHV0PFRPdXRwdXQ+KSB7XG4gICAgdGhpcy5zZW5kLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoZm4gYXMgYW55KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuY29uc3QgaXNJbnN0YW5jZSA9IDxUQ2xpZW50IGV4dGVuZHMgQ2xpZW50PGFueSwgYW55LCBhbnk+PihjbGllbnQ6IEluc3RhbmNlT3JDbGFzc1R5cGU8VENsaWVudD4pOiBjbGllbnQgaXMgVENsaWVudCA9PiAoY2xpZW50IGFzIFRDbGllbnQpLnNlbmQgIT09IHVuZGVmaW5lZDtcblxudHlwZSBDbGFzc1R5cGU8VD4gPSB7XG4gIHByb3RvdHlwZTogVDtcbn07XG5cbnR5cGUgSW5zdGFuY2VPckNsYXNzVHlwZTxUPiA9IFQgfCBDbGFzc1R5cGU8VD47XG5cbnR5cGUgQ2FsbGJhY2s8VD4gPSAoZXJyOiBhbnksIGRhdGE/OiBUIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cbnR5cGUgQ29tbWFuZE91dHB1dDxUPiA9IFBhcnRpYWw8VD4gfCBQcm9taXNlPFBhcnRpYWw8VD4+O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxudHlwZSBTcHlJbnN0YW5jZTxUSW5wdXQgZXh0ZW5kcyBvYmplY3QsIFRPdXRwdXQgZXh0ZW5kcyBNZXRhZGF0YUJlYXJlcj4gPSBqZXN0LlNweUluc3RhbmNlPHZvaWQgfCBQcm9taXNlPFRPdXRwdXQ+LCBbY29tbWFuZDogQ29tbWFuZDxUSW5wdXQsIFRJbnB1dCwgVE91dHB1dCwgVE91dHB1dCwgYW55Piwgb3B0aW9ucz86IGFueSwgY2I/OiBDYWxsYmFjazxUT3V0cHV0Pl0+XG4iXX0=