import { expect } from 'chai'; import 'mocha'; import { DIDWriter } from "./../src/DecentralizedIdentifier/DIDWriter"; import { keyGen } from 'mam.ts'; import { PermissionList } from './../src/Permissions/PermissionList'; import { RsaKeypair, DIDReader } from '../src'; import { SourceList } from '../src/Permissions/SourceList'; const NodeURL = "https://nodes.thetangle.org:443"; describe('Creating, checking and retracting permissions and data sources', function() { let SuperUserDID : DIDReader; let SuperUserUUID : string; let SuperUserKeys : RsaKeypair; let PermissionReceiverDID : DIDReader; let PermissionReceiverUUID : string; let PermissionReceiverKeys : RsaKeypair; let PermissionAddress : string = keyGen(81); let SourceAddress : string = keyGen(81); let List : PermissionList; let Sources : SourceList; const externalURL = "http://housedata.azurewebsites.net/api/"; before('Should create a DID for the Super User', async function() { this.timeout(30000); let SuperUserDIDWriter = await DIDWriter.createDIDWriter(NodeURL, keyGen(81)); SuperUserKeys = new RsaKeypair(); SuperUserDIDWriter.CreateNewDID(SuperUserKeys); await SuperUserDIDWriter.PublishChanges(); SuperUserDID = new DIDReader(NodeURL, SuperUserDIDWriter.GetRootofRoots()); SuperUserUUID = SuperUserDIDWriter.GetRootofRoots(); await SuperUserDID.QueryDID(); }); before('Should create a DID for the Permission Receiver', async function() { this.timeout(30000); let ReceiverWriter = await DIDWriter.createDIDWriter(NodeURL, keyGen(81)); PermissionReceiverKeys = new RsaKeypair(); ReceiverWriter.CreateNewDID(PermissionReceiverKeys); await ReceiverWriter.PublishChanges(); PermissionReceiverDID = new DIDReader(NodeURL, ReceiverWriter.GetRootofRoots()); PermissionReceiverUUID = ReceiverWriter.GetRootofRoots(); await PermissionReceiverDID.QueryDID(); }); it('Receiver should not have a permission', async function() { this.timeout(30000); List = new PermissionList(PermissionAddress, NodeURL); await List.QueryPermissionList(); await expect(await List.GetPermissionStateOf(PermissionReceiverUUID)).to.deep.equal({writingLevel : 0, readingLevel : 0, passReadLevel : 0, passWriteLevel : 0}); }); it('Super User should be able to add a permission', async function() { this.timeout(50000); await List.AddPermission(PermissionReceiverUUID, {writingLevel : 1, readingLevel : 1, passReadLevel : 1, passWriteLevel : 1}, SuperUserUUID, SuperUserDID.GetState().getPublicKey()[0].id, SuperUserKeys.GetPrivateKey() ); await List.QueryPermissionList(); expect(await List.GetPermissionStateOf(PermissionReceiverUUID)).to.deep.equal({writingLevel : 1, readingLevel : 1, passReadLevel : 1, passWriteLevel : 1}); }); it('Receiver should be able to submit a external Data source', async function() { this.timeout(50000); Sources = new SourceList(SourceAddress, NodeURL); await Sources.AddDataSource(PermissionReceiverUUID, externalURL, PermissionReceiverDID.GetState().getPublicKey()[0].id, PermissionReceiverKeys.GetPrivateKey()); await Sources.QuerySourceList(); expect(await Sources.GetExternalSource(PermissionReceiverUUID)).to.deep.equal(externalURL); }); it('Receiver should be able to retract Data Source', async function() { this.timeout(50000); await Sources.RemoveDataSource(PermissionReceiverUUID, PermissionReceiverDID.GetState().getPublicKey()[0].id, PermissionReceiverKeys.GetPrivateKey()); await Sources.QuerySourceList(); expect(await Sources.GetExternalSource(PermissionReceiverUUID)).deep.equal(null); }) it('Super User should be able to retract a permission', async function() { this.timeout(50000); await List.RetractPermission(PermissionReceiverUUID, SuperUserUUID, SuperUserDID.GetState().getPublicKey()[0].id, SuperUserKeys.GetPrivateKey()); await List.QueryPermissionList(); expect(await List.GetPermissionStateOf(PermissionReceiverUUID)).to.deep.equal({writingLevel : 0, readingLevel : 0, passReadLevel : 0, passWriteLevel : 0}); }) });