doku-nodejs-library
Version:
159 lines (143 loc) • 7.89 kB
JavaScript
const Snap = require("../_modules/snap");
const VaController = require('../_controllers/vaController');
const TokenController = require('../_controllers/tokenController');
jest.mock('../_controllers/vaController');
jest.mock('../_controllers/tokenController');
describe('Snap class', () => {
let snap;
let privateKey = `-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvuA0S+R8RGEoT
xZYfksdNam3/iNrKzY/RqGbN4Gf0juIN8XnUM8dGv4DVqmXQwRMMeQ3N/Y26pMDJ
1v/i6E5BwWasBAveSk7bmUBQYMURzxrvBbvfRNvIwtYDa+cx39HamfiYYOHq4hZV
S6G2m8SqDEhONxhHQmEP9FPHSOjPQWKSlgxrT3BKI9ESpQofcxKRX3hyfh6MedWT
lZpXUJrI9bd6Azg3Fd5wpfHQlLcKSR8Xr2ErH7dNS4I21DTHR+6qx02Tocv5D30O
DamA6yG9hxnFERLVE+8GnJE52Yjjsm5otGRwjHS4ngSShc/Ak1ZyksaCTFl0xEwT
J1oeESffAgMBAAECggEAHv9fxw4NTe2z+6LqZa113RE+UEqrFgWHLlv/rqe8jua5
t+32KNnteGyF5KtHhLjajGO6bLEi1F8F51U3FKcYTv84BnY8Rb1kBdcWAlffy9F2
Fd40EyHJh7PfHwFk6mZqVZ69vNuyXsX9XJSX9WerHLhH9QxBCykJiE/4i3owH4dF
Cd/7ervsP32ukGY3rs/mdcO8ThAWffF5QyGd/A3NMf8jRCZ3FwYfEPrgaj9IHV2f
UrwgVc7JqQaCJTvvjrm4Epjp+1mca036eoDj40H+ImF9qQ80jZee/vvqRXjfU5Qx
ys/MHD6S2aGEG5N5VnEuHLHvT51ytTpKA+mAY/armQKBgQDrQVtS8dlfyfnPLRHy
p8snF/hpqQQF2k1CDBJTaHfNXG37HlccGzo0vreFapyyeSakCdA3owW7ET8DBiO5
WN2Qgb7Vab/7vEiGltK4YU/62+g4F0LjWPp25wnbVj81XXW95QrWKjytjU/tgO2p
h47qr8C+3HqMPj1pQ5tcKpJXCwKBgQC/Nrkn0kT+u4KOxXix5RkRDxwfdylCvuKc
3EfMHFs4vELi1kOhwXEbVTIsbFpTmsXclofqZvjkhepeu9CM6PN2T852hOaI+1Wo
4v57UTW/nkpyo8FZ09PtBvOau5B6FpQU0uaKWrZ0dX/f0aGbQKUxJnFOq++7e7mi
IBfX1QCm/QKBgHtVWkFT1XgodTSuFji2ywSFxo/uMdO3rMUxevILVLNu/6GlOFnd
1FgOnDvvtpLCfQWGt4hTiQ+XbQdy0ou7EP1PZ/KObD3XadZVf8d2DO4hF89AMqrp
3PU1Dq/UuXKKus2BJHs+zWzXJs4Gx5IXJU/YMB5fjEe14ZAsB2j8UJgdAoGANjuz
MFQ3NXjBgvUHUo2EGo6Kj3IgxcmWRJ9FzeKNDP54ihXzgMF47yOu42KoC+ZuEC6x
xg4Gseo5mzzx3cWEqB3ilUMEj/2ZQhl/zEIwWHTw8Kr5gBzQkv3RwiVIyRf2UCGx
ObSY41cgOb8fcwVW1SXuJT4m9KoW8KDholnLoZECgYEAiNpTvvIGOoP/QT8iGQkk
r4GK50j9BoPSJhiM6k236LSc5+iZRKRVUCFEfyMPx6AY+jD2flfGxUv2iULp92XG
2eE1H6V1gDZ4JJw3s5847z4MNW3dj9nIi2bpFssnmoS5qP2IpmJW0QQmRmJZ8j2j
OrzKGlO90/6sNzIDd2DbRSM=
-----END PRIVATE KEY-----`
let clientID = 'BRN-0221-1693209567392'
let publicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr7gNEvkfERhKE8WWH5LHTWpt/4jays2P0ahmzeBn9I7iDfF51DPHRr+A1apl0METDHkNzf2NuqTAydb/4uhOQcFmrAQL3kpO25lAUGDFEc8a7wW730TbyMLWA2vnMd/R2pn4mGDh6uIWVUuhtpvEqgxITjcYR0JhD/RTx0joz0FikpYMa09wSiPREqUKH3MSkV94cn4ejHnVk5WaV1CayPW3egM4NxXecKXx0JS3CkkfF69hKx+3TUuCNtQ0x0fuqsdNk6HL+Q99Dg2pgOshvYcZxRES1RPvBpyROdmI47JuaLRkcIx0uJ4EkoXPwJNWcpLGgkxZdMRMEydaHhEn3wIDAQAB
-----END PUBLIC KEY-----`
let secretKey = 'SK-tDzY6MSLBWlNXy3qCsUU';
beforeEach(() => {
snap = new Snap({
isProduction: false,
privateKey: privateKey,
clientID: clientID,
publicKey: publicKey,
issuer: "issuer",
secretKey: secretKey
});
jest.clearAllMocks();
});
describe('deletePaymentCode', () => {
test('should call VaController.doDeletePaymentCode with correct parameters when token is valid', async () => {
// Mock token validity
TokenController.prototype.isTokenInvalid.mockReturnValue(false);
// Mock VaController.doDeletePaymentCode response
const deleteVaRequestDto = {
someField: 'value',
validateDeleteVaRequest: jest.fn(),
};
const expectedResponse = { status: 'DELETED' };
VaController.prototype.doDeletePaymentCode.mockResolvedValue(expectedResponse);
const result = await snap.deletePaymentCode(deleteVaRequestDto);
expect(deleteVaRequestDto.validateDeleteVaRequest).toHaveBeenCalled();
expect(TokenController.prototype.isTokenInvalid).toHaveBeenCalled();
expect(VaController.prototype.doDeletePaymentCode).toHaveBeenCalledWith(
deleteVaRequestDto,
snap.privateKey,
snap.clientId,
snap.tokenB2B,
snap.isProduction
);
expect(result).toEqual(expectedResponse);
});
test('should refresh token if it is invalid', async () => {
// Mock token invalidity and refresh
TokenController.prototype.isTokenInvalid.mockReturnValue(true);
const newToken = { accessToken: 'newAccessToken', expiresIn: 3600 };
TokenController.prototype.getTokenB2B.mockResolvedValue(newToken);
// Mock VaController.doDeletePaymentCode response
const deleteVaRequestDto = {
someField: 'value',
validateDeleteVaRequest: jest.fn(),
};
const expectedResponse = { status: 'DELETED' };
VaController.prototype.doDeletePaymentCode.mockResolvedValue(expectedResponse);
const result = await snap.deletePaymentCode(deleteVaRequestDto);
expect(deleteVaRequestDto.validateDeleteVaRequest).toHaveBeenCalled();
expect(TokenController.prototype.isTokenInvalid).toHaveBeenCalled();
expect(TokenController.prototype.getTokenB2B).toHaveBeenCalled();
expect(VaController.prototype.doDeletePaymentCode).toHaveBeenCalledWith(
deleteVaRequestDto,
snap.privateKey,
snap.clientId,
newToken.accessToken,
snap.isProduction
);
expect(result).toEqual(expectedResponse);
});
test('should handle errors from VaController.doDeletePaymentCode', async () => {
// Mock token validity
TokenController.prototype.isTokenInvalid.mockReturnValue(false);
// Mock VaController.doDeletePaymentCode to throw an error
const deleteVaRequestDto = {
someField: 'value',
validateDeleteVaRequest: jest.fn(),
};
VaController.prototype.doDeletePaymentCode.mockRejectedValue(new Error('Failed to delete payment code'));
await expect(snap.deletePaymentCode(deleteVaRequestDto)).rejects.toThrow('Failed to delete payment code');
expect(deleteVaRequestDto.validateDeleteVaRequest).toHaveBeenCalled();
expect(TokenController.prototype.isTokenInvalid).toHaveBeenCalledWith(
snap.tokenB2B,
snap.tokenExpiresIn,
snap.tokenGeneratedTimestamp
);
expect(VaController.prototype.doDeletePaymentCode).toHaveBeenCalledWith(
deleteVaRequestDto,
snap.privateKey,
snap.clientId,
snap.tokenB2B,
snap.isProduction
);
});
test('should handle errors from TokenController.getTokenB2B', async () => {
// Mock token invalidity and error during token refresh
TokenController.prototype.isTokenInvalid.mockReturnValue(true);
TokenController.prototype.getTokenB2B.mockRejectedValue(new Error('Failed to refresh token'));
const deleteVaRequestDto = {
someField: 'value',
validateDeleteVaRequest: jest.fn(),
};
await expect(snap.deletePaymentCode(deleteVaRequestDto)).rejects.toThrow('Failed to refresh token');
expect(deleteVaRequestDto.validateDeleteVaRequest).toHaveBeenCalled();
expect(TokenController.prototype.isTokenInvalid).toHaveBeenCalledWith(
snap.tokenB2B,
snap.tokenExpiresIn,
snap.tokenGeneratedTimestamp
);
expect(TokenController.prototype.getTokenB2B).toHaveBeenCalled();
expect(VaController.prototype.doDeletePaymentCode).not.toHaveBeenCalled();
});
});
});