Committing to a resource no longer errors, its simply ignored

main
Jackson Morgan 8 months ago
parent bc9f10db0b
commit 483cd69db9
  1. 22
      packages/solid/src/SolidLdoTransactionDataset.ts
  2. 8
      packages/solid/src/requester/results/success/UpdateSuccess.ts
  3. 17
      packages/solid/test/Integration.test.ts

@ -18,6 +18,7 @@ import type { SolidLdoDataset } from "./SolidLdoDataset";
import type { AggregateSuccess } from "./requester/results/success/SuccessResult";
import type { ResourceResult } from "./resource/resourceResult/ResourceResult";
import type {
IgnoredInvalidUpdateSuccess,
UpdateDefaultGraphSuccess,
UpdateSuccess,
} from "./requester/results/success/UpdateSuccess";
@ -26,7 +27,6 @@ import type {
UpdateResult,
UpdateResultError,
} from "./requester/requests/updateDataResource";
import { InvalidUriError } from "./requester/results/error/InvalidUriError";
import type { DatasetChanges, GraphNode } from "@ldo/rdf-utils";
import { splitChangesByGraph } from "./util/splitChangesByGraph";
@ -112,7 +112,7 @@ export class SolidLdoTransactionDataset
| AggregateSuccess<
ResourceResult<UpdateSuccess | UpdateDefaultGraphSuccess, Leaf>
>
| AggregateError<UpdateResultError | InvalidUriError>
| AggregateError<UpdateResultError>
> {
const changes = this.getChanges();
const changesByGraph = splitChangesByGraph(changes);
@ -123,7 +123,7 @@ export class SolidLdoTransactionDataset
const results: [
GraphNode,
DatasetChanges<Quad>,
UpdateResult | InvalidUriError | UpdateDefaultGraphSuccess,
UpdateResult | IgnoredInvalidUpdateSuccess | UpdateDefaultGraphSuccess,
][] = await Promise.all(
Array.from(changesByGraph.entries()).map(
async ([graph, datasetChanges]) => {
@ -140,14 +140,13 @@ export class SolidLdoTransactionDataset
];
}
if (isContainerUri(graph.value)) {
console.log(datasetChanges.removed?.toString());
return [
graph,
datasetChanges,
new InvalidUriError(
graph.value,
`Container URIs are not allowed for custom data.`,
),
{
type: "ignoredInvalidUpdateSuccess",
isError: false,
} as IgnoredInvalidUpdateSuccess,
];
}
const resource = this.getResource(graph.value as LeafUri);
@ -162,9 +161,7 @@ export class SolidLdoTransactionDataset
if (errors.length > 0) {
return new AggregateError(
errors.map(
(result) => result[2] as UpdateResultError | InvalidUriError,
),
errors.map((result) => result[2] as UpdateResultError),
);
}
return {
@ -175,7 +172,8 @@ export class SolidLdoTransactionDataset
.filter(
(result): result is ResourceResult<UpdateSuccess, Leaf> =>
result.type === "updateSuccess" ||
result.type === "updateDefaultGraphSuccess",
result.type === "updateDefaultGraphSuccess" ||
result.type === "ignoredInvalidUpdateSuccess",
),
};
}

@ -14,3 +14,11 @@ export interface UpdateSuccess extends ResourceSuccess {
export interface UpdateDefaultGraphSuccess extends ResourceSuccess {
type: "updateDefaultGraphSuccess";
}
/**
* Indicates that LDO ignored an invalid update (usually because a container
* attempted an update)
*/
export interface IgnoredInvalidUpdateSuccess extends ResourceSuccess {
type: "ignoredInvalidUpdateSuccess";
}

@ -18,6 +18,7 @@ import {
import type { CreateSuccess } from "../src/requester/results/success/CreateSuccess";
import type { AggregateSuccess } from "../src/requester/results/success/SuccessResult";
import type {
IgnoredInvalidUpdateSuccess,
UpdateDefaultGraphSuccess,
UpdateSuccess,
} from "../src/requester/results/success/UpdateSuccess";
@ -1204,7 +1205,7 @@ describe("Integration", () => {
expect(aggregateError.errors[0].type).toBe("unexpectedResourceError");
});
it("errors when trying to update a container", async () => {
it("ignores update when trying to update a container", async () => {
const badContainerQuad = createQuad(
namedNode("http://example.org/#green-goblin"),
namedNode("http://xmlns.com/foaf/0.1/name"),
@ -1214,13 +1215,15 @@ describe("Integration", () => {
const transaction = solidLdoDataset.startTransaction();
transaction.add(badContainerQuad);
const result = await transaction.commitToPod();
expect(result.isError).toBe(true);
expect(result.type).toBe("aggregateError");
const aggregateError = result as AggregateError<
UpdateResultError | InvalidUriError
expect(result.isError).toBe(false);
expect(result.type).toBe("aggregateSuccess");
const aggregateSuccess = result as AggregateSuccess<
UpdateSuccess | IgnoredInvalidUpdateSuccess
>;
expect(aggregateError.errors.length).toBe(1);
expect(aggregateError.errors[0].type === "invalidUriError").toBe(true);
expect(aggregateSuccess.results.length).toBe(1);
expect(aggregateSuccess.results[0].type).toBe(
"ignoredInvalidUpdateSuccess",
);
});
it("writes to the default graph without fetching", async () => {

Loading…
Cancel
Save