diff --git a/webapp/channels/src/components/profile_popover/profile_popover_email.test.tsx b/webapp/channels/src/components/profile_popover/profile_popover_email.test.tsx new file mode 100644 index 0000000000..05674f3eeb --- /dev/null +++ b/webapp/channels/src/components/profile_popover/profile_popover_email.test.tsx @@ -0,0 +1,73 @@ +// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. +// See LICENSE.txt for license information. + +import {screen, fireEvent} from '@testing-library/react'; +import React from 'react'; + +import {renderWithContext} from 'tests/react_testing_utils'; + +import ProfilePopoverEmail from './profile_popover_email'; + +// Mock window.open +const mockWindowOpen = jest.fn(); +Object.defineProperty(window, 'open', { + writable: true, + value: mockWindowOpen, +}); + +describe('components/ProfilePopoverEmail', () => { + const baseProps = { + email: 'test@example.com', + haveOverrideProp: false, + isBot: false, + }; + + beforeEach(() => { + mockWindowOpen.mockClear(); + }); + + test('should not render when email is empty', () => { + const props = { + ...baseProps, + email: '', + }; + const {container} = renderWithContext(); + expect(container.firstChild).toBeNull(); + }); + + test('should handle different email formats', () => { + const props = { + ...baseProps, + email: 'user.name+tag@domain.co.uk', + }; + renderWithContext(); + + const email = 'user.name+tag@domain.co.uk'; + const emailLink = screen.getByText(email); + expect(emailLink).toBeInTheDocument(); + expect(emailLink.tagName).toBe('A'); + }); + + test('should open email client when clicked', () => { + renderWithContext(); + + const email = 'test@example.com'; + const emailLink = screen.getByText(email); + + fireEvent.click(emailLink); + + expect(mockWindowOpen).toHaveBeenCalledWith('mailto:test@example.com'); + }); + + test('should prevent default click behavior', () => { + renderWithContext(); + + const email = 'test@example.com'; + const emailLink = screen.getByText(email); + + const clickEvent = fireEvent.click(emailLink); + + expect(clickEvent).toBe(false); // fireEvent.click returns false when preventDefault was called + expect(mockWindowOpen).toHaveBeenCalledWith('mailto:test@example.com'); + }); +}); diff --git a/webapp/channels/src/components/profile_popover/profile_popover_email.tsx b/webapp/channels/src/components/profile_popover/profile_popover_email.tsx index 3cbc1cfc01..1406bfec24 100644 --- a/webapp/channels/src/components/profile_popover/profile_popover_email.tsx +++ b/webapp/channels/src/components/profile_popover/profile_popover_email.tsx @@ -17,6 +17,11 @@ const ProfilePopoverEmail = ({ return null; } + function handleEmailClick(e: React.MouseEvent) { + e.preventDefault(); + window.open(`mailto:${email}`); + } + return (