Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: [CO-1914] original sender missing from cc #840

Merged
merged 15 commits into from
Mar 24, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
feat: add unit tests for getAvailableAddresses function and improve d…
…ocumentation
keshavbhatt committed Mar 24, 2025
commit d2196ba8dfc64e33dfdcc4d9a7abe03ba170b72f
7 changes: 6 additions & 1 deletion src/helpers/get-available-addresses.ts
Original file line number Diff line number Diff line change
@@ -10,7 +10,12 @@ import { AvailableAddress } from '../carbonio-ui-commons/types/identities';
import { NO_ACCOUNT_NAME } from '../constants';

/**
* Returns the list of all the available addresses for the account and their type
* Retrieves the available email addresses for the user, including:
* - Primary account email
* - Email aliases
* - Delegated email addresses (with `sendAs` or `sendOnBehalfOf` rights)
*
* @returns {Array<AvailableAddress>} An array of available email addresses with their types and owner accounts.
*/
export const getAvailableAddresses = (): Array<AvailableAddress> => {
const account = getUserAccount();
175 changes: 175 additions & 0 deletions src/helpers/tests/get-available-addresses.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
/*
* SPDX-FileCopyrightText: 2025 Zextras <https://www.zextras.com>
*
* SPDX-License-Identifier: AGPL-3.0-only
*/

import { getUserAccount, getUserSettings } from '@zextras/carbonio-shell-ui';

import { NO_ACCOUNT_NAME } from '../../constants';
import { getAvailableAddresses } from '../get-available-addresses';

jest.mock('@zextras/carbonio-shell-ui', () => ({
getUserAccount: jest.fn(),
getUserSettings: jest.fn()
}));

describe('getAvailableAddresses', () => {
const primaryAccountAddress = 'primary@example.com';
it('should return primary account address when defined', () => {
(getUserAccount as jest.Mock).mockReturnValue({ name: primaryAccountAddress });
(getUserSettings as jest.Mock).mockReturnValue({ attrs: {} });

const result = getAvailableAddresses();

expect(result).toEqual([
{ address: primaryAccountAddress, type: 'primary', ownerAccount: primaryAccountAddress }
]);
});

it('should return primary account address with no account name(NO_ACCOUNT_NAME) when account is null', () => {
(getUserAccount as jest.Mock).mockReturnValue(null);
(getUserSettings as jest.Mock).mockReturnValue({ attrs: {} });

const result = getAvailableAddresses();

expect(result).toEqual([
{ address: NO_ACCOUNT_NAME, type: 'primary', ownerAccount: NO_ACCOUNT_NAME }
]);
});

it('should return primary account address and aliases when they are defined in zimbraMailAlias', () => {
(getUserAccount as jest.Mock).mockReturnValue({ name: primaryAccountAddress });
(getUserSettings as jest.Mock).mockReturnValue({
attrs: { zimbraMailAlias: ['alias1@example.com', 'alias2@example.com'] }
});

const result = getAvailableAddresses();

expect(result).toEqual([
{ address: primaryAccountAddress, type: 'primary', ownerAccount: primaryAccountAddress },
{ address: 'alias1@example.com', type: 'alias', ownerAccount: primaryAccountAddress },
{ address: 'alias2@example.com', type: 'alias', ownerAccount: primaryAccountAddress }
]);
});

it('should return primary account address and single alias when only one is defined in zimbraMailAlias', () => {
(getUserAccount as jest.Mock).mockReturnValue({ name: primaryAccountAddress });
(getUserSettings as jest.Mock).mockReturnValue({
attrs: { zimbraMailAlias: 'alias@example.com' }
});

const result = getAvailableAddresses();

expect(result).toEqual([
{ address: primaryAccountAddress, type: 'primary', ownerAccount: primaryAccountAddress },
{ address: 'alias@example.com', type: 'alias', ownerAccount: primaryAccountAddress }
]);
});

it('should return primary account address and delegation addresses when the delegation rights are defined', () => {
(getUserAccount as jest.Mock).mockReturnValue({
name: primaryAccountAddress,
rights: {
targets: [
{
right: 'sendAs',
target: [{ type: 'account', email: [{ addr: 'delegation1@example.com' }] }]
},
{
right: 'sendOnBehalfOf',
target: [{ type: 'account', email: [{ addr: 'delegation2@example.com' }] }]
}
]
}
});
(getUserSettings as jest.Mock).mockReturnValue({ attrs: {} });

const result = getAvailableAddresses();

expect(result).toEqual([
{ address: primaryAccountAddress, type: 'primary', ownerAccount: primaryAccountAddress },
{
address: 'delegation1@example.com',
type: 'delegation',
right: 'sendAs',
ownerAccount: 'delegation1@example.com'
},
{
address: 'delegation2@example.com',
type: 'delegation',
right: 'sendOnBehalfOf',
ownerAccount: 'delegation2@example.com'
}
]);
});

it('should return primary account address, aliases, and delegation addresses', () => {
(getUserAccount as jest.Mock).mockReturnValue({
name: primaryAccountAddress,
rights: {
targets: [
{
right: 'sendAs',
target: [
{ type: 'account', email: [{ addr: 'delegation1@example.com' }] },
{ type: 'account', email: [{ addr: 'delegation2@example.com' }] }
]
}
]
}
});
(getUserSettings as jest.Mock).mockReturnValue({
attrs: { zimbraMailAlias: ['alias1@example.com', 'alias2@example.com'] }
});

const result = getAvailableAddresses();

expect(result).toEqual([
{ address: primaryAccountAddress, type: 'primary', ownerAccount: primaryAccountAddress },
{ address: 'alias1@example.com', type: 'alias', ownerAccount: primaryAccountAddress },
{ address: 'alias2@example.com', type: 'alias', ownerAccount: primaryAccountAddress },
{
address: 'delegation1@example.com',
type: 'delegation',
right: 'sendAs',
ownerAccount: 'delegation1@example.com'
},
{
address: 'delegation2@example.com',
type: 'delegation',
right: 'sendAs',
ownerAccount: 'delegation2@example.com'
}
]);
});

it('should return primary account address and no delegation addresses when the delegation rights are different then sendAs and sendOnBehalfOf', () => {
(getUserAccount as jest.Mock).mockReturnValue({
name: primaryAccountAddress,
rights: {
targets: [
{
right: 'sendAsDistList',
target: [{ type: 'account', email: [{ addr: 'delegation1@example.com' }] }]
},
{
right: 'viewFreeBusy',
target: [{ type: 'account', email: [{ addr: 'delegation2@example.com' }] }]
},
{
right: 'sendOnBehalfOfDistList',
target: [{ type: 'account', email: [{ addr: 'delegation3@example.com' }] }]
}
]
}
});
(getUserSettings as jest.Mock).mockReturnValue({ attrs: {} });

const result = getAvailableAddresses();

expect(result).toEqual([
{ address: primaryAccountAddress, type: 'primary', ownerAccount: primaryAccountAddress }
]);
});
});
2 changes: 1 addition & 1 deletion src/helpers/tests/identities.test.ts
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ import { faker } from '@faker-js/faker';

import { FOLDERS } from '../../carbonio-ui-commons/constants/folders';
import { ParticipantRole } from '../../carbonio-ui-commons/constants/participants';
import { getRootsMap } from '../../carbonio-ui-commons/store/zustand/folder/hooks';
import { getRootsMap } from '../../carbonio-ui-commons/store/zustand/folder';
import { populateFoldersStore } from '../../carbonio-ui-commons/test/mocks/store/folders';
import { getMocksContext } from '../../carbonio-ui-commons/test/mocks/utils/mocks-context';
import { generateMessage } from '../../tests/generators/generateMessage';