From 6b37022fc240797b8ec37a2d6529535127368921 Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Wed, 12 Jul 2023 17:33:06 +0200 Subject: [PATCH] adjust according to Claus-Peters Suggestions --- dlt-connector/jest.config.js | 3 +- .../src/graphql/input/TransactionInput.ts | 2 +- .../resolver/TransactionsResolver.test.ts | 39 +++++++++++-------- .../graphql/resolver/TransactionsResolver.ts | 5 ++- .../src/proto/TransactionBody.test.ts | 36 +++++++++++++++++ dlt-connector/src/proto/TransactionBody.ts | 4 +- 6 files changed, 67 insertions(+), 22 deletions(-) create mode 100644 dlt-connector/src/proto/TransactionBody.test.ts diff --git a/dlt-connector/jest.config.js b/dlt-connector/jest.config.js index aaf35eb74..45bee507e 100644 --- a/dlt-connector/jest.config.js +++ b/dlt-connector/jest.config.js @@ -6,7 +6,7 @@ module.exports = { collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**', '!src/seeds/**', '!build/**'], coverageThreshold: { global: { - lines: 62, + lines: 63, }, }, setupFiles: ['/test/testSetup.ts'], @@ -14,6 +14,7 @@ module.exports = { modulePathIgnorePatterns: ['/build/'], moduleNameMapper: { '@/(.*)': '/src/$1', + '@enum/(.*)': '/src/graphql/enum/$1', '@resolver/(.*)': '/src/graphql/resolver/$1', '@input/(.*)': '/src/graphql/input/$1', '@proto/(.*)': '/src/proto/$1', diff --git a/dlt-connector/src/graphql/input/TransactionInput.ts b/dlt-connector/src/graphql/input/TransactionInput.ts index a1c0aadb5..02eba916e 100755 --- a/dlt-connector/src/graphql/input/TransactionInput.ts +++ b/dlt-connector/src/graphql/input/TransactionInput.ts @@ -13,7 +13,7 @@ export class TransactionInput { amount: Decimal @Field(() => Number) - created: number + createdAt: number // @protoField.d(4, 'string') // @Field(() => Decimal) diff --git a/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts b/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts index 75e390c3c..0e54fa660 100644 --- a/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts +++ b/dlt-connector/src/graphql/resolver/TransactionsResolver.test.ts @@ -1,4 +1,5 @@ import 'reflect-metadata' +import { ApolloServer } from '@apollo/server' import { createApolloTestServer } from '@test/ApolloServerMock' import assert from 'assert' @@ -10,23 +11,35 @@ jest.mock('@/client/IotaClient', () => { } }) +let apolloTestServer: ApolloServer + describe('Transaction Resolver Test', () => { + beforeAll(async () => { + apolloTestServer = await createApolloTestServer() + }) + it('test version query', async () => { + const response = await apolloTestServer.executeOperation({ + query: '{ version }', + }) + // Note the use of Node's assert rather than Jest's expect; if using + // TypeScript, `assert`` will appropriately narrow the type of `body` + // and `expect` will not. + // Source: https://www.apollographql.com/docs/apollo-server/testing/testing + assert(response.body.kind === 'single') + expect(response.body.singleResult.errors).toBeUndefined() + expect(response.body.singleResult.data?.version).toBe('0.1') + }) it('test mocked sendTransaction', async () => { - const apolloTestServer = await createApolloTestServer() const response = await apolloTestServer.executeOperation({ query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', variables: { input: { type: 'SEND', amount: '10', - created: 1688992436, + createdAt: 1688992436, }, }, }) - // Note the use of Node's assert rather than Jest's expect; if using - // TypeScript, `assert`` will appropriately narrow the type of `body` - // and `expect` will not. - // Source: https://www.apollographql.com/docs/apollo-server/testing/testing assert(response.body.kind === 'single') expect(response.body.singleResult.errors).toBeUndefined() expect(response.body.singleResult.data?.sendTransaction).toBe( @@ -35,15 +48,13 @@ describe('Transaction Resolver Test', () => { }) it('test mocked sendTransaction invalid transactionType ', async () => { - const apolloTestServer = await createApolloTestServer() - const response = await apolloTestServer.executeOperation({ query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', variables: { input: { type: 'INVALID', amount: '10', - created: 1688992436, + createdAt: 1688992436, }, }, }) @@ -59,15 +70,13 @@ describe('Transaction Resolver Test', () => { }) it('test mocked sendTransaction invalid amount ', async () => { - const apolloTestServer = await createApolloTestServer() - const response = await apolloTestServer.executeOperation({ query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', variables: { input: { type: 'SEND', amount: 'no number', - created: 1688992436, + createdAt: 1688992436, }, }, }) @@ -83,15 +92,13 @@ describe('Transaction Resolver Test', () => { }) it('test mocked sendTransaction invalid created date ', async () => { - const apolloTestServer = await createApolloTestServer() - const response = await apolloTestServer.executeOperation({ query: 'mutation ($input: TransactionInput!) { sendTransaction(data: $input) }', variables: { input: { type: 'SEND', amount: '10', - created: '2023-03-02T10:12:00', + createdAt: '2023-03-02T10:12:00', }, }, }) @@ -100,7 +107,7 @@ describe('Transaction Resolver Test', () => { errors: [ { message: - 'Variable "$input" got invalid value "2023-03-02T10:12:00" at "input.created"; Float cannot represent non numeric value: "2023-03-02T10:12:00"', + 'Variable "$input" got invalid value "2023-03-02T10:12:00" at "input.createdAt"; Float cannot represent non numeric value: "2023-03-02T10:12:00"', }, ], }) diff --git a/dlt-connector/src/graphql/resolver/TransactionsResolver.ts b/dlt-connector/src/graphql/resolver/TransactionsResolver.ts index c5d298cf3..df50322fb 100755 --- a/dlt-connector/src/graphql/resolver/TransactionsResolver.ts +++ b/dlt-connector/src/graphql/resolver/TransactionsResolver.ts @@ -12,9 +12,10 @@ export class TransactionResolver { // GeneratingSchemaError: Some errors occurred while generating GraphQL schema: // Type Query must define one or more fields. // it seems that at least one query must be defined + // https://github.com/ardatan/graphql-tools/issues/764 @Query(() => String) - dummy(): string { - return 'nothing' + version(): string { + return '0.1' } @Mutation(() => String) diff --git a/dlt-connector/src/proto/TransactionBody.test.ts b/dlt-connector/src/proto/TransactionBody.test.ts new file mode 100644 index 000000000..a299c2dae --- /dev/null +++ b/dlt-connector/src/proto/TransactionBody.test.ts @@ -0,0 +1,36 @@ +import 'reflect-metadata' +import { TransactionType } from '@enum/TransactionType' +import { TransactionInput } from '@input/TransactionInput' +import Decimal from 'decimal.js-light' +import { TransactionBody } from './TransactionBody' + +describe('proto/TransactionBodyTest', () => { + it('test compatible with graphql/input/TransactionInput', async () => { + // test data + const type = TransactionType.SEND + const amount = new Decimal('10') + const createAt = 1688992436 + + // init both objects + // graphql input object + const transactionInput = new TransactionInput() + transactionInput.type = type + transactionInput.amount = amount + transactionInput.createdAt = createAt + + // protobuf object + const transactionBody = new TransactionBody() + transactionBody.type = type + transactionBody.amount = amount.toString() + transactionBody.createdAt = createAt + + // create protobuf object from graphql Input object + const message = TransactionBody.fromObject(transactionInput) + // serialize both protobuf objects + const messageBuffer = TransactionBody.encode(message).finish() + const messageBuffer2 = TransactionBody.encode(transactionBody).finish() + + // compare + expect(messageBuffer).toStrictEqual(messageBuffer2) + }) +}) diff --git a/dlt-connector/src/proto/TransactionBody.ts b/dlt-connector/src/proto/TransactionBody.ts index be257e924..539a6e8f7 100644 --- a/dlt-connector/src/proto/TransactionBody.ts +++ b/dlt-connector/src/proto/TransactionBody.ts @@ -9,10 +9,10 @@ export class TransactionBody extends Message { type: TransactionType @Field.d(2, 'string') - amount: Decimal + amount: string @Field.d(3, 'uint64') - created: number + createdAt: number // @protoField.d(4, 'string') // communitySum: Decimal