[#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(), end: day.toISOString(),
organizer: { cn: "test", cal_address: "test@test.com" }, organizer: { cn: "test", cal_address: "test@test.com" },
}, },
event4: {
uid: "event4",
calId: "667037022b752d0026472254/cal1",
start: day.toISOString(),
end: day.toISOString(),
},
}, },
ownerEmails: ["test@test.com"], ownerEmails: ["test@test.com"],
}, },
@@ -106,6 +112,12 @@ describe("Event Preview Display", () => {
end: day.toISOString(), end: day.toISOString(),
organizer: { cn: "john", cal_address: "john@test.com" }, 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; const updatedEvent = spy.mock.calls[0][0].newEvent;
expect(updatedEvent.attendee[0].partstat).toBe("DECLINED"); 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 () => { it("handles Edit click", async () => {
renderWithProviders( renderWithProviders(
<EventPreviewModal <EventPreviewModal
+21 -19
View File
@@ -81,6 +81,9 @@ export default function EventPreviewModal({
const isRecurring = event?.uid?.includes("/"); const isRecurring = event?.uid?.includes("/");
const isOwn = calendar.ownerEmails?.includes(user.userData.email); 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 [showAllAttendees, setShowAllAttendees] = useState(false);
const [openUpdateModal, setOpenUpdateModal] = useState(false); const [openUpdateModal, setOpenUpdateModal] = useState(false);
const [openDuplicateModal, setOpenDuplicateModal] = useState(false); const [openDuplicateModal, setOpenDuplicateModal] = useState(false);
@@ -324,26 +327,25 @@ export default function EventPreviewModal({
<FileDownloadOutlinedIcon /> <FileDownloadOutlinedIcon />
</IconButton> </IconButton>
)} )}
{user.userData.email === event.organizer?.cal_address && {isOrganizer && isOwn && (
calendar.ownerEmails?.includes(user.userData.email) && ( <IconButton
<IconButton size="small"
size="small" onClick={() => {
onClick={() => { if (isRecurring) {
if (isRecurring) { setAfterChoiceFunc(() => () => {
setAfterChoiceFunc(() => () => {
setHidePreview(true);
setOpenUpdateModal(true);
});
setOpenEditModePopup("edit");
} else {
setHidePreview(true); setHidePreview(true);
setOpenUpdateModal(true); setOpenUpdateModal(true);
} });
}} setOpenEditModePopup("edit");
> } else {
<EditIcon /> setHidePreview(true);
</IconButton> setOpenUpdateModal(true);
)} }
}}
>
<EditIcon />
</IconButton>
)}
{((event.class !== "PRIVATE" && !isOwn) || isOwn) && ( {((event.class !== "PRIVATE" && !isOwn) || isOwn) && (
<IconButton <IconButton
size="small" size="small"
@@ -380,7 +382,7 @@ export default function EventPreviewModal({
setOpenDuplicateModal(true); setOpenDuplicateModal(true);
}} }}
/> />
{user.userData.email === event.organizer?.cal_address && ( {isOrganizer && (
<MenuItem <MenuItem
onClick={async () => { onClick={async () => {
if (isRecurring) { if (isRecurring) {