( page: Page, richParameters: RichParameter[] = [], buildParameters: WorkspaceBuildParameter[] = [], )
| 1044 | }; |
| 1045 | |
| 1046 | const fillParameters = async ( |
| 1047 | page: Page, |
| 1048 | richParameters: RichParameter[] = [], |
| 1049 | buildParameters: WorkspaceBuildParameter[] = [], |
| 1050 | ) => { |
| 1051 | for (const buildParameter of buildParameters) { |
| 1052 | const richParameter = richParameters.find( |
| 1053 | (richParam) => richParam.name === buildParameter.name, |
| 1054 | ); |
| 1055 | if (!richParameter) { |
| 1056 | throw new Error( |
| 1057 | "build parameter is expected to be present in rich parameter schema", |
| 1058 | ); |
| 1059 | } |
| 1060 | |
| 1061 | const parameterLabel = page.getByTestId( |
| 1062 | `parameter-field-${richParameter.displayName}`, |
| 1063 | ); |
| 1064 | await expect(parameterLabel).toBeVisible(); |
| 1065 | |
| 1066 | if (richParameter.options.length > 0) { |
| 1067 | const parameterValue = parameterLabel.getByRole("button", { |
| 1068 | name: buildParameter.value, |
| 1069 | }); |
| 1070 | await parameterValue.click(); |
| 1071 | continue; |
| 1072 | } |
| 1073 | |
| 1074 | switch (richParameter.type) { |
| 1075 | case "bool": |
| 1076 | { |
| 1077 | const parameterField = parameterLabel.locator("button"); |
| 1078 | await parameterField.click(); |
| 1079 | } |
| 1080 | break; |
| 1081 | case "string": |
| 1082 | case "number": |
| 1083 | { |
| 1084 | const parameterField = parameterLabel.locator("input"); |
| 1085 | // Dynamic parameters can hydrate after initial render and |
| 1086 | // overwrite an early fill. Re-apply until the desired value |
| 1087 | // is stable. |
| 1088 | for (let attempt = 0; attempt < 3; attempt++) { |
| 1089 | await parameterField.fill(buildParameter.value); |
| 1090 | try { |
| 1091 | await expect(parameterField).toHaveValue(buildParameter.value, { |
| 1092 | timeout: 1000, |
| 1093 | }); |
| 1094 | break; |
| 1095 | } catch (error) { |
| 1096 | if (attempt === 2) { |
| 1097 | throw error; |
| 1098 | } |
| 1099 | } |
| 1100 | } |
| 1101 | } |
| 1102 | break; |
| 1103 | default: |
no test coverage detected