* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+import { TextMuted } from 'design-system';
import React, { useEffect, useState } from 'react';
-import theme from '../../../../app/theme';
+import theme, { colors } from '../../../../app/theme';
import Modal from '../../../../components/controls/Modal';
import { Button } from '../../../../components/controls/buttons';
import CheckIcon from '../../../../components/icons/CheckIcon';
import ClearIcon from '../../../../components/icons/ClearIcon';
+import HelpIcon from '../../../../components/icons/HelpIcon';
import { Alert, AlertVariant } from '../../../../components/ui/Alert';
import { translate, translateWithParameters } from '../../../../helpers/l10n';
import { GitHubProvisioningStatus } from '../../../../types/provisioning';
interface Props {
isAutoProvisioning: boolean;
+ selectedOrganizations: string[];
}
-function GitHubConfigurationValidity({ isAutoProvisioning }: Props) {
+export default function GitHubConfigurationValidity({
+ isAutoProvisioning,
+ selectedOrganizations,
+}: Props) {
const [openDetails, setOpenDetails] = useState(false);
const [messages, setMessages] = useState<string[]>([]);
const [alertVariant, setAlertVariant] = useState<AlertVariant>('loading');
const isValidApp =
data?.application[applicationField].status === GitHubProvisioningStatus.Success;
+ const failedOrgs = selectedOrganizations.filter((o) => {
+ return !data?.installations.find((i) => i.organization === o);
+ });
+
useEffect(() => {
if (isFetching) {
setMessages([translate(`${intlPrefix}.loading`)]);
)}
</li>
))}
+ {failedOrgs.map((fo) => (
+ <li key={fo}>
+ <HelpIcon fillInner={colors.gray60} fill={colors.white} role="img" />
+ <TextMuted
+ className="sw-ml-2"
+ text={translateWithParameters(`${intlPrefix}.details.org_not_found`, fo)}
+ />
+ </li>
+ ))}
</ul>
</div>
<footer className="modal-foot">
</>
);
}
-
-export default GitHubConfigurationValidity;
);
});
+ it('should display that config is valid but some organizatios were not found', async () => {
+ handler.setConfigurationValidity({
+ installations: [
+ { organization: 'org1', autoProvisioning: { status: GitHubProvisioningStatus.Success } },
+ ],
+ });
+
+ renderAuthentication([Feature.GithubProvisioning]);
+ await github.enableConfiguration(user);
+
+ await waitFor(() => expect(github.configurationValiditySuccess.get()).toBeInTheDocument());
+ expect(github.configurationValiditySuccess.get()).toHaveTextContent('1');
+
+ await act(() => user.click(github.viewConfigValidityDetailsButton.get()));
+ expect(github.getConfigDetailsTitle()).toHaveTextContent(
+ 'settings.authentication.github.configuration.validation.details.valid_label'
+ );
+ expect(github.getOrgs()[0]).toHaveTextContent(
+ 'settings.authentication.github.configuration.validation.details.valid_labelorg1'
+ );
+ expect(github.getOrgs()[1]).toHaveTextContent(
+ 'settings.authentication.github.configuration.validation.details.org_not_found.organization1'
+ );
+ });
+
it('should display that config is invalid', async () => {
const errorMessage = 'Test error';
handler.setConfigurationValidity({
await waitFor(() => expect(github.configurationValiditySuccess.query()).toBeInTheDocument());
await act(() => user.click(github.viewConfigValidityDetailsButton.get()));
- github.getOrgs().forEach((org) => {
- expect(org).toHaveTextContent(
- 'settings.authentication.github.configuration.validation.details.valid_label'
- );
- });
+
+ expect(github.getOrgs()[0]).toHaveTextContent(
+ 'settings.authentication.github.configuration.validation.details.valid_labelorg1'
+ );
+ expect(github.getOrgs()[1]).toHaveTextContent(
+ 'settings.authentication.github.configuration.validation.details.valid_labelorg2'
+ );
+
await act(() =>
user.click(within(github.configDetailsDialog.get()).getByRole('button', { name: 'close' }))
);