github.com/kaleido-io/firefly@v0.0.0-20210622132723-8b4b6aacb971/kat/src/test/ethereum/assets/authored/private/described-unstructured.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 { IDBAssetDefinition, IEventAssetDefinitionCreated } from '../../../../../lib/interfaces'; 20 import * as utils from '../../../../../lib/utils'; 21 import { testDescription } from '../../../../samples'; 22 23 export const testAuthoredPrivateDescribedUnstructured = () => { 24 25 describe('Assets: authored - private - described - unstructured', async () => { 26 27 let assetDefinitionID: string; 28 const assetDefinitionName = 'authored - private - described - unstructured'; 29 30 describe('Create asset definition', () => { 31 32 const timestamp = utils.getTimestamp(); 33 34 it('Checks that the asset definition can be added', async () => { 35 36 nock('https://apigateway.kaleido.io') 37 .post('/createAssetDefinition?kld-from=0x0000000000000000000000000000000000000001&kld-sync=false') 38 .reply(200, { id: 'my-receipt-id' }); 39 40 nock('https://ipfs.kaleido.io') 41 .post('/api/v0/add') 42 .reply(200, { Hash: 'QmdkH21EiyQXrgo2sPKtSijtvfYBKqQedBxB7W4RJ4m6jo' }); 43 44 const result = await request(app) 45 .post('/api/v1/assets/definitions') 46 .send({ 47 name: assetDefinitionName, 48 author: '0x0000000000000000000000000000000000000001', 49 isContentPrivate: true, 50 isContentUnique: true, 51 descriptionSchema: testDescription.schema.object 52 }) 53 .expect(200); 54 assert.deepStrictEqual(result.body.status, 'submitted'); 55 assetDefinitionID = result.body.assetDefinitionID; 56 57 const getAssetDefinitionsResponse = await request(app) 58 .get('/api/v1/assets/definitions') 59 .expect(200); 60 const assetDefinition = getAssetDefinitionsResponse.body.find((assetDefinition: IDBAssetDefinition) => assetDefinition.name === 'authored - private - described - unstructured'); 61 assert.strictEqual(assetDefinition.assetDefinitionID, assetDefinitionID); 62 assert.strictEqual(assetDefinition.author, '0x0000000000000000000000000000000000000001'); 63 assert.strictEqual(assetDefinition.isContentPrivate, true); 64 assert.strictEqual(assetDefinition.isContentUnique, true); 65 assert.strictEqual(assetDefinition.name, 'authored - private - described - unstructured'); 66 assert.strictEqual(assetDefinition.receipt, 'my-receipt-id'); 67 assert.strictEqual(typeof assetDefinition.submitted, 'number'); 68 }); 69 70 it('Checks that the event stream notification for confirming the asset definition creation is handled', async () => { 71 const eventPromise = new Promise<void>((resolve) => { 72 mockEventStreamWebSocket.once('send', message => { 73 assert.strictEqual(message, '{"type":"ack","topic":"dev"}'); 74 resolve(); 75 }) 76 }); 77 nock('https://ipfs.kaleido.io') 78 .get('/ipfs/QmdkH21EiyQXrgo2sPKtSijtvfYBKqQedBxB7W4RJ4m6jo') 79 .reply(200, { 80 assetDefinitionID: assetDefinitionID, 81 name: assetDefinitionName, 82 isContentPrivate: true, 83 isContentUnique: true, 84 descriptionSchema: testDescription.schema.object 85 }); 86 const data: IEventAssetDefinitionCreated = { 87 author: '0x0000000000000000000000000000000000000001', 88 assetDefinitionHash: '0xe4ecb77d78de507f68f5b410e0972cd5c05959ec1de041bb56bde25277786f96', 89 timestamp: timestamp.toString() 90 }; 91 mockEventStreamWebSocket.emit('message', JSON.stringify([{ 92 signature: utils.contractEventSignatures.ASSET_DEFINITION_CREATED, 93 data, 94 blockNumber: '123', 95 transactionHash: '0x0000000000000000000000000000000000000000000000000000000000000000' 96 }])); 97 await eventPromise; 98 }); 99 100 it('Checks that the asset definition is confirmed', async () => { 101 const getAssetDefinitionsResponse = await request(app) 102 .get('/api/v1/assets/definitions') 103 .expect(200); 104 const assetDefinition = getAssetDefinitionsResponse.body.find((assetDefinition: IDBAssetDefinition) => assetDefinition.name === 'authored - private - described - unstructured'); 105 assert.strictEqual(assetDefinition.assetDefinitionID, assetDefinitionID); 106 assert.strictEqual(assetDefinition.author, '0x0000000000000000000000000000000000000001'); 107 assert.strictEqual(assetDefinition.isContentPrivate, true); 108 assert.strictEqual(assetDefinition.isContentUnique, true); 109 assert.deepStrictEqual(assetDefinition.descriptionSchema, testDescription.schema.object); 110 assert.strictEqual(assetDefinition.name, 'authored - private - described - unstructured'); 111 assert.strictEqual(assetDefinition.timestamp, timestamp); 112 assert.strictEqual(typeof assetDefinition.submitted, 'number'); 113 assert.strictEqual(assetDefinition.receipt, 'my-receipt-id'); 114 assert.strictEqual(assetDefinition.blockNumber, 123); 115 assert.strictEqual(assetDefinition.transactionHash, '0x0000000000000000000000000000000000000000000000000000000000000000'); 116 117 const getAssetDefinitionResponse = await request(app) 118 .get(`/api/v1/assets/definitions/${assetDefinitionID}`) 119 .expect(200); 120 assert.deepStrictEqual(assetDefinition, getAssetDefinitionResponse.body); 121 }); 122 123 }); 124 125 }); 126 127 };