Skip to content

Commit 51eca53

Browse files
authored
Add test for updating link property (#1118)
1 parent 227f125 commit 51eca53

File tree

2 files changed

+79
-1
lines changed

2 files changed

+79
-1
lines changed

docs/update.rst

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,53 @@ In the query builder this is represented with the following syntax.
117117
}
118118
}))
119119
120+
**Updating a single link property**
121+
122+
.. code-block:: typescript
123+
124+
e.update(e.Movie, (movie) => ({
125+
filter_single: { title: "The Eternals" },
126+
set: {
127+
actors: {
128+
"+=": e.select(movie.actors, (actor) => ({
129+
"@character_name": e.str("Sersi"),
130+
filter: e.op(actor.name, "=", "Gemma Chan")
131+
}))
132+
}
133+
}
134+
}));
135+
136+
**Updating many link properties**
137+
138+
.. code-block:: typescript
139+
140+
const q = e.params(
141+
{
142+
cast: e.array(e.tuple({ name: e.str, character_name: e.str })),
143+
},
144+
(params) =>
145+
e.update(e.Movie, (movie) => ({
146+
filter_single: { title: "The Eternals" },
147+
set: {
148+
actors: {
149+
"+=": e.for(e.array_unpack(params.cast), (cast) =>
150+
e.select(movie.characters, (character) => ({
151+
"@character_name": cast.character_name,
152+
filter: e.op(cast.name, "=", character.name),
153+
})),
154+
),
155+
},
156+
},
157+
})),
158+
).run(client, {
159+
cast: [
160+
{ name: "Gemma Chan", character_name: "Sersi" },
161+
{ name: "Richard Madden", character_name: "Ikaris" },
162+
{ name: "Angelina Jolie", character_name: "Thena" },
163+
{ name: "Salma Hayek", character_name: "Ajak" },
164+
],
165+
});
166+
120167
Bulk updates
121168
^^^^^^^^^^^^
122169

integration-tests/lts/update.test.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,10 +132,41 @@ describe("update", () => {
132132
}));
133133
await q2.run(client);
134134

135+
const theAvengersCast: { name: string; character_name: string }[] = [
136+
{ name: data.iron_man.name, character_name: "Tony Stark!" },
137+
{ name: data.cap.name, character_name: "Steve Rogers!" },
138+
{ name: data.thanos.name, character_name: "Thanos!" },
139+
];
140+
141+
const q2CharName = e.params(
142+
{ cast: e.array(e.tuple({ name: e.str, character_name: e.str })) },
143+
(params) =>
144+
e.update(theAvengers, (m) => ({
145+
set: {
146+
characters: {
147+
"+=": e.for(e.array_unpack(params.cast), (cast) =>
148+
e.select(m.characters, (c) => ({
149+
"@character_name": cast.character_name,
150+
filter: e.op(c.name, "=", cast.name),
151+
})),
152+
),
153+
},
154+
},
155+
})),
156+
);
157+
await q2CharName.run(client, { cast: theAvengersCast });
158+
135159
const t2 = await e
136-
.select(theAvengers, () => ({ id: true, characters: true }))
160+
.select(theAvengers, () => ({
161+
id: true,
162+
characters: () => ({ "@character_name": true, name: true }),
163+
}))
137164
.run(client);
138165
assert.equal(t2?.characters.length, 3);
166+
const charSet = new Set(t2.characters.map((c) => c["@character_name"]));
167+
assert.ok(charSet.has("Thanos!"));
168+
assert.ok(charSet.has("Tony Stark!"));
169+
assert.ok(charSet.has("Steve Rogers!"));
139170

140171
await e
141172
.update(theAvengers, () => ({

0 commit comments

Comments
 (0)