github.com/kaleido-io/firefly@v0.0.0-20210622132723-8b4b6aacb971/kat/src/test/ethereum/members/registration.ts (about) 1 // Copyright © 2021 Kaleido, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 import { app, mockEventStreamWebSocket } from '../../common'; 16 import nock from 'nock'; 17 import request from 'supertest'; 18 import assert from 'assert'; 19 import { IEventMemberRegistered, IDBMember } from '../../../lib/interfaces'; 20 import * as utils from '../../../lib/utils'; 21 22 export const testMemberRegistration = async () => { 23 24 describe('Members - registration', async () => { 25 26 const timestampCreation = utils.getTimestamp(); 27 const timestampUpdate = utils.getTimestamp(); 28 29 it('Checks that adding a member sends a request to API Gateway and updates the database', async () => { 30 31 nock('https://apigateway.kaleido.io') 32 .post('/registerMember?kld-from=0x0000000000000000000000000000000000000011&kld-sync=false') 33 .reply(200); 34 const addMemberResponse = await request(app) 35 .put('/api/v1/members') 36 .send({ 37 address: '0x0000000000000000000000000000000000000011', 38 name: 'Member 1' 39 }) 40 .expect(200); 41 assert.deepStrictEqual(addMemberResponse.body, { status: 'submitted' }); 42 43 const getMemberResponse = await request(app) 44 .get('/api/v1/members') 45 .expect(200); 46 const member = getMemberResponse.body.find((member: IDBMember) => member.address === '0x0000000000000000000000000000000000000011'); 47 assert.strictEqual(member.address, '0x0000000000000000000000000000000000000011'); 48 assert.strictEqual(member.name, 'Member 1'); 49 assert.strictEqual(member.assetTrailInstanceID, 'service-id'); 50 assert.strictEqual(member.app2appDestination, 'kld://app2app/internal'); 51 assert.strictEqual(member.docExchangeDestination, 'kld://docstore/dest'); 52 assert.strictEqual(typeof member.submitted, 'number'); 53 54 const getMemberByAddressResponse = await request(app) 55 .get('/api/v1/members/0x0000000000000000000000000000000000000011') 56 .expect(200); 57 assert.deepStrictEqual(member, getMemberByAddressResponse.body); 58 }); 59 60 it('Checks that event stream notification for confirming member registrations is handled', async () => { 61 62 const eventPromise = new Promise<void>((resolve) => { 63 mockEventStreamWebSocket.once('send', message => { 64 assert.strictEqual(message, '{"type":"ack","topic":"dev"}'); 65 resolve(); 66 }) 67 }); 68 69 const data: IEventMemberRegistered = { 70 member: '0x0000000000000000000000000000000000000011', 71 name: 'Member 1', 72 assetTrailInstanceID: 'service-id', 73 app2appDestination: 'kld://app2app/internal', 74 docExchangeDestination: 'kld://docstore/dest', 75 timestamp: timestampCreation 76 }; 77 mockEventStreamWebSocket.emit('message', JSON.stringify([{ 78 signature: utils.contractEventSignatures.MEMBER_REGISTERED, 79 data, 80 blockNumber: '123', 81 transactionHash: '0x0000000000000000000000000000000000000000000000000000000000000000' 82 }])); 83 await eventPromise; 84 }); 85 86 it('Get member should return the confirmed member', async () => { 87 const getMemberResponse = await request(app) 88 .get('/api/v1/members') 89 .expect(200); 90 const member = getMemberResponse.body.find((member: IDBMember) => member.address === '0x0000000000000000000000000000000000000011'); 91 assert.strictEqual(member.address, '0x0000000000000000000000000000000000000011'); 92 assert.strictEqual(member.name, 'Member 1'); 93 assert.strictEqual(member.assetTrailInstanceID, 'service-id'); 94 assert.strictEqual(member.app2appDestination, 'kld://app2app/internal'); 95 assert.strictEqual(member.docExchangeDestination, 'kld://docstore/dest'); 96 assert.strictEqual(member.blockNumber, 123); 97 assert.strictEqual(member.transactionHash, '0x0000000000000000000000000000000000000000000000000000000000000000'); 98 assert.strictEqual(member.timestamp, timestampCreation); 99 100 const getMemberByAddressResponse = await request(app) 101 .get('/api/v1/members/0x0000000000000000000000000000000000000011') 102 .expect(200); 103 assert.deepStrictEqual(member, getMemberByAddressResponse.body); 104 }); 105 106 it('Checks that updating a member sends a request to API Gateway and updates the database', async () => { 107 nock('https://apigateway.kaleido.io') 108 .post('/registerMember?kld-from=0x0000000000000000000000000000000000000011&kld-sync=false') 109 .reply(200); 110 const addMemberResponse = await request(app) 111 .put('/api/v1/members') 112 .send({ 113 address: '0x0000000000000000000000000000000000000011', 114 name: 'Member 2' 115 }) 116 .expect(200); 117 assert.deepStrictEqual(addMemberResponse.body, { status: 'submitted' }); 118 119 const getMemberResponse = await request(app) 120 .get('/api/v1/members') 121 .expect(200); 122 const member = getMemberResponse.body.find((member: IDBMember) => member.address === '0x0000000000000000000000000000000000000011'); 123 assert.strictEqual(member.address, '0x0000000000000000000000000000000000000011'); 124 assert.strictEqual(member.name, 'Member 2'); 125 assert.strictEqual(member.assetTrailInstanceID, 'service-id'); 126 assert.strictEqual(member.app2appDestination, 'kld://app2app/internal'); 127 assert.strictEqual(member.docExchangeDestination, 'kld://docstore/dest'); 128 assert.strictEqual(member.blockNumber, 123); 129 assert.strictEqual(member.transactionHash, '0x0000000000000000000000000000000000000000000000000000000000000000'); 130 assert.strictEqual(typeof member.timestamp, 'number'); 131 132 const getMemberByAddressResponse = await request(app) 133 .get('/api/v1/members/0x0000000000000000000000000000000000000011') 134 .expect(200); 135 assert.deepStrictEqual(member, getMemberByAddressResponse.body); 136 }); 137 138 it('Checks that event stream notification for confirming member registrations are handled', async () => { 139 140 const eventPromise = new Promise<void>((resolve) => { 141 mockEventStreamWebSocket.once('send', message => { 142 assert.strictEqual(message, '{"type":"ack","topic":"dev"}'); 143 resolve(); 144 }) 145 }); 146 147 const data: IEventMemberRegistered = { 148 member: '0x0000000000000000000000000000000000000011', 149 name: 'Member 2', 150 assetTrailInstanceID: 'service-id', 151 app2appDestination: 'kld://app2app/internal', 152 docExchangeDestination: 'kld://docstore/dest', 153 timestamp: timestampUpdate 154 }; 155 mockEventStreamWebSocket.emit('message', JSON.stringify([{ 156 signature: utils.contractEventSignatures.MEMBER_REGISTERED, 157 data, 158 blockNumber: '456', 159 transactionHash: '0x0000000000000000000000000000000000000000000000000000000000000001' 160 }])); 161 await eventPromise; 162 }); 163 164 it('Get member should return the confirmed member', async () => { 165 const getMemberResponse = await request(app) 166 .get('/api/v1/members') 167 .expect(200); 168 const member = getMemberResponse.body.find((member: IDBMember) => member.address === '0x0000000000000000000000000000000000000011'); 169 assert.strictEqual(member.address, '0x0000000000000000000000000000000000000011'); 170 assert.strictEqual(member.name, 'Member 2'); 171 assert.strictEqual(member.assetTrailInstanceID, 'service-id'); 172 assert.strictEqual(member.app2appDestination, 'kld://app2app/internal'); 173 assert.strictEqual(member.docExchangeDestination, 'kld://docstore/dest'); 174 assert.strictEqual(member.blockNumber, 456); 175 assert.strictEqual(member.transactionHash, '0x0000000000000000000000000000000000000000000000000000000000000001'); 176 assert.strictEqual(member.timestamp, timestampUpdate); 177 178 const getMemberByAddressResponse = await request(app) 179 .get('/api/v1/members/0x0000000000000000000000000000000000000011') 180 .expect(200); 181 assert.deepStrictEqual(member, getMemberByAddressResponse.body); 182 }); 183 184 }); 185 };