js-node-hashicorp-vault
Version:
NodeJS Vault Provider
187 lines • 7.41 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const js_node_errors_1 = require("js-node-errors");
const __1 = __importStar(require(".."));
const mockUserpassLogin = jest.fn();
const mockWrite = jest.fn();
const mockRead = jest.fn();
const mockDelete = jest.fn();
jest.mock('node-vault', () => {
return jest.fn().mockImplementation(() => {
return {
userpassLogin: mockUserpassLogin,
write: mockWrite,
read: mockRead.mockResolvedValue({
data: {
data: {
value: 'secret',
},
},
}),
delete: mockDelete,
};
});
});
describe('vault-provider', () => {
let testObject;
const config = {
vaultAddr: 'vaultAddress',
vaultSecretPath: 'secretPath',
vaultAuthType: 'authType',
vaultUser: 'user',
vaultPassword: 'password',
};
const loggerConfig = {
appName: 'test-app-name',
moduleName: 'vault-test',
logLevel: 'info',
logStyle: 'cli',
};
const entityId = 'entityId';
const connectionError = new Error('connection error');
connectionError.name = 'RequestError';
const entityNotFoundError = new Error('Status 404');
beforeEach(() => {
testObject = new __1.default(config, loggerConfig);
});
it('should not throw error given userpasslogin does not throw error when initialize', () => __awaiter(void 0, void 0, void 0, function* () {
// arrange
let thrown = null;
// act
try {
yield testObject.initialize();
}
catch (e) {
thrown = e;
}
// assert
expect(thrown).toBeNull();
}));
it('should throw error given userpasslogin throws error when initialize', () => __awaiter(void 0, void 0, void 0, function* () {
// arrange
mockUserpassLogin.mockRejectedValueOnce(new Error());
let thrown = null;
// act
try {
yield testObject.initialize();
}
catch (e) {
thrown = e;
}
// assert
expect(thrown).not.toBeNull();
}));
it('should call read when read', () => __awaiter(void 0, void 0, void 0, function* () {
// act
yield testObject.initialize();
yield testObject.read(entityId);
// assert
expect(mockRead).toHaveBeenCalledWith(`${config.vaultSecretPath}/${entityId}`);
}));
it('should throw access error given read throws when read', () => __awaiter(void 0, void 0, void 0, function* () {
// arrange
mockRead.mockRejectedValueOnce(connectionError);
// act
yield testObject.initialize();
// assert
yield expect(testObject.read(entityId)).rejects.toThrow(__1.VaultAccessError);
}));
it('should throw resource not found error given read throws when read', () => __awaiter(void 0, void 0, void 0, function* () {
// arrange
mockRead.mockRejectedValueOnce(entityNotFoundError);
// act
yield testObject.initialize();
// assert
yield expect(testObject.read(entityId)).rejects.toThrow(js_node_errors_1.ResourceNotFoundError);
}));
it('should call write when write', () => __awaiter(void 0, void 0, void 0, function* () {
// arrange
const data = {
name: 'musa',
surname: 'ecer',
};
// act
yield testObject.initialize();
yield testObject.write(entityId, data);
// assert
expect(mockWrite).toHaveBeenCalledWith(`${config.vaultSecretPath}/${entityId}`, { data: { value: data } });
}));
it('should throw given write throws when write', () => __awaiter(void 0, void 0, void 0, function* () {
// arrange
const data = {
name: 'musa',
surname: 'ecer',
};
mockWrite.mockRejectedValueOnce(connectionError);
// act
yield testObject.initialize();
// assert
yield expect(testObject.write(entityId, data)).rejects.toThrow(__1.VaultAccessError);
}));
it('should call delete when delete', () => __awaiter(void 0, void 0, void 0, function* () {
// act
yield testObject.initialize();
yield testObject.delete(entityId);
// assert
expect(mockDelete).toHaveBeenCalledWith(`${config.vaultSecretPath}/${entityId}`);
}));
it('should throw given delete throws when delete', () => __awaiter(void 0, void 0, void 0, function* () {
// arrange
mockDelete.mockRejectedValueOnce(connectionError);
// act
yield testObject.initialize();
// assert
yield expect(testObject.delete(entityId)).rejects.toThrow(__1.VaultAccessError);
}));
it('should create an instance with error parameter', () => {
const testedError = new __1.RequiredVaultOptionsMissing();
expect(testedError.message).toBe('Vault Provider Required Options are missing');
expect(testedError.code).toBe('error.unexpected');
expect(testedError.name).toBe('RequiredVaultOptionsMissing');
expect(testedError.status).toBe(500);
expect(testedError.isPublic).toBe(true);
});
});
//# sourceMappingURL=vault-provider.spec.js.map
;