Skip to content

Commit

Permalink
fix: 🐛 multiSig.getHistoricalProposal errors
Browse files Browse the repository at this point in the history
fixed GraphQL error when fetching historical proposals. Also add `stack`
attribute to PolymeshError
  • Loading branch information
polymath-eric committed Jul 11, 2024
1 parent 1af7911 commit f72cb68
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 17 deletions.
14 changes: 5 additions & 9 deletions src/api/entities/Account/MultiSig/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,26 +157,22 @@ export class MultiSig extends Account {
}

/**
* Return all { @link api/entities/MultiSigProposal!MultiSigProposal } for this MultiSig Account
* Return a set of { @link api/entities/MultiSigProposal!MultiSigProposal | MultiSigProposal } for this MultiSig Account
*
* @note uses the middlewareV2
*/
public async getHistoricalProposals(opts: {
public async getHistoricalProposals(opts?: {
size?: BigNumber;
start?: BigNumber;
}): Promise<ResultSet<MultiSigProposal>> {
const {
context: { queryMiddleware },
context,
address,
} = this;
const { size, start } = opts;
const { context, address } = this;
const { size, start } = opts ?? {};

const {
data: {
multiSigProposals: { nodes, totalCount },
},
} = await queryMiddleware<Ensured<Query, 'multiSigProposals'>>(
} = await context.queryMiddleware<Ensured<Query, 'multiSigProposals'>>(
multiSigProposalsQuery(address, size, start)
);

Expand Down
15 changes: 9 additions & 6 deletions src/api/entities/Account/__tests__/MultiSig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ describe('MultiSig class', () => {
nodes: [mockHistoricalMultisig],
};

it('should get proposals', async () => {
it('should get historical proposals', async () => {
dsMockUtils.createApolloQueryMock(
multiSigProposalsQuery(address, new BigNumber(1), new BigNumber(0)),
{
Expand All @@ -237,14 +237,17 @@ describe('MultiSig class', () => {
expect(data.length).toEqual(1);
});

it('should return an empty array if no proposals are pending', async () => {
dsMockUtils.createQueryMock('multiSig', 'proposals', {
entries: [],
it('should work with optional pagination params', async () => {
dsMockUtils.createApolloQueryMock(multiSigProposalsQuery(address), {
multiSigProposals: multiSigProposalsResponse,
});
const result = await multiSig.getHistoricalProposals();

const result = await multiSig.getProposals();
const { data, next, count } = result;

expect(result).toEqual([]);
expect(next).toEqual(new BigNumber(1));
expect(count).toEqual(new BigNumber(2));
expect(data.length).toEqual(1);
});
});

Expand Down
3 changes: 2 additions & 1 deletion src/base/Context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1055,11 +1055,12 @@ export class Context {
result = await this.middlewareApi.query(query);
} catch (err) {
const resultMessage = err.networkError?.result?.message;
const { message: errorMessage } = err;
const { message: errorMessage, stack } = err;
const message = resultMessage ?? errorMessage;
throw new PolymeshError({
code: ErrorCode.MiddlewareError,
message: `Error in middleware V2 query: ${message}`,
stack,
});
}

Expand Down
5 changes: 5 additions & 0 deletions src/base/PolymeshError.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,19 @@ export class PolymeshError extends Error {
message,
code,
data,
stack,
}: {
message?: string;
code: ErrorCode;
data?: Record<string, unknown>;
stack?: Error['stack'];
}) {
super(message || defaultMessages[code] || `Unknown error, code: ${code}`);

this.code = code;
this.data = data;
if (stack) {
this.stack = stack;
}
}
}
6 changes: 5 additions & 1 deletion src/middleware/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1711,7 +1711,11 @@ export function multiSigProposalsQuery(
): QueryOptions<PaginatedQueryArgs<MultiSigProposalQueryParameters>> {
const query = gql`
query MultiSigProposalsQuery($size: Int, $start: Int, $multisigId: String!) {
multiSigProposals(filter: { multisigId: { eq: $multisigId } }, first: $size, offset: $start) {
multiSigProposals(
filter: { multisigId: { equalTo: $multisigId } }
first: $size
offset: $start
) {
nodes {
id
proposalId
Expand Down

0 comments on commit f72cb68

Please sign in to comment.