Skip to content

Commit 33867b1

Browse files
committed
contacts: prepare update operation to add contat to group
1 parent 3fafcc3 commit 33867b1

2 files changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { addContactToGroup } from "./addContactToGroup";
2+
import { ContactQuery } from "../queries";
3+
import { GroupQuery } from "../queries/GroupQuery";
4+
import { lit, st, sym } from "rdflib";
5+
import { vcard } from "../namespaces";
6+
7+
describe("addContactToGroup", () => {
8+
it("adds the contact as a group member", () => {
9+
const contactNode = sym("https://pod.test/contact#this");
10+
const groupNode = sym("https://pod.test/group#this");
11+
12+
const result = addContactToGroup(
13+
{ contactNode, queryName: () => "any" } as ContactQuery,
14+
{ groupNode } as GroupQuery,
15+
);
16+
expect(result.insertions).toContainEqual(
17+
st(groupNode, vcard("hasMember"), contactNode, groupNode.doc()),
18+
);
19+
});
20+
21+
it("adds the contact name to the group document", () => {
22+
const contactNode = sym("https://pod.test/contact#this");
23+
const groupNode = sym("https://pod.test/group#this");
24+
25+
const result = addContactToGroup(
26+
{ contactNode, queryName: () => "Alice" } as ContactQuery,
27+
{ groupNode } as GroupQuery,
28+
);
29+
expect(result.insertions).toContainEqual(
30+
st(contactNode, vcard("fn"), lit("Alice"), groupNode.doc()),
31+
);
32+
});
33+
34+
it("does not delete anything", () => {
35+
const contactNode = sym("https://pod.test/contact#this");
36+
const groupNode = sym("https://pod.test/group#this");
37+
38+
const result = addContactToGroup(
39+
{ contactNode, queryName: () => "any" } as ContactQuery,
40+
{ groupNode } as GroupQuery,
41+
);
42+
expect(result.deletions).toEqual([]);
43+
});
44+
45+
it("does not create any files", () => {
46+
const contactNode = sym("https://pod.test/contact#this");
47+
const groupNode = sym("https://pod.test/group#this");
48+
49+
const result = addContactToGroup(
50+
{ contactNode, queryName: () => "any" } as ContactQuery,
51+
{ groupNode } as GroupQuery,
52+
);
53+
expect(result.filesToCreate).toEqual([]);
54+
});
55+
});
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { ContactQuery } from "../queries";
2+
import { GroupQuery } from "../queries/GroupQuery";
3+
import { UpdateOperation } from "./index";
4+
import { lit, st } from "rdflib";
5+
import { vcard } from "../namespaces";
6+
7+
export function addContactToGroup(
8+
contactQuery: ContactQuery,
9+
groupQuery: GroupQuery,
10+
): UpdateOperation {
11+
const name = contactQuery.queryName();
12+
return {
13+
uri: "",
14+
insertions: [
15+
st(
16+
groupQuery.groupNode,
17+
vcard("hasMember"),
18+
contactQuery.contactNode,
19+
groupQuery.groupNode.doc(),
20+
),
21+
st(
22+
contactQuery.contactNode,
23+
vcard("fn"),
24+
lit(name),
25+
groupQuery.groupNode.doc(),
26+
),
27+
],
28+
deletions: [],
29+
filesToCreate: [],
30+
};
31+
}

0 commit comments

Comments
 (0)