Skip to content

Commit

Permalink
Merge branch 'main' into perspective-snapshot-integration
Browse files Browse the repository at this point in the history
  • Loading branch information
lucksus committed Mar 8, 2022
2 parents ad72a58 + 2c172d7 commit 4f0c357
Show file tree
Hide file tree
Showing 9 changed files with 28,192 additions and 22,710 deletions.
2 changes: 1 addition & 1 deletion default.nix
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
holonixPath ? builtins.fetchTarball { url = "https://github.com/holochain/holonix/archive/2f7b8047d6314f64fca34394a52d465c18b2f4d5.tar.gz"; }
holonixPath ? builtins.fetchTarball { url = "https://github.com/holochain/holonix/archive/52158409f9b76b442e592e8f06632b0e57a6c365.tar.gz"; }
}:

let
Expand Down
48,214 changes: 27,640 additions & 20,574 deletions package-lock.json

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions scripts/get-builtin-test-langs.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ const path = require("path");
const languages = {
"agent-expression-store": {
targetDnaName: "agent-store",
dna: "https://github.com/perspect3vism/agent-language/releases/download/0.0.9/agent-store.dna",
dna: "https://github.com/perspect3vism/agent-language/releases/download/0.0.10/agent-store.dna",
bundle:
"https://github.com/perspect3vism/agent-language/releases/download/0.0.9/bundle.js",
"https://github.com/perspect3vism/agent-language/releases/download/0.0.10/bundle.js",
},
languages: {
targetDnaName: "languages",
Expand All @@ -23,13 +23,13 @@ const languages = {
zipped: true,
targetDnaName: "social-context",
resource:
"https://github.com/juntofoundation/Social-Context/releases/download/0.0.21/full_features.zip",
"https://github.com/juntofoundation/Social-Context/releases/download/0.0.22/full_features.zip",
},
"note-ipfs": {
bundle: "https://github.com/perspect3vism/lang-note-ipfs/releases/download/0.0.4/bundle.js",
},
"direct-message-language": {
bundle: "https://github.com/perspect3vism/direct-message-language/releases/download/0.0.3/bundle.js"
bundle: "https://github.com/perspect3vism/direct-message-language/releases/download/0.0.4/bundle.js"
},
"perspective-language": {
bundle: "https://github.com/perspect3vism/perspective-language/releases/download/0.0.1/bundle.js"
Expand Down
57 changes: 49 additions & 8 deletions src/core/Perspective.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,34 @@ export default class Perspective {

// console.debug("getLinks 2")

const reverse = query.fromDate! >= query.untilDate!;

function fromDateFilter(link: LinkExpression) {
if (reverse) {
return new Date(link.timestamp) <= query.fromDate!
} else {
return new Date(link.timestamp) >= query.fromDate!
}
}

function untilDateFilter(link: LinkExpression) {
if (reverse) {
return new Date(link.timestamp) >= query.untilDate!
} else {
return new Date(link.timestamp) <= query.untilDate!
}
}

function limitFilter(results: LinkExpression[]) {
if (query.limit) {
const startLimit = reverse ? results.length - query.limit : 0;
const endLimit = reverse ? (results.length - query.limit) + query.limit : query.limit;
return results.slice(startLimit, endLimit)
}

return results;
}

if(query.source) {
// console.debug("query.source", query.source)
//@ts-ignore
Expand All @@ -231,11 +259,11 @@ export default class Perspective {
// @ts-ignore
if(query.predicate) result = result.filter(l => l.data.predicate === query.predicate)
//@ts-ignore
if (query.fromDate) result = result.filter(l => new Date(l.timestamp) >= query.fromDate!)
//@ts-ignore
if (query.untilDate) result = result.filter(l => new Date(l.timestamp) <= query.untilDate!)
if (query.fromDate) result = result.filter(fromDateFilter)
// @ts-ignore
if (query.untilDate) result = result.filter(untilDateFilter)
// console.debug("result", result)
if (query.limit) result = result.slice(0, query.limit);
result = limitFilter(result);
return result
}

Expand All @@ -247,10 +275,10 @@ export default class Perspective {
// @ts-ignore
if(query.predicate) result = result.filter(l => l.data.predicate === query.predicate)
//@ts-ignore
if (query.fromDate) result = result.filter(l => new Date(l.timestamp) >= query.fromDate!)
if (query.fromDate) result = result.filter(fromDateFilter)
//@ts-ignore
if (query.untilDate) result = result.filter(l => new Date(l.timestamp) <= query.untilDate!)
if (query.limit) result = result.slice(0, query.limit);
if (query.untilDate) result = result.filter(untilDateFilter)
result = limitFilter(result);
return result
}

Expand All @@ -272,8 +300,21 @@ export default class Perspective {
const mergedLinks: {[key: number]: LinkExpression} = {};
localLinks.forEach(l => mergedLinks[hashLinkExpression(l)] = l)
remoteLinks.forEach(l => mergedLinks[hashLinkExpression(l)] = l)

const reverse = query.fromDate! >= query.untilDate!;

let values = Object.values(mergedLinks).sort((a, b) => {
return new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime();
});


if (query.limit) {
const startLimit = reverse ? values.length - query.limit : 0;
const endLimit = reverse ? (values.length - query.limit) + query.limit : query.limit;
values = values.slice(startLimit, endLimit)
}

return Object.values(mergedLinks)
return values;
}

async createPrologFacts(): Promise<string> {
Expand Down
2 changes: 1 addition & 1 deletion src/core/RuntimeService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const FRIENDS_FILE = "friends.json"
const OUTBOX_FILE = "outbox.json"

const PERSPECT3VISM_AGENT = "did:key:zQ3shkkuZLvqeFgHdgZgFMUx8VGkgVWsLA83w2oekhZxoCW2n"
const SOCIAL_CONTEXT_OFFICIAL = "QmfDoeJgiG5Hs4DJcwPqDWbwU2Ks8zLSJjv7bR8is84Qt5"
const SOCIAL_CONTEXT_OFFICIAL = "QmUvSpKxCnychotba2pVCufCNFSmr5Tj8e9qqdZkpuuxWt"

function _add(items: string[], file: string): void {
let all: string[];
Expand Down
8 changes: 4 additions & 4 deletions src/tests/language.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export default function languageTests(testContext: TestContext) {
)
expect(sourceLanguage.name).toBe("Newly published social-context");
//TODO/NOTE: this will break if the social-context language version is changed
expect(sourceLanguage.address).toBe("QmfDoeJgiG5Hs4DJcwPqDWbwU2Ks8zLSJjv7bR8is84Qt5");
expect(sourceLanguage.address).toBe("QmUvSpKxCnychotba2pVCufCNFSmr5Tj8e9qqdZkpuuxWt");
})

it('Alice can get the source of her own templated language', async () => {
Expand Down Expand Up @@ -51,7 +51,7 @@ export default function languageTests(testContext: TestContext) {
const sourceLanguageMetaData = JSON.parse(sourceLanguageMeta.data);
expect(sourceLanguageMetaData.name).toBe("Newly published social-context")
expect(sourceLanguageMetaData.description).toBe("..here for you template")
expect(sourceLanguageMetaData.address).toBe("QmfDoeJgiG5Hs4DJcwPqDWbwU2Ks8zLSJjv7bR8is84Qt5")
expect(sourceLanguageMetaData.address).toBe("QmUvSpKxCnychotba2pVCufCNFSmr5Tj8e9qqdZkpuuxWt")
})

it('can publish and template a non-Holochain language and provide correct meta data', async() => {
Expand Down Expand Up @@ -108,7 +108,7 @@ export default function languageTests(testContext: TestContext) {
//Apply template on above holochain language
applyTemplateFromSource = await bobAd4mClient.languages.applyTemplateAndPublish(sourceLanguage.address, JSON.stringify({uid: "2eebb82b-9db1-401b-ba04-1e8eb78ac84c", name: "Bob's templated social-context"}))
expect(applyTemplateFromSource.name).toBe("Bob's templated social-context");
expect(applyTemplateFromSource.address).toBe("QmUosE5MEVAfV48TFwfrXNoRRy4GNeB2eopfBFBGqrmB3f");
expect(applyTemplateFromSource.address).toBe("QmWGSeNRZqNfpmrbuWUvRHZ4yp2BWLg4jkaG4Pc8TvLWdP");

//Get language meta for above language and make sure it is correct
const langExpr = await bobAd4mClient.expression.get(`lang://${applyTemplateFromSource.address}`);
Expand All @@ -121,7 +121,7 @@ export default function languageTests(testContext: TestContext) {
"name": "Bob's templated social-context",
"uid":"2eebb82b-9db1-401b-ba04-1e8eb78ac84c"
}))
expect(meta.address).toBe("QmUosE5MEVAfV48TFwfrXNoRRy4GNeB2eopfBFBGqrmB3f")
expect(meta.address).toBe("QmWGSeNRZqNfpmrbuWUvRHZ4yp2BWLg4jkaG4Pc8TvLWdP")
expect(meta.templateSourceLanguageAddress).toBe(sourceLanguage.address)

await ad4mClient.runtime.addTrustedAgents([(await ad4mClient.agent.me()).did]);
Expand Down
27 changes: 24 additions & 3 deletions src/tests/perspective.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,29 @@ export default function perspectiveTests(testContext: TestContext) {

let addLink = await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target", predicate: "lang://predicate"}));
let addLink2 = await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target2", predicate: "lang://predicate"}));
await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target3", predicate: "lang://predicate"}));
await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target4", predicate: "lang://predicate"}));
await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target5", predicate: "lang://predicate"}));
let addLink3 = await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target3", predicate: "lang://predicate"}));
let addLink4 = await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target4", predicate: "lang://predicate"}));
let addLink5 = await ad4mClient!.perspective.addLink(create.uuid, new Link({source: "lang://test", target: "lang://test-target5", predicate: "lang://predicate"}));

// Get all the links
let queryLinksAll = await ad4mClient!.perspective.queryLinks(create.uuid, new LinkQuery({source: "lang://test", fromDate: new Date(new Date(addLink.timestamp).getTime()), untilDate: new Date()}));
expect(queryLinksAll.length).toEqual(5);


// Get all the links in ascending order
let queryLinksAsc = await ad4mClient!.perspective.queryLinks(create.uuid, new LinkQuery({source: "lang://test", fromDate: new Date(), untilDate: new Date("August 19, 1975 23:15:30"), limit: 3}));
expect(queryLinksAsc.length).toEqual(3);
expect(queryLinksAsc[0].data.target).toBe(addLink3.data.target)
expect(queryLinksAsc[1].data.target).toBe(addLink4.data.target)
expect(queryLinksAsc[2].data.target).toBe(addLink5.data.target)

// Get all the links in ascending order
let queryLinksDesc = await ad4mClient!.perspective.queryLinks(create.uuid, new LinkQuery({source: "lang://test", fromDate: new Date("August 19, 1975 23:15:30"), untilDate: new Date(), limit: 3}));
expect(queryLinksDesc.length).toEqual(3);
expect(queryLinksDesc[0].data.target).toBe(addLink.data.target)
expect(queryLinksDesc[1].data.target).toBe(addLink2.data.target)
expect(queryLinksDesc[2].data.target).toBe(addLink3.data.target)


//Test can get all links but first by querying from second timestamp
let queryLinks = await ad4mClient!.perspective.queryLinks(create.uuid, new LinkQuery({source: "lang://test", fromDate: new Date(new Date(addLink2.timestamp).getTime() - 1), untilDate: new Date()}));
Expand Down Expand Up @@ -142,6 +162,7 @@ export default function perspectiveTests(testContext: TestContext) {
expect(pSeenInUpdateCB.name).toStrictEqual(p1.name)

const linkAdded = jest.fn()
// TODO: @fayeed update this
await ad4mClient.perspective.addPerspectiveLinkAddedListener(p1.uuid, [linkAdded])
const linkRemoved = jest.fn()
await ad4mClient.perspective.addPerspectiveLinkRemovedListener(p1.uuid, [linkRemoved])
Expand Down
2 changes: 1 addition & 1 deletion src/tests/runtime.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { TestContext } from './integration.test'

const PERSPECT3VISM_AGENT = "did:key:zQ3shkkuZLvqeFgHdgZgFMUx8VGkgVWsLA83w2oekhZxoCW2n"
const SOCIAL_CONTEXT_OFFICIAL = "QmfDoeJgiG5Hs4DJcwPqDWbwU2Ks8zLSJjv7bR8is84Qt5"
const SOCIAL_CONTEXT_OFFICIAL = "QmUvSpKxCnychotba2pVCufCNFSmr5Tj8e9qqdZkpuuxWt"

export default function runtimeTests(testContext: TestContext) {
return () => {
Expand Down
Loading

0 comments on commit 4f0c357

Please sign in to comment.