From c49413e7961fc4b93e4f90dc81148c8d6160a0b0 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste WATENBERG Date: Wed, 25 Sep 2024 14:00:30 +0200 Subject: [PATCH 1/3] Add on Error toast when failing to retrieve the role description --- .../ui-elements/SelectAccountIAMRole.tsx | 18 +- .../__tests__/SelectAccountIAMRole.test.tsx | 432 ++++++++++-------- 2 files changed, 263 insertions(+), 187 deletions(-) diff --git a/src/react/ui-elements/SelectAccountIAMRole.tsx b/src/react/ui-elements/SelectAccountIAMRole.tsx index 7d1ac58f1..1a1a88ec2 100644 --- a/src/react/ui-elements/SelectAccountIAMRole.tsx +++ b/src/react/ui-elements/SelectAccountIAMRole.tsx @@ -1,4 +1,10 @@ -import { Form, FormGroup, FormSection, Stack } from '@scality/core-ui'; +import { + Form, + FormGroup, + FormSection, + Stack, + useToast, +} from '@scality/core-ui'; import { Select } from '@scality/core-ui/dist/next'; import { IAM } from 'aws-sdk'; import { Bucket } from 'aws-sdk/clients/s3'; @@ -175,11 +181,21 @@ const SelectAccountIAMRoleWithAccount = ( const [account, setAccount] = useState(defaultAccount); const [role, setRole] = useState(null); const assumedRole = useAssumedRole(); + const { showToast } = useToast(); const getIAMRoleMutation = useMutation({ mutationFn: (roleName: string) => { return IAMClient.getRole(roleName); }, + onError: () => { + showToast({ + status: 'error', + open: true, + autoDismiss: false, + message: + "An error occured on our side while fetching the role's policy.", + }); + }, }); const accountName = account ? account.name : ''; diff --git a/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx b/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx index 5873f1b6e..426158341 100644 --- a/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx +++ b/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx @@ -15,204 +15,222 @@ import { getConfigOverlay, } from '../../../js/mock/managementClientMSWHandlers'; import { INSTANCE_ID } from '../../../react/actions/__tests__/utils/testUtil'; +import { ToastProvider } from '@scality/core-ui'; +import { coreUIAvailableThemes } from '@scality/core-ui/src/lib/style/theme'; +import { ThemeProvider } from 'styled-components'; const testAccountId1 = '064609833007'; const testAccountId2 = '377232323695'; -const genFn = (getPayloadFn: jest.Mock) => { - return rest.post(`${TEST_API_BASE_URL}/`, (req, res, ctx) => { - //@ts-ignore - const params = new URLSearchParams(req.body); - getPayloadFn(params); +const commonIAMHandlers = (getPayloadFn: jest.Mock, req, res, ctx) => { + //@ts-ignore + const params = new URLSearchParams(req.body); + getPayloadFn(params); - if (params.get('Action') === 'AssumeRoleWithWebIdentity') { - const accountId = extractAccountIdFromARN(params.get('RoleArn')); + if (params.get('Action') === 'AssumeRoleWithWebIdentity') { + const accountId = extractAccountIdFromARN(params.get('RoleArn')); - if (accountId === testAccountId1) { - return res( - ctx.status(200), - ctx.xml(` - - - - arn:aws:sts::${testAccountId1}:assumed-role/storage-manager-role/ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f - OES3SPDIYW4L92S8K1QE6MINE31LQG04:ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f - - - v/0Nq1YMw4nNbvtgQlgi0l6m/PXWjlk1VLmn2I5q - 72SPRZFF71WPWXXUG6XF - eyJzYWx0IjoicVIvVGdIdS9FVjJ4TjN5RmtXSnVLZGE0M0krK0g1L3lFVDU5UkV0enpYYz0iLCJ0YWciOiI4d05WRTIwTlQxWTVKbWtZemo2ZGJ3PT0iLCJjaXBoZXJ0ZXh0IjoiQVNIanI0M0VZc3dzK0QwWDFkVXRXQ2JMbzlFOVZ5SzF5WWt6a21lRjRXOUpCU3hwbmNxS21zWnpIU3ZvYlZEYjNKaDRNTm16bW1yVUd6dTU1bmRwMTk0eTVlVjFSVWMzaHZnSTFxZTRuYmJxNHBPdit5V3VZQ3RtSExUbE5BTHpDK3VhYW1tZDdzWk9BVXNKQlhRcmVHUG5sTFphb0kySTFveXJjbk10QlVpb1AvYnNjNUd6RHFqdTFWMjVQRE9PQWgzM2JFSktHdmorbEoyL2lWV0x5UHBQU1pLZmdZUnd1QjRXczdGaG81dHhaem9uWWhpaG9ocnFtdmFnNUJSNytiN2lGN3ZxZjBVSnFPZXI5Wm9ldDk1dlpqL01qTU04aGhGQXI1MmZnTHpzOHAzVlN3dHV0OENFSTBoVEJJNlVycUY4SWxiUmhFOUtlaHo0cnRiZHRKQzVmVHFRSkVPZWltb0RIbGpZZXZqOVlIZzZPVFhDR2ZhVzRIWDc3T0g5M1BRa0dHc1RCSjVpRTEyZEdYQjhYWWdSM1VackIwUzdQejdLQnpvSUVodTZOWUkrK1NPZ2pwMlFaUmhaWGtkbDdDdU5EMWg2UE9qN2twREY0QXhHbWdwcjBMbmpOdVp1UzJaWlJTck5OZG1WL3B5dWpUM3BtcFNJNUZkNW5Wby9SV1dTSGhoR0FVcWRJS0EyV00xdVJ2TkVFS25rb25keWNuVHRrSHpDVUwrN0RtTXNuL202eTcyZjFReHY2VFQyejRzRVFSUDFhWUcwdnBWSTlXbUpWdW5yTFFVNmxSUmpsb1VFSFVkZ2xCMGd1eTZGZTNYR29YQjdVc1J5UUpxbEJ0elpvdFdkR1AvSjZaMllNODFDSy8zZjJZTXVnNTZlbXQxTmJJZ0hrVWxnaGxpclRsNVdrckVRbG5XTW4zT2dzRk9wMjJKSTV1UGoxSENUMlNhTlBXZEQrY0VCcTZycC9tc1FDOW02Q3prSkMwTWMyclZ0RmdnZitaSEV5dVZvdEVzeUFtY1V5QTdFZzJtY3BXd1pnbHZrYkZQQmI5M2NDN0ZhZGhpNEUzQ0hQbm9BczF5eVNKNkxIOTZZTHJoaXk1Q1h3VWloSTlRdmxuSDNlV3EwaElBZTFGc2N6bThzVWRCTGU2SWlVc3ZJVDlpMjJzcTZnaVpmdld5czVlaU9NZzRQMFBaZCtPK0VDRmdmd3dxdUhYcFdEL1F5RnR1RENVb0xxblNyMU9lOHdCQ2lXNDFYaGtacmEzWTdtVW1QYXlNWTN6MXpOZm1XRllJV0dWZzlBNVFUaUZLWGlZTngxdUtWZGJ3Qk54SmowVmxlTTE4azlDNFR3Z2U3dVYyKzEzcWVkTW5xOUpLa2Uwa1NsNmMxMWM5N1RUbGJ4TUx5YS9WY1JLWkNkbHJaTGZNK0hjSTJWaGdkSzNzWHJIVEN6UENFRC9lMVBRTkg1RVZBVThLRlNHWGEzb1dPWm9VcmlSYlk1L3R5eTQvbHRKTkVhNnV3R2hra0ljR3JLMjltUndkaDJHSE94R1laYmdGL0VVUDYreUs5cjQrVzc5Y1RYc3NRcEpSM1M1bkZpUHE2bHR6NXM1ZlNYalNkcUxSM0gvTVZlcXV6K3RON0czMk1ieW9halZvcVJxcks2WjZIVm1vM3pDZ1M4TURQQk9jVkY3Ymc0QmhXaXFUTjc5a0ZqV0xkWWZSVlB5Qk1VaXBHNmZCcGlBdUZCZEV1S2lLMHBwVkhQNUpZL0h5ZXRBbVgxMzdVK1U5d3prbmw3eXhyOEQ0TkdNL05yaVhBT21hSDN4YVEifQ== - 2023-11-28T10:16:13Z - - www.scality.com - - - 8e94c64ebf4486567b0e - - `), - ); - } else if (accountId === testAccountId2) { - return res( - ctx.status(200), - ctx.xml(` - - - - arn:aws:sts::${testAccountId2}:assumed-role/storage-manager-role/ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f - OES3SPDIYW4L92S8K1QE6MINE31LQG04:ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f - - - v/0Nq1YMw4nNbvtgQlgi0l6m/PXWjlk1VLmn2I5q - 72SPRZFF71WPWXXUG6XF - eyJzYWx0IjoicVIvVGdIdS9FVjJ4TjN5RmtXSnVLZGE0M0krK0g1L3lFVDU5UkV0enpYYz0iLCJ0YWciOiI4d05WRTIwTlQxWTVKbWtZemo2ZGJ3PT0iLCJjaXBoZXJ0ZXh0IjoiQVNIanI0M0VZc3dzK0QwWDFkVXRXQ2JMbzlFOVZ5SzF5WWt6a21lRjRXOUpCU3hwbmNxS21zWnpIU3ZvYlZEYjNKaDRNTm16bW1yVUd6dTU1bmRwMTk0eTVlVjFSVWMzaHZnSTFxZTRuYmJxNHBPdit5V3VZQ3RtSExUbE5BTHpDK3VhYW1tZDdzWk9BVXNKQlhRcmVHUG5sTFphb0kySTFveXJjbk10QlVpb1AvYnNjNUd6RHFqdTFWMjVQRE9PQWgzM2JFSktHdmorbEoyL2lWV0x5UHBQU1pLZmdZUnd1QjRXczdGaG81dHhaem9uWWhpaG9ocnFtdmFnNUJSNytiN2lGN3ZxZjBVSnFPZXI5Wm9ldDk1dlpqL01qTU04aGhGQXI1MmZnTHpzOHAzVlN3dHV0OENFSTBoVEJJNlVycUY4SWxiUmhFOUtlaHo0cnRiZHRKQzVmVHFRSkVPZWltb0RIbGpZZXZqOVlIZzZPVFhDR2ZhVzRIWDc3T0g5M1BRa0dHc1RCSjVpRTEyZEdYQjhYWWdSM1VackIwUzdQejdLQnpvSUVodTZOWUkrK1NPZ2pwMlFaUmhaWGtkbDdDdU5EMWg2UE9qN2twREY0QXhHbWdwcjBMbmpOdVp1UzJaWlJTck5OZG1WL3B5dWpUM3BtcFNJNUZkNW5Wby9SV1dTSGhoR0FVcWRJS0EyV00xdVJ2TkVFS25rb25keWNuVHRrSHpDVUwrN0RtTXNuL202eTcyZjFReHY2VFQyejRzRVFSUDFhWUcwdnBWSTlXbUpWdW5yTFFVNmxSUmpsb1VFSFVkZ2xCMGd1eTZGZTNYR29YQjdVc1J5UUpxbEJ0elpvdFdkR1AvSjZaMllNODFDSy8zZjJZTXVnNTZlbXQxTmJJZ0hrVWxnaGxpclRsNVdrckVRbG5XTW4zT2dzRk9wMjJKSTV1UGoxSENUMlNhTlBXZEQrY0VCcTZycC9tc1FDOW02Q3prSkMwTWMyclZ0RmdnZitaSEV5dVZvdEVzeUFtY1V5QTdFZzJtY3BXd1pnbHZrYkZQQmI5M2NDN0ZhZGhpNEUzQ0hQbm9BczF5eVNKNkxIOTZZTHJoaXk1Q1h3VWloSTlRdmxuSDNlV3EwaElBZTFGc2N6bThzVWRCTGU2SWlVc3ZJVDlpMjJzcTZnaVpmdld5czVlaU9NZzRQMFBaZCtPK0VDRmdmd3dxdUhYcFdEL1F5RnR1RENVb0xxblNyMU9lOHdCQ2lXNDFYaGtacmEzWTdtVW1QYXlNWTN6MXpOZm1XRllJV0dWZzlBNVFUaUZLWGlZTngxdUtWZGJ3Qk54SmowVmxlTTE4azlDNFR3Z2U3dVYyKzEzcWVkTW5xOUpLa2Uwa1NsNmMxMWM5N1RUbGJ4TUx5YS9WY1JLWkNkbHJaTGZNK0hjSTJWaGdkSzNzWHJIVEN6UENFRC9lMVBRTkg1RVZBVThLRlNHWGEzb1dPWm9VcmlSYlk1L3R5eTQvbHRKTkVhNnV3R2hra0ljR3JLMjltUndkaDJHSE94R1laYmdGL0VVUDYreUs5cjQrVzc5Y1RYc3NRcEpSM1M1bkZpUHE2bHR6NXM1ZlNYalNkcUxSM0gvTVZlcXV6K3RON0czMk1ieW9halZvcVJxcks2WjZIVm1vM3pDZ1M4TURQQk9jVkY3Ymc0QmhXaXFUTjc5a0ZqV0xkWWZSVlB5Qk1VaXBHNmZCcGlBdUZCZEV1S2lLMHBwVkhQNUpZL0h5ZXRBbVgxMzdVK1U5d3prbmw3eXhyOEQ0TkdNL05yaVhBT21hSDN4YVEifQ== - 2023-11-28T10:16:13Z - - www.scality.com - - - 8e94c64ebf4486567b0e - - `), - ); - } - } - if (params.get('Action') === 'ListRoles') { + if (accountId === testAccountId1) { return res( + ctx.status(200), ctx.xml(` - - - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-gc-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - undefined - /scality-internal/ - backbeat-gc-1 - NPP7LHXVP8THSFDX9J58KJED1VKO5WIZ - arn:aws:iam::232853836441:role/scality-internal/backbeat-gc-1 - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-bp-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - undefined - /scality-internal/ - backbeat-lifecycle-bp-1 - B5HBXF8G2DQ7Z7N13LJA87JRJ1SU40QS - arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-bp-1 - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-conductor-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - undefined - /scality-internal/ - backbeat-lifecycle-conductor-1 - SBPV35W7A65Q5OCCWR1FD203538EELDB - arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-conductor-1 - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-op-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - undefined - /scality-internal/ - backbeat-lifecycle-op-1 - WHS10HK95B2PN9RK8UY2D9Z8377F9E5X - arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-op-1 - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-tp-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - undefined - /scality-internal/ - backbeat-lifecycle-tp-1 - YSXDD002ETBE0CJEZQYFDAYJQTWOVJ51 - arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-tp-1 - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fsorbet-fwd-2%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - undefined - /scality-internal/ - cold-storage-archive-role-2 - DMELLEKK4LI9B3F5EWGTXEMRBKU35R3E - arn:aws:iam::232853836441:role/scality-internal/cold-storage-archive-role-2 - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fsorbet-fwd-2%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - undefined - /scality-internal/ - cold-storage-restore-role-2 - H3Y58C2OQTKRH4M1EBXASEKSLOMEGRI1 - arn:aws:iam::232853836441:role/scality-internal/cold-storage-restore-role-2 - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3ADataConsumer%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2Fui.pod-choco.local%2Fauth%2Frealms%2Fartesca%22%7D%7D%2C%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3ADataConsumer%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2F13.48.197.10%3A8443%2Fauth%2Frealms%2Fartesca%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - Has S3 read and write accesses to 100 S3 Buckets. Cannot create or delete S3 Buckets. - /scality-internal/ - data-consumer-role - YGEX9QWC7RI9KMBQEKS4RA9OND4JZ35U - arn:aws:iam::232853836441:role/scality-internal/data-consumer-role - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3AStorageAccountOwner%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2Fui.pod-choco.local%2Fauth%2Frealms%2Fartesca%22%7D%7D%2C%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3AStorageAccountOwner%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2F13.48.197.10%3A8443%2Fauth%2Frealms%2Fartesca%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - Manages the 100 account (Policies, Users, Roles, Groups). - /scality-internal/ - storage-account-owner-role - OYYDW5GLCETHME90KWAZCG5Z8KNZA1OT - arn:aws:iam::232853836441:role/scality-internal/storage-account-owner-role - 2024-04-17T16:31:36Z - - - %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Aroles%22%3A%22StorageManager%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2Fui.pod-choco.local%2Fauth%2Frealms%2Fartesca%22%7D%7D%2C%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Aroles%22%3A%22StorageManager%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2F13.48.197.10%3A8443%2Fauth%2Frealms%2Fartesca%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D - Has all permissions and full access to the 100 account resources and manages ARTESCA users. - /scality-internal/ - storage-manager-role - YRA3NTDUTWN6DRN76LSSDM6HA22RWBO9 - arn:aws:iam::232853836441:role/scality-internal/storage-manager-role - 2024-04-17T16:31:36Z - - - false - - - 148012f42345b8eb7c29 - - - `), + + + + arn:aws:sts::${testAccountId1}:assumed-role/storage-manager-role/ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f + OES3SPDIYW4L92S8K1QE6MINE31LQG04:ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f + + + v/0Nq1YMw4nNbvtgQlgi0l6m/PXWjlk1VLmn2I5q + 72SPRZFF71WPWXXUG6XF + eyJzYWx0IjoicVIvVGdIdS9FVjJ4TjN5RmtXSnVLZGE0M0krK0g1L3lFVDU5UkV0enpYYz0iLCJ0YWciOiI4d05WRTIwTlQxWTVKbWtZemo2ZGJ3PT0iLCJjaXBoZXJ0ZXh0IjoiQVNIanI0M0VZc3dzK0QwWDFkVXRXQ2JMbzlFOVZ5SzF5WWt6a21lRjRXOUpCU3hwbmNxS21zWnpIU3ZvYlZEYjNKaDRNTm16bW1yVUd6dTU1bmRwMTk0eTVlVjFSVWMzaHZnSTFxZTRuYmJxNHBPdit5V3VZQ3RtSExUbE5BTHpDK3VhYW1tZDdzWk9BVXNKQlhRcmVHUG5sTFphb0kySTFveXJjbk10QlVpb1AvYnNjNUd6RHFqdTFWMjVQRE9PQWgzM2JFSktHdmorbEoyL2lWV0x5UHBQU1pLZmdZUnd1QjRXczdGaG81dHhaem9uWWhpaG9ocnFtdmFnNUJSNytiN2lGN3ZxZjBVSnFPZXI5Wm9ldDk1dlpqL01qTU04aGhGQXI1MmZnTHpzOHAzVlN3dHV0OENFSTBoVEJJNlVycUY4SWxiUmhFOUtlaHo0cnRiZHRKQzVmVHFRSkVPZWltb0RIbGpZZXZqOVlIZzZPVFhDR2ZhVzRIWDc3T0g5M1BRa0dHc1RCSjVpRTEyZEdYQjhYWWdSM1VackIwUzdQejdLQnpvSUVodTZOWUkrK1NPZ2pwMlFaUmhaWGtkbDdDdU5EMWg2UE9qN2twREY0QXhHbWdwcjBMbmpOdVp1UzJaWlJTck5OZG1WL3B5dWpUM3BtcFNJNUZkNW5Wby9SV1dTSGhoR0FVcWRJS0EyV00xdVJ2TkVFS25rb25keWNuVHRrSHpDVUwrN0RtTXNuL202eTcyZjFReHY2VFQyejRzRVFSUDFhWUcwdnBWSTlXbUpWdW5yTFFVNmxSUmpsb1VFSFVkZ2xCMGd1eTZGZTNYR29YQjdVc1J5UUpxbEJ0elpvdFdkR1AvSjZaMllNODFDSy8zZjJZTXVnNTZlbXQxTmJJZ0hrVWxnaGxpclRsNVdrckVRbG5XTW4zT2dzRk9wMjJKSTV1UGoxSENUMlNhTlBXZEQrY0VCcTZycC9tc1FDOW02Q3prSkMwTWMyclZ0RmdnZitaSEV5dVZvdEVzeUFtY1V5QTdFZzJtY3BXd1pnbHZrYkZQQmI5M2NDN0ZhZGhpNEUzQ0hQbm9BczF5eVNKNkxIOTZZTHJoaXk1Q1h3VWloSTlRdmxuSDNlV3EwaElBZTFGc2N6bThzVWRCTGU2SWlVc3ZJVDlpMjJzcTZnaVpmdld5czVlaU9NZzRQMFBaZCtPK0VDRmdmd3dxdUhYcFdEL1F5RnR1RENVb0xxblNyMU9lOHdCQ2lXNDFYaGtacmEzWTdtVW1QYXlNWTN6MXpOZm1XRllJV0dWZzlBNVFUaUZLWGlZTngxdUtWZGJ3Qk54SmowVmxlTTE4azlDNFR3Z2U3dVYyKzEzcWVkTW5xOUpLa2Uwa1NsNmMxMWM5N1RUbGJ4TUx5YS9WY1JLWkNkbHJaTGZNK0hjSTJWaGdkSzNzWHJIVEN6UENFRC9lMVBRTkg1RVZBVThLRlNHWGEzb1dPWm9VcmlSYlk1L3R5eTQvbHRKTkVhNnV3R2hra0ljR3JLMjltUndkaDJHSE94R1laYmdGL0VVUDYreUs5cjQrVzc5Y1RYc3NRcEpSM1M1bkZpUHE2bHR6NXM1ZlNYalNkcUxSM0gvTVZlcXV6K3RON0czMk1ieW9halZvcVJxcks2WjZIVm1vM3pDZ1M4TURQQk9jVkY3Ymc0QmhXaXFUTjc5a0ZqV0xkWWZSVlB5Qk1VaXBHNmZCcGlBdUZCZEV1S2lLMHBwVkhQNUpZL0h5ZXRBbVgxMzdVK1U5d3prbmw3eXhyOEQ0TkdNL05yaVhBT21hSDN4YVEifQ== + 2023-11-28T10:16:13Z + + www.scality.com + + + 8e94c64ebf4486567b0e + + `), ); - } - - if (params.get('Action') === 'GetRolesForWebIdentity') { - const testAccount1 = USERS.find((user) => user.id === testAccountId1); - const testAccount2 = USERS.find((user) => user.id === testAccountId2); - const accounts = [testAccount1, testAccount2]; - + } else if (accountId === testAccountId2) { return res( - ctx.json({ - IsTruncated: false, - Accounts: accounts.map((account) => { - return { - Name: account.userName, - CreationDate: account.createDate, - Roles: [ - { - Name: 'storage-manager-role', - Arn: `arn:aws:iam::${account.id}:role/scality-internal/storage-manager-role`, - }, - ], - }; - }), - }), + ctx.status(200), + ctx.xml(` + + + + arn:aws:sts::${testAccountId2}:assumed-role/storage-manager-role/ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f + OES3SPDIYW4L92S8K1QE6MINE31LQG04:ui-9160673b-2c2a-4a6f-a1ef-a3cb6ce25d7f + + + v/0Nq1YMw4nNbvtgQlgi0l6m/PXWjlk1VLmn2I5q + 72SPRZFF71WPWXXUG6XF + eyJzYWx0IjoicVIvVGdIdS9FVjJ4TjN5RmtXSnVLZGE0M0krK0g1L3lFVDU5UkV0enpYYz0iLCJ0YWciOiI4d05WRTIwTlQxWTVKbWtZemo2ZGJ3PT0iLCJjaXBoZXJ0ZXh0IjoiQVNIanI0M0VZc3dzK0QwWDFkVXRXQ2JMbzlFOVZ5SzF5WWt6a21lRjRXOUpCU3hwbmNxS21zWnpIU3ZvYlZEYjNKaDRNTm16bW1yVUd6dTU1bmRwMTk0eTVlVjFSVWMzaHZnSTFxZTRuYmJxNHBPdit5V3VZQ3RtSExUbE5BTHpDK3VhYW1tZDdzWk9BVXNKQlhRcmVHUG5sTFphb0kySTFveXJjbk10QlVpb1AvYnNjNUd6RHFqdTFWMjVQRE9PQWgzM2JFSktHdmorbEoyL2lWV0x5UHBQU1pLZmdZUnd1QjRXczdGaG81dHhaem9uWWhpaG9ocnFtdmFnNUJSNytiN2lGN3ZxZjBVSnFPZXI5Wm9ldDk1dlpqL01qTU04aGhGQXI1MmZnTHpzOHAzVlN3dHV0OENFSTBoVEJJNlVycUY4SWxiUmhFOUtlaHo0cnRiZHRKQzVmVHFRSkVPZWltb0RIbGpZZXZqOVlIZzZPVFhDR2ZhVzRIWDc3T0g5M1BRa0dHc1RCSjVpRTEyZEdYQjhYWWdSM1VackIwUzdQejdLQnpvSUVodTZOWUkrK1NPZ2pwMlFaUmhaWGtkbDdDdU5EMWg2UE9qN2twREY0QXhHbWdwcjBMbmpOdVp1UzJaWlJTck5OZG1WL3B5dWpUM3BtcFNJNUZkNW5Wby9SV1dTSGhoR0FVcWRJS0EyV00xdVJ2TkVFS25rb25keWNuVHRrSHpDVUwrN0RtTXNuL202eTcyZjFReHY2VFQyejRzRVFSUDFhWUcwdnBWSTlXbUpWdW5yTFFVNmxSUmpsb1VFSFVkZ2xCMGd1eTZGZTNYR29YQjdVc1J5UUpxbEJ0elpvdFdkR1AvSjZaMllNODFDSy8zZjJZTXVnNTZlbXQxTmJJZ0hrVWxnaGxpclRsNVdrckVRbG5XTW4zT2dzRk9wMjJKSTV1UGoxSENUMlNhTlBXZEQrY0VCcTZycC9tc1FDOW02Q3prSkMwTWMyclZ0RmdnZitaSEV5dVZvdEVzeUFtY1V5QTdFZzJtY3BXd1pnbHZrYkZQQmI5M2NDN0ZhZGhpNEUzQ0hQbm9BczF5eVNKNkxIOTZZTHJoaXk1Q1h3VWloSTlRdmxuSDNlV3EwaElBZTFGc2N6bThzVWRCTGU2SWlVc3ZJVDlpMjJzcTZnaVpmdld5czVlaU9NZzRQMFBaZCtPK0VDRmdmd3dxdUhYcFdEL1F5RnR1RENVb0xxblNyMU9lOHdCQ2lXNDFYaGtacmEzWTdtVW1QYXlNWTN6MXpOZm1XRllJV0dWZzlBNVFUaUZLWGlZTngxdUtWZGJ3Qk54SmowVmxlTTE4azlDNFR3Z2U3dVYyKzEzcWVkTW5xOUpLa2Uwa1NsNmMxMWM5N1RUbGJ4TUx5YS9WY1JLWkNkbHJaTGZNK0hjSTJWaGdkSzNzWHJIVEN6UENFRC9lMVBRTkg1RVZBVThLRlNHWGEzb1dPWm9VcmlSYlk1L3R5eTQvbHRKTkVhNnV3R2hra0ljR3JLMjltUndkaDJHSE94R1laYmdGL0VVUDYreUs5cjQrVzc5Y1RYc3NRcEpSM1M1bkZpUHE2bHR6NXM1ZlNYalNkcUxSM0gvTVZlcXV6K3RON0czMk1ieW9halZvcVJxcks2WjZIVm1vM3pDZ1M4TURQQk9jVkY3Ymc0QmhXaXFUTjc5a0ZqV0xkWWZSVlB5Qk1VaXBHNmZCcGlBdUZCZEV1S2lLMHBwVkhQNUpZL0h5ZXRBbVgxMzdVK1U5d3prbmw3eXhyOEQ0TkdNL05yaVhBT21hSDN4YVEifQ== + 2023-11-28T10:16:13Z + + www.scality.com + + + 8e94c64ebf4486567b0e + + `), ); } + } + if (params.get('Action') === 'ListRoles') { + return res( + ctx.xml(` + + + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-gc-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + undefined + /scality-internal/ + backbeat-gc-1 + NPP7LHXVP8THSFDX9J58KJED1VKO5WIZ + arn:aws:iam::232853836441:role/scality-internal/backbeat-gc-1 + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-bp-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + undefined + /scality-internal/ + backbeat-lifecycle-bp-1 + B5HBXF8G2DQ7Z7N13LJA87JRJ1SU40QS + arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-bp-1 + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-conductor-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + undefined + /scality-internal/ + backbeat-lifecycle-conductor-1 + SBPV35W7A65Q5OCCWR1FD203538EELDB + arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-conductor-1 + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-op-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + undefined + /scality-internal/ + backbeat-lifecycle-op-1 + WHS10HK95B2PN9RK8UY2D9Z8377F9E5X + arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-op-1 + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-lifecycle-tp-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + undefined + /scality-internal/ + backbeat-lifecycle-tp-1 + YSXDD002ETBE0CJEZQYFDAYJQTWOVJ51 + arn:aws:iam::232853836441:role/scality-internal/backbeat-lifecycle-tp-1 + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fsorbet-fwd-2%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + undefined + /scality-internal/ + cold-storage-archive-role-2 + DMELLEKK4LI9B3F5EWGTXEMRBKU35R3E + arn:aws:iam::232853836441:role/scality-internal/cold-storage-archive-role-2 + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fsorbet-fwd-2%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + undefined + /scality-internal/ + cold-storage-restore-role-2 + H3Y58C2OQTKRH4M1EBXASEKSLOMEGRI1 + arn:aws:iam::232853836441:role/scality-internal/cold-storage-restore-role-2 + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3ADataConsumer%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2Fui.pod-choco.local%2Fauth%2Frealms%2Fartesca%22%7D%7D%2C%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3ADataConsumer%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2F13.48.197.10%3A8443%2Fauth%2Frealms%2Fartesca%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + Has S3 read and write accesses to 100 S3 Buckets. Cannot create or delete S3 Buckets. + /scality-internal/ + data-consumer-role + YGEX9QWC7RI9KMBQEKS4RA9OND4JZ35U + arn:aws:iam::232853836441:role/scality-internal/data-consumer-role + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3AStorageAccountOwner%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2Fui.pod-choco.local%2Fauth%2Frealms%2Fartesca%22%7D%7D%2C%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Agroups%22%3A%22100%3A%3AStorageAccountOwner%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2F13.48.197.10%3A8443%2Fauth%2Frealms%2Fartesca%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + Manages the 100 account (Policies, Users, Roles, Groups). + /scality-internal/ + storage-account-owner-role + OYYDW5GLCETHME90KWAZCG5Z8KNZA1OT + arn:aws:iam::232853836441:role/scality-internal/storage-account-owner-role + 2024-04-17T16:31:36Z + + + %7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Aroles%22%3A%22StorageManager%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2Fui.pod-choco.local%2Fauth%2Frealms%2Fartesca%22%7D%7D%2C%7B%22Action%22%3A%22sts%3AAssumeRoleWithWebIdentity%22%2C%22Condition%22%3A%7B%22StringEquals%22%3A%7B%22keycloak%3Aroles%22%3A%22StorageManager%22%7D%7D%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22Federated%22%3A%22https%3A%2F%2F13.48.197.10%3A8443%2Fauth%2Frealms%2Fartesca%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D + Has all permissions and full access to the 100 account resources and manages ARTESCA users. + /scality-internal/ + storage-manager-role + YRA3NTDUTWN6DRN76LSSDM6HA22RWBO9 + arn:aws:iam::232853836441:role/scality-internal/storage-manager-role + 2024-04-17T16:31:36Z + + + false + + + 148012f42345b8eb7c29 + + + `), + ); + } + + if (params.get('Action') === 'GetRolesForWebIdentity') { + const testAccount1 = USERS.find((user) => user.id === testAccountId1); + const testAccount2 = USERS.find((user) => user.id === testAccountId2); + const accounts = [testAccount1, testAccount2]; + + return res( + ctx.json({ + IsTruncated: false, + Accounts: accounts.map((account) => { + return { + Name: account.userName, + CreationDate: account.createDate, + Roles: [ + { + Name: 'storage-manager-role', + Arn: `arn:aws:iam::${account.id}:role/scality-internal/storage-manager-role`, + }, + ], + }; + }), + }), + ); + } +}; +const genFn = (getPayloadFn: jest.Mock, failingGetRole: boolean = false) => { + return rest.post(`${TEST_API_BASE_URL}/`, (req, res, ctx) => { + const params = new URLSearchParams(req.url.search); + const commonResponse = commonIAMHandlers(getPayloadFn, req, res, ctx); + if (commonResponse) { + return commonResponse; + } if (params.get('Action') === 'GetRole') { - return res( - ctx.xml(` + if (failingGetRole) { + return res( + ctx.status(404), + ctx.json({ + message: 'Role not found', + }), + ); + } else { + return res( + ctx.xml(` @@ -229,7 +247,8 @@ const genFn = (getPayloadFn: jest.Mock) => { 6273e485a54abdb41527 `), - ); + ); + } } }); }; @@ -251,7 +270,11 @@ const LocalWrapper = ({ children }) => { }); return ( - {children} + + + {children} + + ); }; @@ -332,6 +355,43 @@ describe('SelectAccountIAMRole', () => { expect(onChange).toHaveBeenCalledWith(account, role, '11112::DataConsumer'); }); + it.only('should display an error when failing to retrieve the role', async () => { + const getPayloadFn = jest.fn(); + server.use(genFn(getPayloadFn, true)); + const onChange = jest.fn(); + render( + + + , + ); + + await waitFor(() => { + expect(seletors.accountSelect()).toBeInTheDocument(); + }); + + await userEvent.click(seletors.accountSelect()); + + expect(screen.getByText('no-bucket')).toBeInTheDocument(); + + await userEvent.click(seletors.selectOption(/no-bucket/i)); + + await waitFor(() => { + expect(seletors.roleSelect()).toBeInTheDocument(); + }); + + await userEvent.click(seletors.roleSelect()); + await userEvent.click(seletors.selectOption(/backbeat-gc-1/i)); + + expect(onChange).not.toHaveBeenCalled(); + await waitFor(() => { + expect( + screen.getByText( + /An error occured on our side while fetching the role's policy/i, + ), + ).toBeInTheDocument(); + }); + }); + it('test the change of account and role', async () => { // Select Account A, check that role B does not exist and select role A // Change Account to Account B and Role B From 95db84c0c79fa2bce67493e7534e53d0edc56075 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste WATENBERG Date: Wed, 25 Sep 2024 14:02:17 +0200 Subject: [PATCH 2/3] Remove only for the unit tests --- src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx b/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx index 426158341..0d3be294d 100644 --- a/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx +++ b/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx @@ -355,7 +355,7 @@ describe('SelectAccountIAMRole', () => { expect(onChange).toHaveBeenCalledWith(account, role, '11112::DataConsumer'); }); - it.only('should display an error when failing to retrieve the role', async () => { + it('should display an error when failing to retrieve the role', async () => { const getPayloadFn = jest.fn(); server.use(genFn(getPayloadFn, true)); const onChange = jest.fn(); From 395eefcf9b25d70f9232d8f63183047973eabbfa Mon Sep 17 00:00:00 2001 From: Jean-Baptiste WATENBERG Date: Wed, 25 Sep 2024 14:22:29 +0200 Subject: [PATCH 3/3] Fix tests --- .../__tests__/SelectAccountIAMRole.test.tsx | 148 ++++++++++-------- 1 file changed, 82 insertions(+), 66 deletions(-) diff --git a/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx b/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx index 0d3be294d..03a7b4bad 100644 --- a/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx +++ b/src/react/ui-elements/__tests__/SelectAccountIAMRole.test.tsx @@ -22,6 +22,8 @@ import { ThemeProvider } from 'styled-components'; const testAccountId1 = '064609833007'; const testAccountId2 = '377232323695'; +jest.setTimeout(30_000); + const commonIAMHandlers = (getPayloadFn: jest.Mock, req, res, ctx) => { //@ts-ignore const params = new URLSearchParams(req.body); @@ -215,7 +217,8 @@ const commonIAMHandlers = (getPayloadFn: jest.Mock, req, res, ctx) => { const genFn = (getPayloadFn: jest.Mock, failingGetRole: boolean = false) => { return rest.post(`${TEST_API_BASE_URL}/`, (req, res, ctx) => { - const params = new URLSearchParams(req.url.search); + //@ts-ignore + const params = new URLSearchParams(req.body); const commonResponse = commonIAMHandlers(getPayloadFn, req, res, ctx); if (commonResponse) { return commonResponse; @@ -352,7 +355,16 @@ describe('SelectAccountIAMRole', () => { RoleName: 'backbeat-gc-1', Tags: [], }; - expect(onChange).toHaveBeenCalledWith(account, role, '11112::DataConsumer'); + + await waitFor( + () => + expect(onChange).toHaveBeenCalledWith( + account, + role, + '11112::DataConsumer', + ), + { timeout: 10_000 }, + ); }); it('should display an error when failing to retrieve the role', async () => { @@ -420,40 +432,42 @@ describe('SelectAccountIAMRole', () => { await userEvent.click(seletors.roleSelect()); await userEvent.click(seletors.selectOption(/backbeat-gc-1/i)); - expect(onChange).toHaveBeenNthCalledWith( - 1, - { - assumableRoles: [ - { - Arn: 'arn:aws:iam::064609833007:role/scality-internal/storage-manager-role', - Name: 'storage-manager-role', + await waitFor(() => { + expect(onChange).toHaveBeenNthCalledWith( + 1, + { + assumableRoles: [ + { + Arn: 'arn:aws:iam::064609833007:role/scality-internal/storage-manager-role', + Name: 'storage-manager-role', + }, + ], + canManageAccount: true, + canonicalId: + '1e3492312ab47ab0785e3411824352a8fa8aab68cece94973af04167926b8f2c', + creationDate: '2022-03-18T12:51:44.000Z', + id: '064609833007', + name: 'no-bucket', + preferredAssumableRoleArn: + 'arn:aws:iam::064609833007:role/scality-internal/storage-manager-role', + usedCapacity: { + status: 'unknown', }, - ], - canManageAccount: true, - canonicalId: - '1e3492312ab47ab0785e3411824352a8fa8aab68cece94973af04167926b8f2c', - creationDate: '2022-03-18T12:51:44.000Z', - id: '064609833007', - name: 'no-bucket', - preferredAssumableRoleArn: - 'arn:aws:iam::064609833007:role/scality-internal/storage-manager-role', - usedCapacity: { - status: 'unknown', }, - }, - { - Arn: 'arn:aws:iam::232853836441:role/scality-internal/backbeat-gc-1', - AssumeRolePolicyDocument: - '%7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-gc-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D', - CreateDate: new Date('2024-04-17T16:31:36.000Z'), - Description: 'undefined', - Path: '/scality-internal/', - RoleId: 'NPP7LHXVP8THSFDX9J58KJED1VKO5WIZ', - RoleName: 'backbeat-gc-1', - Tags: [], - }, - '11112::DataConsumer', - ); + { + Arn: 'arn:aws:iam::232853836441:role/scality-internal/backbeat-gc-1', + AssumeRolePolicyDocument: + '%7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-gc-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D', + CreateDate: new Date('2024-04-17T16:31:36.000Z'), + Description: 'undefined', + Path: '/scality-internal/', + RoleId: 'NPP7LHXVP8THSFDX9J58KJED1VKO5WIZ', + RoleName: 'backbeat-gc-1', + Tags: [], + }, + '11112::DataConsumer', + ); + }); await userEvent.click(seletors.accountSelect()); @@ -584,40 +598,42 @@ describe('SelectAccountIAMRole', () => { await userEvent.click(seletors.selectOption(/yanjin-custom-role/i)); - expect(onChange).toHaveBeenNthCalledWith( - 2, - { - assumableRoles: [ - { - Arn: 'arn:aws:iam::377232323695:role/scality-internal/storage-manager-role', - Name: 'storage-manager-role', + await waitFor(() => { + expect(onChange).toHaveBeenNthCalledWith( + 2, + { + assumableRoles: [ + { + Arn: 'arn:aws:iam::377232323695:role/scality-internal/storage-manager-role', + Name: 'storage-manager-role', + }, + ], + canManageAccount: true, + canonicalId: + '8c3b89e95e9768755365a8c2d528e71bc7b1cab781ac118b0824cefe21abaf29', + creationDate: '2022-04-29T09:35:35.000Z', + id: '377232323695', + name: 'yanjin', + preferredAssumableRoleArn: + 'arn:aws:iam::377232323695:role/scality-internal/storage-manager-role', + usedCapacity: { + status: 'unknown', }, - ], - canManageAccount: true, - canonicalId: - '8c3b89e95e9768755365a8c2d528e71bc7b1cab781ac118b0824cefe21abaf29', - creationDate: '2022-04-29T09:35:35.000Z', - id: '377232323695', - name: 'yanjin', - preferredAssumableRoleArn: - 'arn:aws:iam::377232323695:role/scality-internal/storage-manager-role', - usedCapacity: { - status: 'unknown', }, - }, - { - Arn: 'arn:aws:iam::232853836441:role/scality-internal/yanjin-custom-role', - AssumeRolePolicyDocument: - '%7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-gc-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D', - CreateDate: new Date('2024-04-17T16:31:36.000Z'), - Description: 'undefined', - Path: '/scality-internal/', - RoleId: 'NPP7LHXVP8THSFDX9J58KJED1VKO5WIZ', - RoleName: 'yanjin-custom-role', - Tags: [], - }, - '11112::DataConsumer', - ); + { + Arn: 'arn:aws:iam::232853836441:role/scality-internal/yanjin-custom-role', + AssumeRolePolicyDocument: + '%7B%22Statement%22%3A%5B%7B%22Action%22%3A%22sts%3AAssumeRole%22%2C%22Effect%22%3A%22Allow%22%2C%22Principal%22%3A%7B%22AWS%22%3A%22arn%3Aaws%3Aiam%3A%3A000000000000%3Auser%2Fscality-internal%2Fbackbeat-gc-1%22%7D%7D%5D%2C%22Version%22%3A%222012-10-17%22%7D', + CreateDate: new Date('2024-04-17T16:31:36.000Z'), + Description: 'undefined', + Path: '/scality-internal/', + RoleId: 'NPP7LHXVP8THSFDX9J58KJED1VKO5WIZ', + RoleName: 'yanjin-custom-role', + Tags: [], + }, + '11112::DataConsumer', + ); + }); }); it('renders with default value', async () => {