@yoroi/resolver
Version:
Yoroi domain resolver
199 lines (196 loc) • 6.54 kB
JavaScript
import { Resolver } from '@yoroi/types';
import { makeCnsCardanoApi } from './cardano-api-maker';
import { CardanoApi } from '@yoroi/api';
import { inlineDatumMock, metadataMock } from './cardano-api-maker.mocks';
jest.mock('@yoroi/api');
describe('getAssetAddress', () => {
it('returns the address', async () => {
const policyId = 'asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT';
const assetName = 'kskskskskskskkskskskskksksk';
const responseMock = {
tag: 'right',
value: {
data: ['fake-address'],
status: 200
}
};
const request = jest.fn(() => Promise.resolve(responseMock));
const {
getAssetAddress
} = makeCnsCardanoApi('https://localhost', request);
const response = await getAssetAddress(policyId, assetName);
expect(response).toBe('fake-address');
expect(request).toHaveBeenCalledWith({
url: 'https://localhost/api/asset/accounts?policy=asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT&asset=kskskskskskskkskskskskksksk'
}, undefined);
});
it('fails: api error', async () => {
const policyId = 'asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT';
const assetName = 'kskskskskskskkskskskskksksk';
const error = new Error('fake-error');
const responseMock = {
tag: 'left',
error
};
const request = jest.fn(() => Promise.resolve(responseMock));
const {
getAssetAddress
} = makeCnsCardanoApi('https://localhost', request);
try {
await getAssetAddress(policyId, assetName);
fail('it should crash before');
} catch (e) {
expect(e.message).toBe(error.message);
}
});
it('fails: invalid api response', async () => {
const policyId = 'asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT';
const assetName = 'kskskskskskskkskskskskksksk';
const responseMock = {
tag: 'right',
value: {
data: [123455],
status: 200
}
};
const request = jest.fn(() => Promise.resolve(responseMock));
const {
getAssetAddress
} = makeCnsCardanoApi('https://localhost', request);
try {
await getAssetAddress(policyId, assetName);
fail('it should crash before');
} catch (e) {
expect(e).toBeInstanceOf(Resolver.Errors.NotFound);
}
});
});
describe('getMetadata', () => {
it('returns the metadata', async () => {
const policyId = 'policyId';
const assetName = 'assetName';
const id = `${policyId}.${assetName}`;
const getOnChainMetadatas = jest.fn(() => Promise.resolve({
[id]: {
mintNftRecordSelected: metadataMock
}
}));
// @ts-ignore
CardanoApi.getOnChainMetadatas.mockReturnValue(getOnChainMetadatas);
const {
getMetadata
} = makeCnsCardanoApi('https://localhost');
const result = await getMetadata(policyId, assetName);
expect(result).toEqual(metadataMock);
});
it('returns undefined', async () => {
const policyId = 'policyId';
const assetName = 'assetName';
const getOnChainMetadatas = jest.fn(() => Promise.resolve({
randomId: {
mintNftRecordSelected: metadataMock
}
}));
// @ts-ignore
CardanoApi.getOnChainMetadatas.mockReturnValue(getOnChainMetadatas);
const {
getMetadata
} = makeCnsCardanoApi('https://localhost');
const result = await getMetadata(policyId, assetName);
expect(result).toBe(undefined);
});
it('fails: invalid respoonse', async () => {
const policyId = 'policyId';
const assetName = 'assetName';
const getOnChainMetadatas = jest.fn(() => Promise.resolve({
randomId: {
mintNftRecordSelected: 'invalid'
}
}));
// @ts-ignore
CardanoApi.getOnChainMetadatas.mockReturnValue(getOnChainMetadatas);
const {
getMetadata
} = makeCnsCardanoApi('https://localhost');
try {
await getMetadata(policyId, assetName);
fail('it should crash before');
} catch (e) {
expect(e).toBeInstanceOf(Resolver.Errors.NotFound);
}
});
});
describe('getAssetInlineDatum', () => {
it('returns the address', async () => {
const policyId = 'asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT';
const assetName = 'kskskskskskskkskskskskksksk';
const addresses = ['fake-address'];
const responseMock = {
tag: 'right',
value: {
data: inlineDatumMock,
status: 200
}
};
const request = jest.fn(() => Promise.resolve(responseMock));
const {
getAssetInlineDatum
} = makeCnsCardanoApi('https://localhost', request);
const response = await getAssetInlineDatum(policyId, assetName, addresses);
expect(response).toStrictEqual(inlineDatumMock[0]?.inline_datum.plutus_data);
expect(request).toHaveBeenCalledWith({
url: 'https://localhost/api/txs/utxoForAddresses',
method: 'post',
data: {
addresses,
asset: {
policy: 'asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT',
name: 'kskskskskskskkskskskskksksk'
}
}
}, undefined);
});
it('fails: api error', async () => {
const policyId = 'asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT';
const assetName = 'kskskskskskskkskskskskksksk';
const addresses = ['fake-address'];
const error = new Error('fake-error');
const responseMock = {
tag: 'left',
error
};
const request = jest.fn(() => Promise.resolve(responseMock));
const {
getAssetInlineDatum
} = makeCnsCardanoApi('https://localhost', request);
try {
await getAssetInlineDatum(policyId, assetName, addresses);
fail('it should crash before');
} catch (e) {
expect(e.message).toBe(error.message);
}
});
it('fails: invalid api response', async () => {
const policyId = 'asset-hex-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT';
const assetName = 'kskskskskskskkskskskskksksk';
const addresses = ['fake-address'];
const responseMock = {
tag: 'right',
value: {
data: 'invalid',
status: 200
}
};
const request = jest.fn(() => Promise.resolve(responseMock));
const {
getAssetInlineDatum
} = makeCnsCardanoApi('https://localhost', request);
try {
await getAssetInlineDatum(policyId, assetName, addresses);
fail('it should crash before');
} catch (e) {
expect(e).toBeInstanceOf(Resolver.Errors.NotFound);
}
});
});
//# sourceMappingURL=cardano-api-maker.test.js.map