@yoroi/claim
Version:
The Claim (proof-of-onboarding) package of Yoroi SDK
117 lines (116 loc) • 5.23 kB
JavaScript
"use strict";
var _types = require("@yoroi/types");
var _portfolio = require("@yoroi/portfolio");
var _transformers = require("./transformers");
var _apiFaucet = require("./api-faucet.mocks");
var _manager = require("./manager.mocks");
var _common = require("@yoroi/common");
const tokenManagerMock = (0, _portfolio.createTokenManagerMock)();
describe('asClaimApiError', () => {
afterEach(() => {
jest.clearAllMocks();
});
it('should throw specific claim API error when status matches', () => {
const error = {
status: _types.Api.HttpStatusCode.BadRequest,
message: 'Bad Request',
responseData: {}
};
expect(() => (0, _transformers.asClaimApiError)(error)).toThrow(_types.Claim.Api.Errors.InvalidRequest);
});
it('should throw generic API error when status does not match', () => {
const error = {
status: _types.Api.HttpStatusCode.Forbidden,
message: 'Forbidden',
responseData: {}
};
expect(() => (0, _transformers.asClaimApiError)(error)).toThrow(_types.Api.Errors.Forbidden);
});
});
describe('asClaimToken', () => {
const primaryTokenInfo = _portfolio.tokenMocks.primaryETH.info;
beforeEach(() => {
jest.clearAllMocks();
});
it('should return a "claimed" status with correct token amounts', async () => {
const claimResponse = _apiFaucet.claimFaucetResponses.claimTokens.success.claimed;
tokenManagerMock.sync.mockResolvedValue(new Map([[_portfolio.tokenMocks.nftCryptoKitty.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.nftCryptoKitty.info)], [_portfolio.tokenMocks.rnftWhatever.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.rnftWhatever.info)]]));
const result = await (0, _transformers.asClaimToken)(claimResponse, primaryTokenInfo, tokenManagerMock);
expect(result).toEqual({
status: 'done',
amounts: [{
info: primaryTokenInfo,
quantity: BigInt(2000000)
}, {
info: _portfolio.tokenMocks.nftCryptoKitty.info,
quantity: BigInt(44)
}, {
info: _portfolio.tokenMocks.rnftWhatever.info,
quantity: BigInt(410)
}],
txHash: 'tx_hash'
});
});
it('should return a "queued" status with correct token amounts', async () => {
const claimResponse = _apiFaucet.claimFaucetResponses.claimTokens.success.queued;
tokenManagerMock.sync.mockResolvedValue(new Map([[_portfolio.tokenMocks.nftCryptoKitty.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.nftCryptoKitty.info)], [_portfolio.tokenMocks.rnftWhatever.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.rnftWhatever.info)]]));
const result = await (0, _transformers.asClaimToken)(claimResponse, primaryTokenInfo, tokenManagerMock);
expect(result).toEqual(_manager.claimApiMockResponses.claimTokens.processing);
});
it('should return an "accepted" status with correct token amounts', async () => {
const claimResponse = _apiFaucet.claimFaucetResponses.claimTokens.success.accepted;
tokenManagerMock.sync.mockResolvedValue(new Map([[_portfolio.tokenMocks.nftCryptoKitty.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.nftCryptoKitty.info)], [_portfolio.tokenMocks.rnftWhatever.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.rnftWhatever.info)]]));
const result = await (0, _transformers.asClaimToken)(claimResponse, primaryTokenInfo, tokenManagerMock);
expect(result).toEqual(_manager.claimApiMockResponses.claimTokens.accepted);
});
it('should filter out invalid tokens or not requested tokens', async () => {
const claimResponse = {
..._apiFaucet.claimFaucetResponses.claimTokens.success.accepted,
lovelaces: null,
tokens: {
'invalid.id': null,
'dead.': null,
..._apiFaucet.claimFaucetResponses.claimTokens.success.accepted.tokens
}
};
tokenManagerMock.sync.mockResolvedValue(new Map([[_portfolio.tokenMocks.nftCryptoKitty.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.nftCryptoKitty.info)], [_portfolio.tokenMocks.rnftWhatever.info.id, (0, _common.cacheRecordMaker)({
expires: Date.now() + 3_600_000,
hash: 'hash3'
}, _portfolio.tokenMocks.rnftWhatever.info)], ['invalid.', undefined], ['dead.', {
record: _portfolio.tokenMocks.rnftWhatever.info
}]]));
const result = await (0, _transformers.asClaimToken)(claimResponse, primaryTokenInfo, tokenManagerMock);
expect(result).toEqual({
status: 'accepted',
amounts: [{
info: _portfolio.tokenMocks.nftCryptoKitty.info,
quantity: BigInt(44)
}, {
info: _portfolio.tokenMocks.rnftWhatever.info,
quantity: BigInt(410)
}]
});
});
});
//# sourceMappingURL=transformers.test.js.map