diff --git a/README.md b/README.md index 1e0e3f7..2a4b7e0 100644 --- a/README.md +++ b/README.md @@ -98,11 +98,7 @@ You can `cp .env.sample .env` and modify them locally. Integration tests are used to validate endpoints and response payloads. Then can be run locally via: -<<<<<<< HEAD - -1. # Set `.env` to: -1. Set `.env.` to: - > > > > > > > 648e306 (chore(README): update readme) +1. Set `.env` to: ```shell GATEWAY_HOST=localhost diff --git a/src/middleware/query.ts b/src/middleware/query.ts index c45d960..7de6527 100644 --- a/src/middleware/query.ts +++ b/src/middleware/query.ts @@ -29,6 +29,7 @@ export const queryMiddleware = async (ctx: KoaContext, next: Next) => { sortKey, page = DEFAULT_PAGE, pageSize = DEFAULT_PAGE_SIZE, + validity, } = ctx.query; logger.debug('Query params provided', { @@ -82,5 +83,10 @@ export const queryMiddleware = async (ctx: KoaContext, next: Next) => { ctx.state.pageSize = +pageSize; } + if (validity) { + logger.debug('Validity provided', { validity }); + ctx.state.validity = validity === 'true' || validity === '1'; + } + return next(); }; diff --git a/src/routes/contract.ts b/src/routes/contract.ts index 988de58..d593ce9 100644 --- a/src/routes/contract.ts +++ b/src/routes/contract.ts @@ -33,6 +33,7 @@ export async function contractHandler(ctx: KoaContext) { warp, sortKey: requestedSortKey, blockHeight: requestedBlockHeight, + validity: requestedValidity, } = ctx.state; const { contractTxId } = ctx.params; logger.debug('Fetching contract state', { @@ -42,6 +43,7 @@ export async function contractHandler(ctx: KoaContext) { }); const { state, + validity, evaluationOptions, sortKey: evaluatedSortKey, } = await getContractState({ @@ -57,6 +59,7 @@ export async function contractHandler(ctx: KoaContext) { state, sortKey: evaluatedSortKey, evaluationOptions, + ...(requestedValidity && { validity }), }; } diff --git a/tests/integration/routes.test.ts b/tests/integration/routes.test.ts index a4ff045..aaa6d3c 100644 --- a/tests/integration/routes.test.ts +++ b/tests/integration/routes.test.ts @@ -139,7 +139,7 @@ describe('Integration tests', () => { expect(data).to.equal('Contract is blocklisted.'); expect(statusText).to.equal('Contract is blocklisted.'); }); - it('should return the contract state and id and default evaluation options', async () => { + it('should return the contract state and id and default evaluation options without validity', async () => { const { status, data } = await axios.get(`/v1/contract/${id}`); expect(status).to.equal(200); expect(data).to.not.be.undefined; @@ -158,6 +158,27 @@ describe('Integration tests', () => { ]); }); + it('should return the contract state and id and default evaluation options when validity is provided', async () => { + const { status, data } = await axios.get(`/v1/contract/${id}`); + expect(status).to.equal(200); + expect(data).to.not.be.undefined; + const { contractTxId, state, evaluationOptions, sortKey, validity } = + data; + expect(contractTxId).to.equal(id); + expect(evaluationOptions).not.to.be.undefined; + expect(sortKey).not.be.undefined; + expect(validity).not.to.be.undefined; + expect(state).to.include.keys([ + 'balances', + 'owner', + 'name', + 'records', + 'ticker', + 'owner', + 'controller', + ]); + }); + it('should return a 404 for an invalid id', async () => { const { status } = await axios.get(`/v1/contract/non-matching-regex`); expect(status).to.equal(404);