Skip to content

Commit b03b84b

Browse files
committed
chats: insert message into message document for today
1 parent 42275c7 commit b03b84b

4 files changed

Lines changed: 67 additions & 3 deletions

File tree

chats/rdflib/src/module/ChatsModuleRdfLib.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import { createChat } from "./update-operations/index.js";
1818
import { ChatQuery } from "./queries/index.js";
1919
import { MessagesDocumentQuery } from "./queries/MessagesDocumentQuery.js";
2020
import { DateContainerQuery } from "./queries/DateContainerQuery.js";
21-
import { mintMessageUri } from './uris/index.js';
21+
import { mintMessageUri } from "./uris/index.js";
22+
import { postMessage } from './update-operations/post-message.js';
2223

2324
interface ModuleConfig {
2425
store: IndexedFormula;
@@ -103,6 +104,10 @@ export class ChatsModuleRdfLib implements ChatsModule {
103104

104105
// eslint-disable-next-line @typescript-eslint/no-unused-vars
105106
async postMessage({ chatUri }: PostMessageCommand): Promise<string> {
106-
return mintMessageUri(sym(chatUri));
107+
const chatNode = sym(chatUri);
108+
const messageUri = mintMessageUri(chatNode);
109+
const operation = postMessage(messageUri, chatNode);
110+
await executeUpdate(this.fetcher, this.updater, operation);
111+
return messageUri;
107112
}
108113
}

chats/rdflib/src/module/_integration-tests/post-message.integration.spec.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { setupModule } from "../../test-support/setupModule";
22
import { generateId } from "@solid-data-modules/rdflib-utils/identifier";
33
import { when } from "jest-when";
4-
import { mockTurtleDocument } from "@solid-data-modules/rdflib-utils/test-support";
4+
import {
5+
expectPatchRequest,
6+
mockNotFound,
7+
mockTurtleDocument,
8+
} from "@solid-data-modules/rdflib-utils/test-support";
59

610
jest.mock("@solid-data-modules/rdflib-utils/identifier");
711

@@ -29,6 +33,12 @@ describe("post message", () => {
2933
`,
3034
);
3135

36+
// but without message document for today
37+
mockNotFound(
38+
authenticatedFetch,
39+
"https://pod.test/alice/chats/abc123/2024/07/30/chat.ttl",
40+
);
41+
3242
// when a message is posted to the chat
3343
const uri = await chats.postMessage({
3444
chatUri: "https://pod.test/alice/chats/abc123/index.ttl#this",
@@ -42,5 +52,19 @@ describe("post message", () => {
4252
"https://pod.test/alice/chats/abc123/2024/07/30/chat.ttl#8c615b",
4353
),
4454
);
55+
56+
// and the message is inserted to the message document for today
57+
expectPatchRequest(
58+
authenticatedFetch,
59+
"https://pod.test/alice/chats/abc123/2024/07/30/chat.ttl",
60+
`@prefix solid: <http://www.w3.org/ns/solid/terms#>.
61+
@prefix ex: <http://www.example.org/terms#>.
62+
63+
_:patch
64+
65+
solid:inserts {
66+
<https://pod.test/alice/chats/abc123/index.ttl#this> <http://www.w3.org/2005/01/wf/flow#message> <https://pod.test/alice/chats/abc123/2024/07/30/chat.ttl#8c615b> .
67+
}; a solid:InsertDeletePatch .`,
68+
);
4569
});
4670
});
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { postMessage } from "./post-message";
2+
import { st, sym } from "rdflib";
3+
import { wf } from "../namespaces";
4+
5+
describe("post message", () => {
6+
it("inserts a link from chat to message", () => {
7+
const result = postMessage(
8+
"https://pod.test/chat/42/chat.ttl#1",
9+
sym("https://pod.test/chat/42/index.ttl#this"),
10+
);
11+
expect(result.insertions).toContainEqual(
12+
st(
13+
sym("https://pod.test/chat/42/index.ttl#this"),
14+
wf("message"),
15+
sym("https://pod.test/chat/42/chat.ttl#1"),
16+
sym("https://pod.test/chat/42/chat.ttl"),
17+
),
18+
);
19+
});
20+
});
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { NamedNode, st, sym } from "rdflib";
2+
import { UpdateOperation } from "@solid-data-modules/rdflib-utils";
3+
import { wf } from '../namespaces.js';
4+
5+
export function postMessage(
6+
messageUri: string,
7+
chatNode: NamedNode,
8+
): UpdateOperation {
9+
const messageNode = sym(messageUri);
10+
return {
11+
insertions: [st(chatNode, wf("message"), messageNode, messageNode.doc())],
12+
deletions: [],
13+
filesToCreate: [],
14+
};
15+
}

0 commit comments

Comments
 (0)