[#397] Consider the calendar owner as the organizer when no organizer (#416)

Co-authored-by: Camille Moussu <cmoussu@linagora.com>
This commit is contained in:
Camille Moussu
2025-12-12 18:00:27 +01:00
committed by GitHub
parent 1de59f3794
commit d68b4146d3
2 changed files with 66 additions and 19 deletions
@@ -90,6 +90,12 @@ describe("Event Preview Display", () => {
end: day.toISOString(),
organizer: { cn: "test", cal_address: "test@test.com" },
},
event4: {
uid: "event4",
calId: "667037022b752d0026472254/cal1",
start: day.toISOString(),
end: day.toISOString(),
},
},
ownerEmails: ["test@test.com"],
},
@@ -106,6 +112,12 @@ describe("Event Preview Display", () => {
end: day.toISOString(),
organizer: { cn: "john", cal_address: "john@test.com" },
},
event2: {
uid: "event2",
calId: "otherCal/cal",
start: day.toISOString(),
end: day.toISOString(),
},
},
},
},
@@ -532,6 +544,39 @@ describe("Event Preview Display", () => {
const updatedEvent = spy.mock.calls[0][0].newEvent;
expect(updatedEvent.attendee[0].partstat).toBe("DECLINED");
});
it("handles Edit click when is own but with no organizer", async () => {
renderWithProviders(
<EventPreviewModal
open={true}
onClose={mockOnClose}
calId={"667037022b752d0026472254/cal1"}
eventId={"event4"}
/>,
preloadedState
);
fireEvent.click(screen.getByTestId("EditIcon"));
await waitFor(() => {
expect(screen.getByText("event.updateEvent")).toBeInTheDocument();
});
});
it("doesnt show edit button when is not own and with no organizer", async () => {
renderWithProviders(
<EventPreviewModal
open={true}
onClose={mockOnClose}
calId={"otherCal/cal"}
eventId={"event2"}
/>,
preloadedState
);
await waitFor(() => {
expect(screen.queryByTestId("EditIcon")).not.toBeInTheDocument();
});
});
it("handles Edit click", async () => {
renderWithProviders(
<EventPreviewModal
+21 -19
View File
@@ -81,6 +81,9 @@ export default function EventPreviewModal({
const isRecurring = event?.uid?.includes("/");
const isOwn = calendar.ownerEmails?.includes(user.userData.email);
const isOrganizer = event.organizer
? user.userData.email === event.organizer.cal_address
: isOwn;
const [showAllAttendees, setShowAllAttendees] = useState(false);
const [openUpdateModal, setOpenUpdateModal] = useState(false);
const [openDuplicateModal, setOpenDuplicateModal] = useState(false);
@@ -324,26 +327,25 @@ export default function EventPreviewModal({
<FileDownloadOutlinedIcon />
</IconButton>
)}
{user.userData.email === event.organizer?.cal_address &&
calendar.ownerEmails?.includes(user.userData.email) && (
<IconButton
size="small"
onClick={() => {
if (isRecurring) {
setAfterChoiceFunc(() => () => {
setHidePreview(true);
setOpenUpdateModal(true);
});
setOpenEditModePopup("edit");
} else {
{isOrganizer && isOwn && (
<IconButton
size="small"
onClick={() => {
if (isRecurring) {
setAfterChoiceFunc(() => () => {
setHidePreview(true);
setOpenUpdateModal(true);
}
}}
>
<EditIcon />
</IconButton>
)}
});
setOpenEditModePopup("edit");
} else {
setHidePreview(true);
setOpenUpdateModal(true);
}
}}
>
<EditIcon />
</IconButton>
)}
{((event.class !== "PRIVATE" && !isOwn) || isOwn) && (
<IconButton
size="small"
@@ -380,7 +382,7 @@ export default function EventPreviewModal({
setOpenDuplicateModal(true);
}}
/>
{user.userData.email === event.organizer?.cal_address && (
{isOrganizer && (
<MenuItem
onClick={async () => {
if (isRecurring) {