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  };