Changes
4 changed files (+124/-22)
-
-
@@ -0,0 +1,58 @@// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only import { describe, expect, test } from "bun:test"; import * as proto from "@bufbuild/protobuf"; import { WorkRecordReadMaskSchema } from "@yamori/proto/yamori/work_record/v1/work_record_read_mask_pb.js"; import { packDate } from "../../../helpers"; import { build } from "./work_record"; describe("build", () => { test("Should assign default mask fields even if child mask is present", async () => { expect( build( { recordId: "foo", workspaceId: "ws-foo", workerId: "wr-foo", datePacked: packDate({ year: 2020, month: 1, day: 1, }), record: { type: "working_day", hasWorked: true, timeOffs: [], }, }, { workspace: { id: "ws-foo", displayName: "Foo", capabilities: { updateKey: new Uint8Array([]), deletionKey: new Uint8Array([]), workerAddKey: new Uint8Array([]), createLeaveDefinitionKey: new Uint8Array([]), }, leaveDefinitions: [], updatedAt: Date.now(), }, mask: proto.create(WorkRecordReadMaskSchema, { legalLeaveReadMask: {}, }), }, ), ).toMatchObject({ date: { year: 2020, month: 1, day: 1, }, }); }); });
-
-
-
@@ -254,15 +254,12 @@ }export function build( entry: YamoriDB["workRecords"]["value"], { workspace, mask: { fields = WorkRecordSchema.fields.map((field) => field.number), legalLeaveReadMask, specialLeaveReadMask, } = {}, }: BuildInput, { workspace, mask = {} }: BuildInput, ): proto.MessageShape<typeof WorkRecordSchema> { const fields = mask.fields?.length ? mask.fields : WorkRecordSchema.fields.map((field) => field.number); const init: proto.MessageInitShape<typeof WorkRecordSchema> = {}; for (const field of fields) {
-
@@ -347,7 +344,7 @@ init.record = found && {case: "legalLeave", value: leave.build(found, { date: unpackDate(entry.datePacked), mask: legalLeaveReadMask, mask: mask.legalLeaveReadMask, }), }; }
-
@@ -362,7 +359,7 @@ init.record = found && {case: "specialLeave", value: leave.build(found, { date: unpackDate(entry.datePacked), mask: specialLeaveReadMask, mask: mask.specialLeaveReadMask, }), }; }
-
-
-
@@ -0,0 +1,52 @@// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com> // SPDX-License-Identifier: AGPL-3.0-only import { describe, expect, test } from "bun:test"; import * as proto from "@bufbuild/protobuf"; import { WorkerReadMaskSchema } from "@yamori/proto/yamori/worker/v1/worker_read_mask_pb.js"; import { build } from "./worker"; describe("build", () => { test("Should assign default mask fields even if child mask is present", async () => { expect( await build( { id: "wr-foo", displayName: "Foo", workspaceId: "ws-foo", writeWorkRecordKey: new Uint8Array([]), providePaidLeaveKey: new Uint8Array([]), createdAt: Date.now(), updatedAt: Date.now(), }, { workspace: { id: "ws-foo", displayName: "Foo", capabilities: { updateKey: new Uint8Array([]), deletionKey: new Uint8Array([]), workerAddKey: new Uint8Array([]), createLeaveDefinitionKey: new Uint8Array([]), }, leaveDefinitions: [], updatedAt: Date.now(), }, async getWorkRecords() { return []; }, async getPaidLeaveProvisions() { return []; }, mask: proto.create(WorkerReadMaskSchema, { workRecordsMask: {}, }), }, ), ).toMatchObject({ id: { value: "wr-foo" }, }); }); });
-
-
-
@@ -40,17 +40,12 @@ }export async function build( entry: YamoriDB["workers"]["value"], { workspace, getWorkRecords, getPaidLeaveProvisions, mask: { fields = WorkerSchema.fields.map((field) => field.number), workRecordsMask, paidLeaveProvisionsMask, } = {}, }: BuildInput, { workspace, getWorkRecords, getPaidLeaveProvisions, mask = {} }: BuildInput, ): Promise<proto.MessageShape<typeof WorkerSchema>> { const fields = mask.fields?.length ? mask.fields : WorkerSchema.fields.map((field) => field.number); const init: proto.MessageInitShape<typeof WorkerSchema> = {}; for (const field of fields) {
-
@@ -70,7 +65,7 @@init.workRecords = records.map((r) => workRecord.build(r, { workspace, mask: workRecordsMask, mask: mask.workRecordsMask, }), ); break;
-
@@ -84,7 +79,7 @@init.paidLeaveProvisions = await Promise.all( provisions.map((p) => paidLeaveProvision.build(p, { mask: paidLeaveProvisionsMask, mask: mask.paidLeaveProvisionsMask, }), ), );
-