diff --git a/test/cli.test.ts b/test/cli.test.ts index d9b68b3..971298a 100644 --- a/test/cli.test.ts +++ b/test/cli.test.ts @@ -1,3 +1,5 @@ +import fs from 'fs'; +import yaml from 'js-yaml'; import assert from 'assert'; import { spawnSync } from 'child_process'; @@ -65,8 +67,7 @@ describe('Test laconic CLI commands', () => { describe('Bond operations', () => { const bondBalance = 1000000000; const bondOwner = existingAccount; - let bondId = 'de88ffab68af143da5d3ba2cf86f468ac4ac2efaa005e4d2fbce5fde85cbaa3e'; - // let bondId: string; + let bondId: string; test('laconic cns bond create', async () => { const result = spawnSync('laconic', ['cns', 'bond', 'create', '--type', TOKEN_TYPE, '--quantity', bondBalance.toString(), '--gas', '200000', '--fees', `200000${TOKEN_TYPE}`]); @@ -100,7 +101,7 @@ describe('Test laconic CLI commands', () => { const outputObj = Array.from(JSON.parse(output)); // Expected bond - const expectedBond = getExpectedBond({ id: bondId, owner: bondOwner, balance: bondBalance }); + const expectedBond = getBond({ id: bondId, owner: bondOwner, balance: bondBalance }); expect(outputObj.length).toEqual(1); expect(outputObj[0]).toEqual(expectedBond); @@ -119,7 +120,7 @@ describe('Test laconic CLI commands', () => { const outputObj = Array.from(JSON.parse(output)); // Expected bond - const expectedBond = getExpectedBond({ id: bondId, owner: bondOwner, balance: bondBalance }); + const expectedBond = getBond({ id: bondId, owner: bondOwner, balance: bondBalance }); expect(outputObj.length).toEqual(1); expect(outputObj[0]).toEqual(expectedBond); @@ -138,7 +139,7 @@ describe('Test laconic CLI commands', () => { const outputObj = Array.from(JSON.parse(output)); // Expected bond - const expectedBond = getExpectedBond({ id: bondId, owner: bondOwner, balance: bondBalance }); + const expectedBond = getBond({ id: bondId, owner: bondOwner, balance: bondBalance }); expect(outputObj.length).toEqual(1); expect(outputObj[0]).toEqual(expectedBond); @@ -225,12 +226,80 @@ describe('Test laconic CLI commands', () => { expect(outputObj).toMatchObject(expectedAccounts); }); }); + + describe('Record operations', () => { + const recordFilePath = 'test/data/watcher-record.yml'; + const gas = 250000; + const bondBalance = 1000000000; + const { bondId } = createBond(bondBalance); + let recordId: string; + + test('laconic cns record publish --filename --bond-id --gas ', async () => { + const result = spawnSync('laconic', ['cns', 'record', 'publish', '--filename', recordFilePath, '--bond-id', bondId, '--gas', gas.toString()]); + + const output = result.stdout.toString().trim(); + const errorOutput = result.stderr.toString().trim(); + + expect(errorOutput).toBe(''); + expect(result.status).toBe(0); + + expect(output.length).toBeGreaterThan(0); + const outputObj = JSON.parse(output); + + // Expect output object to resultant bond id + expect(outputObj).toHaveProperty('id'); + + recordId = outputObj.id; + }); + + test('laconic cns record list', async () => { + const result = spawnSync('laconic', ['cns', 'record', 'list']); + + const output = result.stdout.toString().trim(); + const errorOutput = result.stderr.toString().trim(); + + expect(errorOutput).toBe(''); + expect(result.status).toBe(0); + + expect(output.length).toBeGreaterThan(0); + const outputObj = Array.from(JSON.parse(output)); + + // Expected record + const expectedRecord = getRecord(recordFilePath, { bondId, recordId }); + + expect(outputObj.length).toEqual(1); + expect(outputObj[0]).toMatchObject(expectedRecord); + expect(outputObj[0]).toHaveProperty('createTime'); + expect(outputObj[0]).toHaveProperty('expiryTime'); + expect(outputObj[0]).toHaveProperty('owners'); + expect(outputObj[0].owners.length).toEqual(1); + }); + + test('laconic cns record get --id ', async () => { + const result = spawnSync('laconic', ['cns', 'record', 'get', '--id', recordId]); + + const output = result.stdout.toString().trim(); + const errorOutput = result.stderr.toString().trim(); + + expect(errorOutput).toBe(''); + expect(result.status).toBe(0); + + expect(output.length).toBeGreaterThan(0); + const outputObj = Array.from(JSON.parse(output)); + + // Expected record + const expectedRecord = getRecord(recordFilePath, { bondId, recordId }); + + expect(outputObj.length).toEqual(1); + expect(outputObj[0]).toMatchObject(expectedRecord); + }); + }); }); }); // Helper methods -function getExpectedBond(params: { id: string, owner: string, balance: number}): any { +function getBond(params: { id: string, owner: string, balance: number}): any { return { id: params.id, owner: params.owner, @@ -242,3 +311,21 @@ function getExpectedBond(params: { id: string, owner: string, balance: number}): ] }; } + +function createBond(quantity: number): { bondId: string } { + const result = spawnSync('laconic', ['cns', 'bond', 'create', '--type', TOKEN_TYPE, '--quantity', quantity.toString(), '--gas', '200000', '--fees', `200000${TOKEN_TYPE}`]); + const output = result.stdout.toString().trim(); + + return JSON.parse(output); +} + +function getRecord(recordFilePath: string, params: { bondId: string, recordId: string }): any { + const recordContent = yaml.load(fs.readFileSync(recordFilePath, 'utf8')) as any; + + return { + id: params.recordId, + names: null, + bondId: params.bondId, + attributes: recordContent.record + }; +} diff --git a/test/data/watcher-record.yml b/test/data/watcher-record.yml new file mode 100644 index 0000000..c1900b5 --- /dev/null +++ b/test/data/watcher-record.yml @@ -0,0 +1,7 @@ +record: + type: WebsiteRegistrationRecord + url: 'https://cerc.io' + repo_registration_record_cid: QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D + build_artifact_cid: QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9 + tls_cert_cid: QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR + version: 1.0.23