Fix tests

This commit is contained in:
Jake McDermott 2020-05-07 17:38:07 -04:00
parent abcf8fea96
commit 43f32f98a9
No known key found for this signature in database
GPG Key ID: 0E56ED990CDFCB4F
100 changed files with 1277 additions and 545 deletions

View File

@ -2,7 +2,7 @@ import React from 'react';
import { mountWithContexts, waitForElement } from '../testUtils/enzymeHelpers';
import { ConfigAPI, MeAPI, RootAPI } from './api';
import { asyncFlush } from '../jest.setup';
import { asyncFlush } from './setupTests';
import App from './App';

View File

@ -4,8 +4,8 @@ import { I18nProvider } from '@lingui/react';
import { HashRouter } from 'react-router-dom';
import { getLanguageWithoutRegionCode } from './util/language';
import ja from '../build/locales/ja/messages';
import en from '../build/locales/en/messages';
import ja from './locales/ja/messages';
import en from './locales/en/messages';
class RootProvider extends Component {
render() {

View File

@ -1,6 +1,9 @@
import CredentialTypes from './CredentialTypes';
const typesData = [{ id: 1, kind: 'machine' }, { id: 2, kind: 'cloud' }];
const typesData = [
{ id: 1, kind: 'machine' },
{ id: 2, kind: 'cloud' },
];
describe('CredentialTypesAPI', () => {
test('should load all types', async () => {

View File

@ -16,10 +16,9 @@ describe('TeamsAPI', () => {
await TeamsAPI.associateRole(teamId, roleId);
expect(mockHttp.post).toHaveBeenCalledTimes(1);
expect(mockHttp.post.mock.calls[0]).toContainEqual(
`/api/v2/teams/${teamId}/roles/`,
{ id: roleId }
);
expect(
mockHttp.post.mock.calls[0]
).toContainEqual(`/api/v2/teams/${teamId}/roles/`, { id: roleId });
done();
});

View File

@ -16,10 +16,9 @@ describe('UsersAPI', () => {
await UsersAPI.associateRole(userId, roleId);
expect(mockHttp.post).toHaveBeenCalledTimes(1);
expect(mockHttp.post.mock.calls[0]).toContainEqual(
`/api/v2/users/${userId}/roles/`,
{ id: roleId }
);
expect(
mockHttp.post.mock.calls[0]
).toContainEqual(`/api/v2/users/${userId}/roles/`, { id: roleId });
done();
});

View File

@ -10,7 +10,7 @@ import {
} from '@patternfly/react-core';
import { BrandName } from '../../variables';
import brandLogoImg from '../../../images/brand-logo.svg';
import brandLogoImg from './brand-logo.svg';
class About extends React.Component {
static createSpeechBubble(version) {

View File

@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 500 500" style="enable-background:new 0 0 500 500;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;fill:#ED1C24;}
.st2{fill:#42210B;}
.st3{fill:#FFFFFF;}
.st4{fill:#C69C6D;stroke:#8C6239;stroke-width:5;stroke-miterlimit:10;}
.st5{fill:#FFFFFF;stroke:#42210B;stroke-width:3;stroke-miterlimit:10;}
.st6{fill:#ED1C24;stroke:#8C6239;stroke-width:5;stroke-miterlimit:10;}
.st7{fill:#A67C52;}
.st8{fill:#ED1C24;}
</style>
<g class="st0">
<path class="st1" d="M319.8,169.3c1.5-14.2,13.7-27.2,29.9-31.9c-13.1,1.5-27.3-1.7-36-10c-8.7-8.3-10-21.9-1.4-30.1
c-12,6.7-28.1,8.1-41.4,3.4c-13.3-4.6-23.5-15.1-26.2-26.9c-2-8.8,0-17.9,2-26.7c-6.2,9.4-17.6,17.3-30.5,17.3
c-12.9,0.1-25.7-10.2-22.9-20.7c-5.5,7.8-11.4,15.9-21,20.2c-9.5,4.3-23.7,2.7-28.2-5.5c-1.6,10.8-7.5,22-19.1,27
c-9,3.9-21.5,2.2-28-3.8c5.7,11.4,4.3,25.3-4.1,35.6c-9.9,12.2-29.1,18.6-46.4,15.6c14.7,7.2,28.5,17.7,32.1,31.5
c3.7,13.8-7.1,30.7-24.1,31.7c13.6,3.1,28,7.4,35.6,17.2c7.6,9.8,2.9,26.4-11.1,28c12.8-2.6,27.4,3.9,31.9,14.2
c4.1,9.5-0.9,20.9-10.9,26.5c18.6-8.9,41-17.1,59.6-8.8c13.9,6.2,20.8,21.6,15.1,33.8c10.4-10.6,23-21.3,39.2-23.5
c12.8-1.8,27.5,4.6,31.9,14.1c-0.3-12.7,6.1-25.5,17.5-34c13.8-10.3,34.4-14,52-9.2c-11.1-7.8-14.9-22-8.9-33
c6-11,21.3-18,35.7-16.2C327.5,198.1,318.3,183.5,319.8,169.3z"/>
</g>
<g>
<g>
<g>
<path class="st2" d="M179.7,297.3c-10.1,3.2-20.3,6-30.6,8.4c-10.7,2.5-21.7,5-32.8,5.1C96,311.1,79.9,297.2,60,296.1
c-5.8-0.3-5.8,8.7,0,9c9.9,0.5,18.9,5.1,27.9,8.8c9.8,4,19.6,6.3,30.2,5.9c21.5-0.8,43.5-7.4,64-13.8
C187.6,304.3,185.2,295.6,179.7,297.3L179.7,297.3z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M322.2,194.8c17.9-8,36-18.5,44.3-37.2c4.2-9.3,6-19.2,7.2-29.3c1.5-11.7,2.5-23.4,3.7-35.2
c0.6-5.8-8.4-5.7-9,0c-1.1,10.3-2.1,20.6-3.3,30.9c-1.1,9.7-2.5,19.7-6.4,28.7c-7.5,17.5-24.6,26.8-41.2,34.2
C312.4,189.4,316.9,197.2,322.2,194.8L322.2,194.8z"/>
</g>
</g>
<g>
<ellipse transform="matrix(0.5541 -0.8324 0.8324 0.5541 -219.4917 376.0051)" class="st2" cx="241.2" cy="392.9" rx="65.5" ry="33.7"/>
</g>
<g>
<g>
<path class="st3" d="M224.1,442.5c22-11.5,38.7-31,47.1-54.3c2-5.5-6.7-7.8-8.7-2.4c-7.6,21.1-23.1,38.5-43,48.9
C214.4,437.4,218.9,445.1,224.1,442.5L224.1,442.5z"/>
</g>
</g>
<g>
<ellipse transform="matrix(0.9684 -0.2494 0.2494 0.9684 -66.4734 109.0276)" class="st2" cx="397" cy="316.8" rx="63.9" ry="32.9"/>
</g>
<g>
<g>
<path class="st3" d="M363.8,341.5c28.3,7,58.7-0.8,80.2-20.5c4.3-3.9-2.1-10.3-6.4-6.4c-19.1,17.5-46.4,24.4-71.5,18.2
C360.5,331.5,358.1,340.1,363.8,341.5L363.8,341.5z"/>
</g>
</g>
<path class="st4" d="M156.9,96c-25.4,4.5-32.9,20.2-45,46.9c-20.2,44.4,2,90.3,5.6,97.5c18.4,36.5,42.3,36.8,60,80.6
c8.6,21.2,4.6,25.2,13.1,37.5c20.4,29.2,63.7,36.1,91.9,33.8c40.3-3.3,91.5-28.8,108.8-82.5c17.1-53.2-6-112.1-41.2-131.2
c-25.3-13.7-44.9-0.5-71.2-20.6c-21.6-16.5-18.4-33.1-37.5-48.8C227.9,98.1,203.7,87.7,156.9,96z"/>
<ellipse transform="matrix(0.6622 -0.7494 0.7494 0.6622 65.2068 309.6339)" class="st2" cx="376" cy="82.5" rx="21" ry="15.5"/>
<g>
<g>
<path class="st3" d="M379.8,75.3c0.8,0.2-0.6-0.4-0.1-0.1c0.2,0.1,0.3,0.2,0.5,0.3c0.4,0.2-0.6-0.7-0.1-0.1
c0.1,0.1,0.7,0.8,0.2,0.2c-0.4-0.5,0,0,0.1,0.1c0.4,0.7,0,0.2,0-0.2c0,0.1,0.1,0.4,0.2,0.5c0.3,0.9-0.1-1,0-0.1
c0.1,2.3,2,4.6,4.5,4.5c2.3-0.1,4.6-2,4.5-4.5c-0.3-4.4-3-8.1-7.3-9.4c-2.2-0.7-5,0.8-5.5,3.1C376.1,72.2,377.4,74.5,379.8,75.3
L379.8,75.3z"/>
</g>
</g>
<ellipse transform="matrix(0.9999 -1.433736e-02 1.433736e-02 0.9999 -4.303 0.8051)" class="st2" cx="54" cy="300.5" rx="21" ry="15.5"/>
<g>
<g>
<path class="st3" d="M52.2,297.5c1.1-0.3,1.4-0.4,2.5,0c0.8,0.3,1.3,0.7,2,1.7c1.5,1.9,4.8,1.6,6.4,0c1.9-1.9,1.5-4.4,0-6.4
c-3.1-3.9-8.6-5.4-13.3-4C44.3,290.5,46.7,299.2,52.2,297.5L52.2,297.5z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M149.3,108.8c4.9-10.8-1.3-24.2-12.9-26.9c-1.9-0.4-2.7,2.4-0.8,2.9c9.6,2.3,15.3,13.5,11.2,22.5
C145.9,109,148.5,110.5,149.3,108.8L149.3,108.8z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M141.2,112.3c2.4-9.4-5.4-19.3-15.2-19c-1.9,0.1-1.9,3.1,0,3c7.8-0.2,14.2,7.6,12.3,15.2
C137.8,113.4,140.7,114.2,141.2,112.3L141.2,112.3z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M132.6,118c-1.1-8.3-10.9-13.4-18.2-9.1c-1.7,1-0.2,3.6,1.5,2.6c5.2-3,12.9,0.4,13.7,6.5
C129.8,119.9,132.8,119.9,132.6,118L132.6,118z"/>
</g>
</g>
<path class="st5" d="M215.5,166.5l34-73c0,0,35,0,46,21c7.5,14.3,8,39,8,39L215.5,166.5z"/>
<path class="st5" d="M208.2,170.5l-79.5-12.7c0,0-19.6,29-8.4,49.9c7.6,14.2,27.8,28.5,27.8,28.5L208.2,170.5z"/>
<path class="st2" d="M210.5,164.5l33-74c0,0-2.5-5.5-8-7s-12,0-12,0L210.5,164.5z"/>
<path class="st2" d="M207.4,165.3l-73.1-35c0,0-5.6,2.4-7.2,7.8c-1.6,5.5-0.3,12-0.3,12L207.4,165.3z"/>
<path d="M215.5,166.5L234,127c0,0,17-6,25.5,7.5c8.6,13.6-3.5,25.5-3.5,25.5L215.5,166.5z"/>
<path d="M206.7,170.9l-29.6,32c0,0-18,0.5-22-14.9c-4-15.6,11.1-23.2,11.1-23.2L206.7,170.9z"/>
<g>
<g>
<path class="st3" d="M243.4,139.1c-0.6,0.2-0.7,0.3-0.4,0.2c0.3-0.1,0.2-0.1-0.5,0.1c0.7,0-0.3,0-0.4-0.1c0.1,0,0.3,0.1,0.4,0.1
c0.3,0.1,0.2,0-0.4-0.2c0,0,0.6,0.3,0.6,0.3c0.5,0.2-0.9-0.6-0.1-0.1c0.6,0.4-0.3-0.5-0.1-0.1c0.3,0.5-0.3-1-0.1-0.2
c0.2,0.8,0-1,0-0.1c0,2.4,2.1,4.6,4.5,4.5c2.5-0.1,4.5-2,4.5-4.5c0-3-1.6-5.7-4.1-7.3c-2.6-1.7-5.6-1.6-8.4-0.4
c-2.2,0.9-2.8,4.3-1.6,6.2C238.7,139.7,241,140.1,243.4,139.1L243.4,139.1z"/>
</g>
</g>
<g>
<g>
<path class="st3" d="M173.5,176.4c-0.5-0.3-0.1,0,0.2,0.1c-0.7-0.6,0.3,0.5,0.1,0c-0.3-0.5,0.4,0.8,0.1,0.2
c-0.4-0.8,0.2,0.2,0,0.1c0,0,0-0.6,0-0.6c-0.1,0.1-0.1,1,0,0.3c-0.1,0.2-0.1,0.3-0.2,0.5c0.2-0.3,0.2-0.4,0-0.1
c-0.2,0.2-0.2,0.3-0.1,0.1c0.2-0.2,0.1-0.2-0.3,0.2c1.9-1.4,3-4,1.6-6.2c-1.2-1.9-4.1-3.1-6.2-1.6c-2.4,1.7-4,4.3-3.9,7.4
c0.1,3,1.6,5.7,4.1,7.3c2,1.2,5,0.5,6.2-1.6C176.3,180.4,175.7,177.7,173.5,176.4L173.5,176.4z"/>
</g>
</g>
<ellipse transform="matrix(0.862 -0.5069 0.5069 0.862 -88.3186 186.5516)" class="st6" cx="298.5" cy="255.5" rx="79.5" ry="68.5"/>
<g>
<g>
<path class="st7" d="M173.6,109.8c-2.1,2-3.9,4.6-3.6,7.6c0.3,3.5,2.8,6.6,6.6,6.7c6,0.2,11.5-7.7,8.2-13c-1-1.7-3.1-3.1-5.2-3
c-1.7,0.1-3.1,0.8-4.4,1.9c-2,1.8-2.8,5.2-1.9,7.7c2.4,6.6,11.8,5.9,13.8-0.7c0.7-2.5-0.9-5.6-3.5-6.2c-2.7-0.6-5.4,0.8-6.2,3.5
c0.6-2.1,3.1-2.6,4.6-1c0.8,0.9,1,1.8,0.8,2.8c0.2-0.5,0.1-0.4-0.1,0.3c-0.4,0.7-1,1.2-1.8,1.4c-0.9,0-1.8,0-2.7,0
c-1.8-0.6-2.5-1.6-2.3-3.1c-0.1-0.4-0.1-0.7,0.1-1c0.2-0.3,0.1-0.3-0.1,0.1c0.1-0.1,0.2-0.2,0.3-0.4c-0.2,0.3-0.5,0.5-0.7,0.8
c-0.1,0.1-0.2,0.2-0.3,0.3c-0.3,0.2-0.2,0.2,0.1-0.1c1.3,0.2,2.6,0.4,3.9,0.6c0.2,0.4,0.5,0.9,0.7,1.3c0.2,0.6-0.2,0.9-0.2,1.4
c0,0.4,0.4-0.5-0.1,0.1c0.3-0.4,0.6-0.7,1-1c1.9-1.8,2-5.3,0-7.1C178.7,107.9,175.6,107.8,173.6,109.8L173.6,109.8z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M151.2,248.6c-5.7,7,1.7,16.9,10,13.3c3.4-1.5,6.3-5,6.3-8.9c0-4.2-2.7-7.6-7-7.8c-3.1-0.1-5.8,3.3-4.8,6.3
c1.2,3.4,3.7,6.1,7.3,7c2.6,0.6,5.4-0.8,6.2-3.5c0.7-2.5-0.9-5.5-3.5-6.2c-1.7-0.4,0,0.1-0.2,0.1c-0.4,0-0.4-0.8-0.1-0.1
c-1.6,2.1-3.2,4.2-4.8,6.3c-2.4-0.1-2.8-1.1-3-2.6c0.1,0.7-0.1,0.2,0.1-0.1c0.7-0.9-0.5,0.5,0,0c-0.5,0.5-0.3,0.1-0.2,0.2
c0.1,0,0.6,0,0.7,0c0.4,0.1,0.5,0.4,0.8,0.6c0.2,0.3,0.2,0.2-0.1-0.2c0.1,0.1,0.1,0.3,0.2,0.4c0,1,0.1,1.1-0.7,2.1
c1.7-2.1,2-5,0-7.1C156.5,246.8,152.9,246.5,151.2,248.6L151.2,248.6z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M204.1,205.7c0.8,4.8,5.3,8.6,10.1,8.6c5.1,0,9.5-3.9,10.3-8.9c0.7-4.4-0.2-12.1-5.3-13.6
c-2.7-0.8-5.2,0.5-7,2.4c-1.1,1.2-1.5,1.7-3.1,1.2c0.7,2.8,1.5,5.6,2.2,8.4c0.2-0.2-0.5,0.2-0.5,0.2c6.3,1.4,8.9-8.2,2.7-9.6
c-3.5-0.8-6.6,0-9.3,2.4c-3,2.6-1.1,7.2,2.2,8.4c2.6,0.9,5.5,0.8,8-0.2c1.3-0.5,2.4-1.2,3.4-2.1c0.4-0.3,0.7-0.6,1-1
c0.2-0.3,0.4-0.5,0.6-0.7c0.4-0.4,0.3-0.4-0.5,0.3c-0.9,0-1.8,0-2.7,0c0.2,0.1,0.3,0.1,0.5,0.2c-0.7-0.4-1.5-0.9-2.2-1.3
c0.1,0.2,0.3,0.3,0.4,0.5c-0.4-0.7-0.9-1.5-1.3-2.2c0.4,1.2,0.8,2.5,1,3.7c0,0.4,0,0.8,0,1.2c0,0.5-0.5,0.9,0,0.4
c-0.8,0.6-0.9,0.2-1.1-0.9c-0.4-2.7-3.8-4.1-6.2-3.5C204.7,200.3,203.7,203,204.1,205.7L204.1,205.7z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M265.9,179.6c0.2,0.4,0.5,0.9,0.7,1.3c0.6,1.1,1.8,2,3,2.3c1.2,0.3,2.8,0.2,3.9-0.5c1.1-0.7,2-1.7,2.3-3
c0.3-1.4,0.1-2.6-0.5-3.9c-0.2-0.4-0.5-0.9-0.7-1.3c-0.6-1.1-1.8-2-3-2.3c-1.2-0.3-2.8-0.2-3.9,0.5c-1.1,0.7-2,1.7-2.3,3
C265.1,177.1,265.3,178.3,265.9,179.6L265.9,179.6z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M200.4,295.8c-6.1,1.6-8.1,8.6-5,13.7c2.8,4.7,9.1,7.2,14.3,5.4c4.9-1.7,7.8-7.1,6.3-12.2
c-0.8-2.7-2.7-4.8-5.3-5.8c-1.4-0.5-2.8-0.7-4.2-0.8c-0.1,0-0.9-0.1-0.9-0.1c0.2-0.4,1.2,2.5,0.9,0.7c0,0.9,0,1.8,0,2.7
c-0.1,0.1-0.1,0.1-0.2,0.2c3.1-5.6-5.5-10.7-8.6-5c-1.7,3-1.1,6.6,1.4,9c1.3,1.2,2.8,2,4.5,2.3c0.8,0.1,1.6,0.2,2.4,0.3
c0.4,0,0.7,0,1.1,0.1c0.2,0.1,0.1,0.1-0.2-0.1c0,0.1-0.6-0.5-0.6-0.5c-0.1-0.1-0.1-0.2,0-0.3c0.1-0.3,0.1-0.1-0.1,0.5
c-0.3-0.1,0.7-0.2-0.3-0.3c-0.9-0.1-1.1-0.6-1.8-0.9c0,0-0.2-0.3-0.3-0.3c0.3,0-0.8,1.2-0.8,1.2
C209.3,303.8,206.6,294.2,200.4,295.8L200.4,295.8z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M244.8,355.3c-4-6.2-11.2-2.3-12,3.9c-0.8,5.9,1.8,12,6.5,15.6c4.5,3.5,11.5,4.9,16.7,2.1
c6.4-3.3,5.4-9.8,4.9-15.9c-0.5-6.3-1.9-12-9.5-12.1c-5.1-0.1-13.1,0.2-14.5,6.4c-1.2,5.4,2.5,12.8,8.2,13.8
c6.2,1.1,11.2-5.5,7.8-11c-2.2-3.5-8.1-3.1-9.1,1.2c-1.1,4.4,0.5,8,4.1,10.6c5.2,3.8,10.2-4.8,5-8.6c0.2,0.2,0.4,0.5,0.5,0.7
c-3,0.4-6.1,0.8-9.1,1.2c-0.4-0.7,3.4-3.1,2.9-4.8c-0.8-2.6-1.7,1.4-1.9,1.1c0,0.1,5.2-0.1,5.6-0.4c0.7,0.1,0.8-0.1,0.2-0.6
c-0.4-0.7-0.5-0.8-0.4-0.3c-0.2,0.3,0.2,1.9,0.2,2.3c0.2,2,0.3,4,0.5,5.9c0.1,1.6,0.4,1.7-1.1,2c-1.3,0.2-2.9-0.3-4-0.9
c-1.4-0.8-2.5-2-3.1-3.5c-0.3-0.7-0.4-1.3-0.5-2c0-0.3-0.1-0.7,0-1c0.2-1.9-1.1-1.5-3.8,1.2c-1-0.8-2-1.5-3-2.3
c0.1,0.2,0.2,0.4,0.4,0.6C239.6,365.7,248.3,360.7,244.8,355.3L244.8,355.3z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M336.5,337.4c-2.4-1.5-5.1-2.5-7.9-1.8c-2.7,0.7-4.9,3.2-5.3,6c-0.9,6.4,6.3,8.3,11.2,8.4
c4.8,0.1,10.6-2.4,10.9-7.9c0.2-5.6-5.5-9.6-10.6-6.9c-5.7,3-0.7,11.6,5,8.6c-0.1,0.1-0.2,0.1-0.3,0.2c-0.9,0-1.8,0-2.7,0
c-2.1-0.4-1.4-4.8-0.3-4.3c0,0-1.3,0.3-1.3,0.3c-0.6,0-1.2,0-1.8-0.1c-0.5-0.1-1-0.2-1.5-0.4c-1.2-0.5-1-0.2,0.6,0.7
c0.2,0.8,0.5,1.7,0.7,2.5c-3.4,1.1-4.4,1.9-2.8,2.7c0.4,0.2,0.7,0.4,1.1,0.7C336.9,349.6,341.9,340.9,336.5,337.4L336.5,337.4z"
/>
</g>
</g>
<path class="st3" d="M224.3,256.5L252,273v-40l32,20v-38l28,17l4-28l23,12l-3-24c0,0-14-8-35.5-6.4c-11.6,0.9-24.3,6.8-33.5,11.4
c-14,7-23.7,18.9-31.2,29.1C227,238,224.3,256.5,224.3,256.5z"/>
<path class="st3" d="M372.9,248.9l-28.8-14.5l2.9,39.9l-33.3-17.7l2.7,37.9l-29.1-15l-2,28.2l-23.8-10.3l4.7,23.7
c0,0,14.5,7,35.9,3.8c11.5-1.7,23.7-8.5,32.6-13.8c13.5-8,22.3-20.5,29-31.2C371.5,267.5,372.9,248.9,372.9,248.9z"/>
</g>
<g>
<g>
<path class="st8" d="M235.2,121.6c8.5-3.1,23.2-0.1,27.8,8.4c2.3,4.4,4.5,9.9,4.5,14.9c0.1,5.5-2.7,10.5-5.3,15.3
c-1.5,2.8,2.8,5.4,4.3,2.5c3.1-5.8,6.3-11.9,6-18.7c-0.3-6-2.8-12.8-5.9-17.9c-6-9.5-22.6-13.1-32.7-9.4
C230.9,117.8,232.2,122.7,235.2,121.6L235.2,121.6z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M241.1,110.5c11.6-2.3,25.6,2.3,32.2,12.4c6.6,10.2,6.1,22.8,3.1,34.2c-1.3,5,6.4,7.1,7.7,2.1
c3.8-14.3,3.8-30.3-5.5-42.6c-8.9-11.7-25.5-16.6-39.6-13.8C233.9,103.8,236.1,111.5,241.1,110.5L241.1,110.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M245.4,97.5c7.8-1.8,15.5,0,22.9,2.8c7.2,2.7,15,6.1,20.3,11.8c10.7,11.7,9.5,29.3,8.7,44
c-0.3,6.4,9.7,6.4,10,0c1-17.9,1.2-38.5-12.7-52.1c-6.4-6.3-15.3-10.2-23.6-13.3c-9.1-3.4-18.6-4.9-28.2-2.8
C236.5,89.2,239.1,98.9,245.4,97.5L245.4,97.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M155.8,158.5c-13.1,4.8-14.2,21.6-10.1,33.1c4.3,12,15.2,20.6,28.2,20.5c3.2,0,3.2-5,0-5
c-9.9,0.1-18.6-5.9-22.6-14.9c-3.9-8.6-5.2-24.8,5.8-28.9C160.2,162.3,158.9,157.4,155.8,158.5L155.8,158.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M164.1,216.5c-11.4-2.2-18.8-11.4-22.7-21.9c-3.6-9.6-7.7-25.3,1.2-33.1c3.9-3.4-1.8-9-5.7-5.7
c-11.3,9.9-7.9,28.5-3.3,40.9c4.8,13,14.1,24.7,28.3,27.5C167,225.2,169.1,217.5,164.1,216.5L164.1,216.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M152,231.7c-27.3-13.3-38.1-46.5-23.3-73.2c3.1-5.6-5.5-10.7-8.6-5c-17.3,31.2-5.3,71.1,26.9,86.9
C152.7,243.1,157.8,234.5,152,231.7L152,231.7z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -11,7 +11,10 @@ describe('<_AddResourceRole />', () => {
UsersAPI.read.mockResolvedValue({
data: {
count: 2,
results: [{ id: 1, username: 'foo' }, { id: 2, username: 'bar' }],
results: [
{ id: 1, username: 'foo' },
{ id: 2, username: 'bar' },
],
},
});
const roles = {

View File

@ -1,15 +1,13 @@
import React, { Fragment } from 'react';
import { BackgroundImage, BackgroundImageSrc } from '@patternfly/react-core';
import bgFilter from '@patternfly/patternfly/assets/images/background-filter.svg';
const backgroundImageConfig = {
[BackgroundImageSrc.xs]: '/assets/images/pfbg_576.jpg',
[BackgroundImageSrc.xs2x]: '/assets/images/pfbg_576@2x.jpg',
[BackgroundImageSrc.sm]: '/assets/images/pfbg_768.jpg',
[BackgroundImageSrc.sm2x]: '/assets/images/pfbg_768@2x.jpg',
[BackgroundImageSrc.lg]: '/assets/images/pfbg_2000.jpg',
[BackgroundImageSrc.filter]: `${bgFilter}#image_overlay`,
[BackgroundImageSrc.xs]: './images/pfbg_576.jpg',
[BackgroundImageSrc.xs2x]: './images/pfbg_576@2x.jpg',
[BackgroundImageSrc.sm]: './images/pfbg_768.jpg',
[BackgroundImageSrc.sm2x]: './images/pfbg_768@2x.jpg',
[BackgroundImageSrc.lg]: './images/pfbg_2000.jpg',
};
export default ({ children }) => (

View File

@ -51,7 +51,10 @@ function VariablesDetail({ value, label, rows, fullHeight }) {
</SplitItem>
<SplitItem>
<MultiButtonToggle
buttons={[[YAML_MODE, 'YAML'], [JSON_MODE, 'JSON']]}
buttons={[
[YAML_MODE, 'YAML'],
[JSON_MODE, 'JSON'],
]}
value={mode}
onChange={newMode => {
try {

View File

@ -10,7 +10,7 @@ describe('<VariablesDetail>', () => {
const wrapper = shallow(
<VariablesDetail value="---foo: bar" label="Variables" />
);
const input = wrapper.find('Styled(CodeMirrorInput)');
const input = wrapper.find('CodeMirrorInput');
expect(input).toHaveLength(1);
expect(input.prop('mode')).toEqual('yaml');
expect(input.prop('value')).toEqual('---foo: bar');
@ -21,7 +21,7 @@ describe('<VariablesDetail>', () => {
const wrapper = shallow(
<VariablesDetail value='{"foo": "bar"}' label="Variables" />
);
const input = wrapper.find('Styled(CodeMirrorInput)');
const input = wrapper.find('CodeMirrorInput');
expect(input).toHaveLength(1);
expect(input.prop('mode')).toEqual('javascript');
expect(input.prop('value')).toEqual('{"foo": "bar"}');
@ -32,19 +32,19 @@ describe('<VariablesDetail>', () => {
<VariablesDetail value="---foo: bar" label="Variables" />
);
wrapper.find('MultiButtonToggle').invoke('onChange')('javascript');
const input = wrapper.find('Styled(CodeMirrorInput)');
const input = wrapper.find('CodeMirrorInput');
expect(input.prop('mode')).toEqual('javascript');
expect(input.prop('value')).toEqual('{\n "foo": "bar"\n}');
wrapper.find('MultiButtonToggle').invoke('onChange')('yaml');
const input2 = wrapper.find('Styled(CodeMirrorInput)');
const input2 = wrapper.find('CodeMirrorInput');
expect(input2.prop('mode')).toEqual('yaml');
expect(input2.prop('value')).toEqual('foo: bar\n');
});
test('should render label and value= --- when there are no values', () => {
const wrapper = shallow(<VariablesDetail value="" label="Variables" />);
expect(wrapper.find('Styled(CodeMirrorInput)').length).toBe(1);
expect(wrapper.find('CodeMirrorInput').length).toBe(1);
expect(wrapper.find('div.pf-c-form__label').text()).toBe('Variables');
});
@ -59,14 +59,14 @@ describe('<VariablesDetail>', () => {
value: '---bar: baz',
});
wrapper.update();
const input = wrapper.find('Styled(CodeMirrorInput)');
const input = wrapper.find('CodeMirrorInput');
expect(input.prop('mode')).toEqual('javascript');
expect(input.prop('value')).toEqual('{\n "bar": "baz"\n}');
});
test('should default yaml value to "---"', () => {
const wrapper = shallow(<VariablesDetail value="" label="Variables" />);
const input = wrapper.find('Styled(CodeMirrorInput)');
const input = wrapper.find('CodeMirrorInput');
expect(input.prop('value')).toEqual('---');
});
@ -76,7 +76,7 @@ describe('<VariablesDetail>', () => {
wrapper.find('MultiButtonToggle').invoke('onChange')('javascript');
});
wrapper.setProps({ value: '' });
const input = wrapper.find('Styled(CodeMirrorInput)');
const input = wrapper.find('CodeMirrorInput');
expect(input.prop('value')).toEqual('{}');
});
});

View File

@ -44,7 +44,10 @@ function VariablesField({
</SplitItem>
<SplitItem>
<MultiButtonToggle
buttons={[[YAML_MODE, 'YAML'], [JSON_MODE, 'JSON']]}
buttons={[
[YAML_MODE, 'YAML'],
[JSON_MODE, 'JSON'],
]}
value={mode}
onChange={newMode => {
try {

View File

@ -43,7 +43,10 @@ function VariablesInput(props) {
</SplitItem>
<SplitItemRight>
<MultiButtonToggle
buttons={[[YAML_MODE, 'YAML'], [JSON_MODE, 'JSON']]}
buttons={[
[YAML_MODE, 'YAML'],
[JSON_MODE, 'JSON'],
]}
value={mode}
onChange={newMode => {
try {

View File

@ -1,9 +1,12 @@
import { DataListCell } from '@patternfly/react-core';
import { DataListCell as PFDataListCell } from '@patternfly/react-core';
import styled from 'styled-components';
DataListCell.displayName = 'PFDataListCell';
PFDataListCell.displayName = 'PFDataListCell';
// Once https://github.com/patternfly/patternfly-react/issues/3938
// has been resolved this component can be removed
export default styled(DataListCell)`
const DataListCell = styled(PFDataListCell)`
word-break: break-word;
`;
DataListCell.displayName = 'DataListCell';
export default DataListCell;

View File

@ -112,6 +112,12 @@ function DisassociateButton({
);
}
DisassociateButton.defaultProps = {
itemsToDisassociate: [],
modalNote: '',
modalTitle: '',
};
DisassociateButton.propTypes = {
itemsToDisassociate: arrayOf(object),
modalNote: string,

View File

@ -3,8 +3,8 @@ import { Wizard } from '@patternfly/react-core';
import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import { Formik } from 'formik';
import ContentError from '../../components/ContentError';
import ContentLoading from '../../components/ContentLoading';
import ContentError from '../ContentError';
import ContentLoading from '../ContentLoading';
import mergeExtraVars from './mergeExtraVars';
import useSteps from './useSteps';
import getSurveyValues from './getSurveyValues';
@ -36,7 +36,10 @@ function LaunchPrompt({ config, resource, onLaunch, onCancel, i18n }) {
};
const surveyValues = getSurveyValues(values);
setValue('inventory_id', values.inventory?.id);
setValue('credentials', values.credentials?.map(c => c.id));
setValue(
'credentials',
values.credentials?.map(c => c.id)
);
setValue('job_type', values.job_type);
setValue('limit', values.limit);
setValue('job_tags', values.job_tags);

View File

@ -1,6 +1,9 @@
import React from 'react';
import { act, isElementOfType } from 'react-dom/test-utils';
import { mountWithContexts, waitForElement } from '../../../testUtils/enzymeHelpers';
import {
mountWithContexts,
waitForElement,
} from '../../../testUtils/enzymeHelpers';
import LaunchPrompt from './LaunchPrompt';
import InventoryStep from './steps/InventoryStep';
import CredentialsStep from './steps/CredentialsStep';

View File

@ -5,11 +5,11 @@ import { t } from '@lingui/macro';
import { useField } from 'formik';
import { ToolbarItem } from '@patternfly/react-core';
import { CredentialsAPI, CredentialTypesAPI } from '../../../api';
import AnsibleSelect from '../../../components/AnsibleSelect';
import OptionsList from '../../../components/OptionsList';
import ContentLoading from '../../../components/ContentLoading';
import CredentialChip from '../../../components/CredentialChip';
import ContentError from '../../../components/ContentError';
import AnsibleSelect from '../../AnsibleSelect';
import OptionsList from '../../OptionsList';
import ContentLoading from '../../ContentLoading';
import CredentialChip from '../../CredentialChip';
import ContentError from '../../ContentError';
import { getQSConfig, parseQueryString } from '../../../util/qs';
import useRequest from '../../../util/useRequest';
import { required } from '../../../util/validators';

View File

@ -1,12 +1,12 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
import { Formik } from 'formik';
import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
import { mountWithContexts } from '../../../../testUtils/enzymeHelpers';
import CredentialsStep from './CredentialsStep';
import { CredentialsAPI, CredentialTypesAPI } from '../../api';
import { CredentialsAPI, CredentialTypesAPI } from '../../../api';
jest.mock('../../api/models/CredentialTypes');
jest.mock('../../api/models/Credentials');
jest.mock('../../../api/models/CredentialTypes');
jest.mock('../../../api/models/Credentials');
const types = [
{ id: 1, kind: 'ssh', name: 'SSH' },

View File

@ -6,9 +6,9 @@ import { useField } from 'formik';
import { InventoriesAPI } from '../../../api';
import { getQSConfig, parseQueryString } from '../../../util/qs';
import useRequest from '../../../util/useRequest';
import OptionsList from '../../../components/OptionsList';
import ContentLoading from '../../../components/ContentLoading';
import ContentError from '../../../components/ContentError';
import OptionsList from '../../OptionsList';
import ContentLoading from '../../ContentLoading';
import ContentError from '../../ContentError';
import { required } from '../../../util/validators';
const QS_CONFIG = getQSConfig('inventory', {

View File

@ -1,11 +1,11 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
import { Formik } from 'formik';
import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
import { mountWithContexts } from '../../../../testUtils/enzymeHelpers';
import InventoryStep from './InventoryStep';
import { InventoriesAPI } from '../../api';
import { InventoriesAPI } from '../../../api';
jest.mock('../../api/models/Inventories');
jest.mock('../../../api/models/Inventories');
const inventories = [
{ id: 1, name: 'inv one', url: '/inventories/1' },

View File

@ -4,10 +4,10 @@ import { t } from '@lingui/macro';
import { useField } from 'formik';
import { Form, FormGroup, Switch } from '@patternfly/react-core';
import styled from 'styled-components';
import FormField, { FieldTooltip } from '../FormField';
import { TagMultiSelect } from '../MultiSelect';
import AnsibleSelect from '../AnsibleSelect';
import { VariablesField } from '../CodeMirrorInput';
import FormField, { FieldTooltip } from '../../FormField';
import { TagMultiSelect } from '../../MultiSelect';
import AnsibleSelect from '../../AnsibleSelect';
import { VariablesField } from '../../CodeMirrorInput';
const FieldHeader = styled.div`
display: flex;

View File

@ -1,7 +1,7 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
import { Formik } from 'formik';
import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
import { mountWithContexts } from '../../../../testUtils/enzymeHelpers';
import OtherPromptsStep from './OtherPromptsStep';
describe('OtherPromptsStep', () => {

View File

@ -1,7 +1,7 @@
import React from 'react';
import { useFormikContext } from 'formik';
import yaml from 'js-yaml';
import PromptDetail from '../../../components/PromptDetail';
import PromptDetail from '../../PromptDetail';
import mergeExtraVars, { maskPasswords } from '../mergeExtraVars';
import getSurveyValues from '../getSurveyValues';

View File

@ -8,8 +8,8 @@ import {
SelectOption,
SelectVariant,
} from '@patternfly/react-core';
import FormField, { FieldTooltip } from '../../../components/FormField';
import AnsibleSelect from '../../../components/AnsibleSelect';
import FormField, { FieldTooltip } from '../../FormField';
import AnsibleSelect from '../../AnsibleSelect';
import {
required,
minMaxValue,

View File

@ -8,7 +8,7 @@ import { CredentialsAPI } from '../../api';
import { Credential } from '../../types';
import { getQSConfig, parseQueryString, mergeParams } from '../../util/qs';
import { FieldTooltip } from '../FormField';
import Lookup from '.';
import Lookup from './Lookup';
import OptionsList from '../OptionsList';
import LookupErrorMessage from './shared/LookupErrorMessage';

View File

@ -5,7 +5,7 @@ import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import { InventoriesAPI } from '../../api';
import { Inventory } from '../../types';
import Lookup from '.';
import Lookup from './Lookup';
import OptionsList from '../OptionsList';
import { getQSConfig, parseQueryString } from '../../util/qs';
import LookupErrorMessage from './shared/LookupErrorMessage';

View File

@ -17,10 +17,10 @@ import {
InputGroup as PFInputGroup,
Modal,
} from '@patternfly/react-core';
import ChipGroup from '../../components/ChipGroup';
import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import styled from 'styled-components';
import ChipGroup from '../ChipGroup';
import reducer, { initReducer } from './shared/reducer';
import { QSConfig } from '../../types';

View File

@ -8,7 +8,10 @@ describe('<MultiButtonToggle />', () => {
beforeAll(() => {
wrapper = mount(
<MultiButtonToggle
buttons={[['yaml', 'YAML'], ['json', 'JSON']]}
buttons={[
['yaml', 'YAML'],
['json', 'JSON'],
]}
value="yaml"
onChange={onChange}
/>

View File

@ -42,8 +42,8 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
<DataListItemCells
dataListCells={
Array [
<DataListCell>
<Link
<ForwardRef(Styled(PFDataListCell))>
<ForwardRef
to={
Object {
"pathname": "/foo",
@ -55,11 +55,11 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
>
Foo
</b>
</Link>
</DataListCell>,
<DataListCell>
</ForwardRef>
</ForwardRef(Styled(PFDataListCell))>,
<ForwardRef(Styled(PFDataListCell))>
Slack
</DataListCell>,
</ForwardRef(Styled(PFDataListCell))>,
]
}
key=".0"
@ -77,17 +77,19 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "DataListCell-sc-18ntxrx-0",
"isStatic": true,
"lastClassName": "flJMIO",
"componentId": "sc-bdVaJa",
"isStatic": false,
"lastClassName": "kruorc",
"rules": Array [
"word-break:break-word;",
"
word-break: break-word;
",
],
},
"displayName": "DataListCell",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "DataListCell-sc-18ntxrx-0",
"styledComponentId": "sc-bdVaJa",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -97,10 +99,10 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
forwardedRef={null}
>
<PFDataListCell
className="DataListCell-sc-18ntxrx-0 flJMIO"
className="sc-bdVaJa kruorc"
>
<div
className="pf-c-data-list__cell DataListCell-sc-18ntxrx-0 flJMIO"
className="pf-c-data-list__cell sc-bdVaJa kruorc"
>
<Link
to={
@ -138,17 +140,19 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "DataListCell-sc-18ntxrx-0",
"isStatic": true,
"lastClassName": "flJMIO",
"componentId": "sc-bdVaJa",
"isStatic": false,
"lastClassName": "kruorc",
"rules": Array [
"word-break:break-word;",
"
word-break: break-word;
",
],
},
"displayName": "DataListCell",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "DataListCell-sc-18ntxrx-0",
"styledComponentId": "sc-bdVaJa",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -158,10 +162,10 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
forwardedRef={null}
>
<PFDataListCell
className="DataListCell-sc-18ntxrx-0 flJMIO"
className="sc-bdVaJa kruorc"
>
<div
className="pf-c-data-list__cell DataListCell-sc-18ntxrx-0 flJMIO"
className="pf-c-data-list__cell sc-bdVaJa kruorc"
>
Slack
</div>
@ -170,7 +174,7 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
</DataListCell>
</div>
</DataListItemCells>
<NotificationListItem__DataListAction
<Styled(DataListAction)
aria-label="actions"
aria-labelledby="items-list-item-9000"
id="items-list-item-9000"
@ -185,17 +189,22 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "NotificationListItem__DataListAction-w674ng-0",
"isStatic": true,
"lastClassName": "hhZchj",
"componentId": "sc-bwzfXH",
"isStatic": false,
"lastClassName": "llKtln",
"rules": Array [
"align-items:center;display:grid;grid-gap:16px;grid-template-columns:repeat(3,max-content);",
"
align-items: center;
display: grid;
grid-gap: 16px;
grid-template-columns: repeat(3, max-content);
",
],
},
"displayName": "NotificationListItem__DataListAction",
"displayName": "Styled(DataListAction)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "NotificationListItem__DataListAction-w674ng-0",
"styledComponentId": "sc-bwzfXH",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -209,12 +218,12 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
<DataListAction
aria-label="actions"
aria-labelledby="items-list-item-9000"
className="NotificationListItem__DataListAction-w674ng-0 hhZchj"
className="sc-bwzfXH llKtln"
id="items-list-item-9000"
rowid="items-list-item-9000"
>
<div
className="pf-c-data-list__item-action NotificationListItem__DataListAction-w674ng-0 hhZchj"
className="pf-c-data-list__item-action sc-bwzfXH llKtln"
rowid="items-list-item-9000"
>
<Component
@ -445,7 +454,7 @@ exports[`<NotificationListItem canToggleNotifications /> initially renders succe
</div>
</DataListAction>
</StyledComponent>
</NotificationListItem__DataListAction>
</Styled(DataListAction)>
</div>
</DataListItemRow>
</li>

View File

@ -4,13 +4,13 @@ import { withI18n } from '@lingui/react';
import { t, Trans } from '@lingui/macro';
import { Link } from 'react-router-dom';
import styled from 'styled-components';
import { Chip, Divider } from '@patternfly/react-core';
import { toTitleCase } from '../../util/strings';
import { Chip, Divider } from '@patternfly/react-core';
import CredentialChip from '../../components/CredentialChip';
import ChipGroup from '../../components/ChipGroup';
import { DetailList, Detail, UserDateDetail } from '../../components/DetailList';
import { VariablesDetail } from '../../components/CodeMirrorInput';
import CredentialChip from '../CredentialChip';
import ChipGroup from '../ChipGroup';
import { DetailList, Detail, UserDateDetail } from '../DetailList';
import { VariablesDetail } from '../CodeMirrorInput';
import PromptProjectDetail from './PromptProjectDetail';
import PromptInventorySourceDetail from './PromptInventorySourceDetail';
@ -43,7 +43,7 @@ function buildResourceLink(resource) {
workflow_job_template: `/templates/workflow_job_template/${resource.id}/details`,
};
return link[(resource?.type)] ? (
return link[resource?.type] ? (
<Link to={link[resource.type]}>{resource.name}</Link>
) : (
resource.name
@ -241,6 +241,10 @@ function PromptDetail({ i18n, resource, launchConfig = {}, overrides = {} }) {
);
}
PromptDetail.defaultProps = {
launchConfig: { defaults: {} },
};
PromptDetail.propTypes = {
resource: shape({}).isRequired,
launchConfig: shape({}),

View File

@ -4,10 +4,10 @@ import { t } from '@lingui/macro';
import { Link } from 'react-router-dom';
import { Chip, List, ListItem } from '@patternfly/react-core';
import { Detail, DeletedDetail } from '../../components/DetailList';
import { VariablesDetail } from '../../components/CodeMirrorInput';
import CredentialChip from '../../components/CredentialChip';
import ChipGroup from '../../components/ChipGroup';
import { Detail, DeletedDetail } from '../DetailList';
import { VariablesDetail } from '../CodeMirrorInput';
import CredentialChip from '../CredentialChip';
import ChipGroup from '../ChipGroup';
function PromptInventorySourceDetail({ i18n, resource }) {
const {

View File

@ -4,11 +4,11 @@ import { t } from '@lingui/macro';
import { Link } from 'react-router-dom';
import { Chip, List, ListItem } from '@patternfly/react-core';
import CredentialChip from '../../components/CredentialChip';
import ChipGroup from '../../components/ChipGroup';
import Sparkline from '../../components/Sparkline';
import { Detail, DeletedDetail } from '../../components/DetailList';
import { VariablesDetail } from '../../components/CodeMirrorInput';
import CredentialChip from '../CredentialChip';
import ChipGroup from '../ChipGroup';
import Sparkline from '../Sparkline';
import { Detail, DeletedDetail } from '../DetailList';
import { VariablesDetail } from '../CodeMirrorInput';
import { toTitleCase } from '../../util/strings';
function PromptJobTemplateDetail({ i18n, resource }) {

View File

@ -4,11 +4,11 @@ import { t } from '@lingui/macro';
import { Link } from 'react-router-dom';
import { Chip, List, ListItem } from '@patternfly/react-core';
import CredentialChip from '../../components/CredentialChip';
import ChipGroup from '../../components/ChipGroup';
import { Detail } from '../../components/DetailList';
import { VariablesDetail } from '../../components/CodeMirrorInput';
import Sparkline from '../../components/Sparkline';
import CredentialChip from '../CredentialChip';
import ChipGroup from '../ChipGroup';
import { Detail } from '../DetailList';
import { VariablesDetail } from '../CodeMirrorInput';
import Sparkline from '../Sparkline';
import { toTitleCase } from '../../util/strings';
function PromptWFJobTemplateDetail({ i18n, resource }) {

View File

@ -15,8 +15,8 @@ import { Link } from 'react-router-dom';
import styled from 'styled-components';
import DataListCell from '../DataListCell';
import ChipGroup from '../../components/ChipGroup';
import { DetailList, Detail } from '../../components/DetailList';
import ChipGroup from '../ChipGroup';
import { DetailList, Detail } from '../DetailList';
import { AccessRecord } from '../../types';
const DataListItemCells = styled(PFDataListItemCells)`

View File

@ -100,11 +100,11 @@ exports[`<DeleteRoleConfirmationModal /> should render initially 1`] = `
class="pf-c-title"
>
<div
class="AlertModal__Header-sc-9waqvl-0 dYqVFx"
class="sc-bdVaJa cjtBrl"
>
<svg
aria-hidden="true"
class="sc-bdVaJa hIExGP"
css="color: var(--pf-global--danger-color--100)"
fill="currentColor"
height="2em"
role="img"
@ -159,16 +159,20 @@ exports[`<DeleteRoleConfirmationModal /> should render initially 1`] = `
ariaDescribedById=""
className=""
header={
<AlertModal__Header>
<Styled(ExclamationCircleIcon)
<ForwardRef(styled.div)>
<ExclamationCircleIcon
color="currentColor"
css="color: var(--pf-global--danger-color--100)"
noVerticalAlign={false}
size="lg"
title={null}
/>
<Title
size="2xl"
>
Remove Team Access
</Title>
</AlertModal__Header>
</ForwardRef(styled.div)>
}
hideTitle={false}
isFooterLeftAligned={true}
@ -219,11 +223,11 @@ exports[`<DeleteRoleConfirmationModal /> should render initially 1`] = `
class="pf-c-title"
>
<div
class="AlertModal__Header-sc-9waqvl-0 dYqVFx"
class="sc-bdVaJa cjtBrl"
>
<svg
aria-hidden="true"
class="sc-bdVaJa hIExGP"
css="color: var(--pf-global--danger-color--100)"
fill="currentColor"
height="2em"
role="img"
@ -296,16 +300,20 @@ exports[`<DeleteRoleConfirmationModal /> should render initially 1`] = `
ariaDescribedById=""
className=""
header={
<AlertModal__Header>
<Styled(ExclamationCircleIcon)
<ForwardRef(styled.div)>
<ExclamationCircleIcon
color="currentColor"
css="color: var(--pf-global--danger-color--100)"
noVerticalAlign={false}
size="lg"
title={null}
/>
<Title
size="2xl"
>
Remove Team Access
</Title>
</AlertModal__Header>
</ForwardRef(styled.div)>
}
hideTitle={false}
id="pf-modal-0"
@ -432,24 +440,29 @@ exports[`<DeleteRoleConfirmationModal /> should render initially 1`] = `
<div
className="pf-c-title"
>
<AlertModal__Header>
<styled.div>
<StyledComponent
forwardedComponent={
Object {
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "AlertModal__Header-sc-9waqvl-0",
"isStatic": true,
"lastClassName": "dYqVFx",
"componentId": "sc-bdVaJa",
"isStatic": false,
"lastClassName": "cjtBrl",
"rules": Array [
"display:flex;svg{margin-right:16px;}",
"
display: flex;
svg {
margin-right: 16px;
}
",
],
},
"displayName": "AlertModal__Header",
"displayName": "styled.div",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "AlertModal__Header-sc-9waqvl-0",
"styledComponentId": "sc-bdVaJa",
"target": "div",
"toString": [Function],
"warnTooManyClasses": [Function],
@ -459,67 +472,36 @@ exports[`<DeleteRoleConfirmationModal /> should render initially 1`] = `
forwardedRef={null}
>
<div
className="AlertModal__Header-sc-9waqvl-0 dYqVFx"
className="sc-bdVaJa cjtBrl"
>
<Styled(ExclamationCircleIcon)
<ExclamationCircleIcon
color="currentColor"
css="color: var(--pf-global--danger-color--100)"
noVerticalAlign={false}
size="lg"
title={null}
>
<StyledComponent
forwardedComponent={
<svg
aria-hidden={true}
aria-labelledby={null}
css="color: var(--pf-global--danger-color--100)"
fill="currentColor"
height="2em"
role="img"
style={
Object {
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "sc-bdVaJa",
"isStatic": true,
"lastClassName": "hIExGP",
"rules": Array [
"color: var(--pf-global--danger-color--100)",
],
},
"displayName": "Styled(ExclamationCircleIcon)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "sc-bdVaJa",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
"withComponent": [Function],
"verticalAlign": "-0.25em",
}
}
forwardedRef={null}
size="lg"
viewBox="0 0 512 512"
width="2em"
>
<ExclamationCircleIcon
className="sc-bdVaJa hIExGP"
color="currentColor"
noVerticalAlign={false}
size="lg"
title={null}
>
<svg
aria-hidden={true}
aria-labelledby={null}
className="sc-bdVaJa hIExGP"
fill="currentColor"
height="2em"
role="img"
style={
Object {
"verticalAlign": "-0.25em",
}
}
viewBox="0 0 512 512"
width="2em"
>
<path
d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"
transform=""
/>
</svg>
</ExclamationCircleIcon>
</StyledComponent>
</Styled(ExclamationCircleIcon)>
<path
d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"
transform=""
/>
</svg>
</ExclamationCircleIcon>
<Title
size="2xl"
>
@ -531,7 +513,7 @@ exports[`<DeleteRoleConfirmationModal /> should render initially 1`] = `
</Title>
</div>
</StyledComponent>
</AlertModal__Header>
</styled.div>
</div>
<ModalBoxBody
id="pf-modal-0"

View File

@ -49,15 +49,16 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
<div
className="pf-c-data-list__item-row"
>
<ResourceAccessListItem__DataListItemCells
<Styled(DataListItemCells)
dataListCells={
Array [
<DataListCell>
<ForwardRef(Styled(PFDataListCell))>
<TextContent>
<Text
component="h6"
>
<Styled(Link)
<ForwardRef
css="font-weight: bold"
to={
Object {
"pathname": "/users/2/details",
@ -65,10 +66,10 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
}
>
jane
</Styled(Link)>
</ForwardRef>
</Text>
</TextContent>
<DetailList
<ForwardRef(Styled(DetailList))
stacked={true}
>
<Detail
@ -77,10 +78,10 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
label="Name"
value="jane brown"
/>
</DetailList>
</DataListCell>,
<DataListCell>
<DetailList
</ForwardRef(Styled(DetailList))>
</ForwardRef(Styled(PFDataListCell))>,
<ForwardRef(Styled(PFDataListCell))>
<ForwardRef(Styled(DetailList))
stacked={true}
>
<Detail
@ -101,8 +102,8 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</WithI18n>
}
/>
</DetailList>
</DataListCell>,
</ForwardRef(Styled(DetailList))>
</ForwardRef(Styled(PFDataListCell))>,
]
}
key=".0"
@ -111,12 +112,13 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
<StyledComponent
dataListCells={
Array [
<DataListCell>
<ForwardRef(Styled(PFDataListCell))>
<TextContent>
<Text
component="h6"
>
<Styled(Link)
<ForwardRef
css="font-weight: bold"
to={
Object {
"pathname": "/users/2/details",
@ -124,10 +126,10 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
}
>
jane
</Styled(Link)>
</ForwardRef>
</Text>
</TextContent>
<DetailList
<ForwardRef(Styled(DetailList))
stacked={true}
>
<Detail
@ -136,10 +138,10 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
label="Name"
value="jane brown"
/>
</DetailList>
</DataListCell>,
<DataListCell>
<DetailList
</ForwardRef(Styled(DetailList))>
</ForwardRef(Styled(PFDataListCell))>,
<ForwardRef(Styled(PFDataListCell))>
<ForwardRef(Styled(DetailList))
stacked={true}
>
<Detail
@ -160,8 +162,8 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</WithI18n>
}
/>
</DetailList>
</DataListCell>,
</ForwardRef(Styled(DetailList))>
</ForwardRef(Styled(PFDataListCell))>,
]
}
forwardedComponent={
@ -169,17 +171,19 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "ResourceAccessListItem__DataListItemCells-a3r9sq-0",
"isStatic": true,
"lastClassName": "WzRoT",
"componentId": "sc-bZQynM",
"isStatic": false,
"lastClassName": "dLjtme",
"rules": Array [
"align-items:start;",
"
align-items: start;
",
],
},
"displayName": "ResourceAccessListItem__DataListItemCells",
"displayName": "Styled(DataListItemCells)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "ResourceAccessListItem__DataListItemCells-a3r9sq-0",
"styledComponentId": "sc-bZQynM",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -190,15 +194,16 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
rowid="access-list-item"
>
<DataListItemCells
className="ResourceAccessListItem__DataListItemCells-a3r9sq-0 WzRoT"
className="sc-bZQynM dLjtme"
dataListCells={
Array [
<DataListCell>
<ForwardRef(Styled(PFDataListCell))>
<TextContent>
<Text
component="h6"
>
<Styled(Link)
<ForwardRef
css="font-weight: bold"
to={
Object {
"pathname": "/users/2/details",
@ -206,10 +211,10 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
}
>
jane
</Styled(Link)>
</ForwardRef>
</Text>
</TextContent>
<DetailList
<ForwardRef(Styled(DetailList))
stacked={true}
>
<Detail
@ -218,10 +223,10 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
label="Name"
value="jane brown"
/>
</DetailList>
</DataListCell>,
<DataListCell>
<DetailList
</ForwardRef(Styled(DetailList))>
</ForwardRef(Styled(PFDataListCell))>,
<ForwardRef(Styled(PFDataListCell))>
<ForwardRef(Styled(DetailList))
stacked={true}
>
<Detail
@ -242,14 +247,14 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</WithI18n>
}
/>
</DetailList>
</DataListCell>,
</ForwardRef(Styled(DetailList))>
</ForwardRef(Styled(PFDataListCell))>,
]
}
rowid="access-list-item"
>
<div
className="pf-c-data-list__item-content ResourceAccessListItem__DataListItemCells-a3r9sq-0 WzRoT"
className="pf-c-data-list__item-content sc-bZQynM dLjtme"
>
<DataListCell
key="name"
@ -260,17 +265,19 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "DataListCell-sc-18ntxrx-0",
"isStatic": true,
"lastClassName": "flJMIO",
"componentId": "sc-bdVaJa",
"isStatic": false,
"lastClassName": "kruorc",
"rules": Array [
"word-break:break-word;",
"
word-break: break-word;
",
],
},
"displayName": "DataListCell",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "DataListCell-sc-18ntxrx-0",
"styledComponentId": "sc-bdVaJa",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -280,10 +287,10 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
forwardedRef={null}
>
<PFDataListCell
className="DataListCell-sc-18ntxrx-0 flJMIO"
className="sc-bdVaJa kruorc"
>
<div
className="pf-c-data-list__cell DataListCell-sc-18ntxrx-0 flJMIO"
className="pf-c-data-list__cell sc-bdVaJa kruorc"
>
<TextContent>
<div
@ -296,90 +303,33 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
className=""
data-pf-content={true}
>
<Styled(Link)
<Link
css="font-weight: bold"
to={
Object {
"pathname": "/users/2/details",
}
}
>
<StyledComponent
forwardedComponent={
Object {
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "sc-bdVaJa",
"isStatic": true,
"lastClassName": "fqQVUT",
"rules": Array [
"font-weight: bold",
],
},
"displayName": "Styled(Link)",
"foldedComponentIds": Array [],
"propTypes": Object {
"innerRef": [Function],
"onClick": [Function],
"replace": [Function],
"target": [Function],
"to": [Function],
},
"render": [Function],
"styledComponentId": "sc-bdVaJa",
"target": Object {
"$$typeof": Symbol(react.forward_ref),
"displayName": "Link",
"propTypes": Object {
"innerRef": [Function],
"onClick": [Function],
"replace": [Function],
"target": [Function],
"to": [Function],
},
"render": [Function],
},
"toString": [Function],
"warnTooManyClasses": [Function],
"withComponent": [Function],
}
}
forwardedRef={null}
to={
Object {
"pathname": "/users/2/details",
}
}
<LinkAnchor
css="font-weight: bold"
href="/users/2/details"
navigate={[Function]}
>
<Link
className="sc-bdVaJa fqQVUT"
to={
Object {
"pathname": "/users/2/details",
}
}
<a
css="font-weight: bold"
href="/users/2/details"
onClick={[Function]}
>
<LinkAnchor
className="sc-bdVaJa fqQVUT"
href="/users/2/details"
navigate={[Function]}
>
<a
className="sc-bdVaJa fqQVUT"
href="/users/2/details"
onClick={[Function]}
>
jane
</a>
</LinkAnchor>
</Link>
</StyledComponent>
</Styled(Link)>
jane
</a>
</LinkAnchor>
</Link>
</h6>
</Text>
</div>
</TextContent>
<DetailList
<Styled(DetailList)
stacked={true}
>
<StyledComponent
@ -388,18 +338,24 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "DetailList-sc-12g7m4-0",
"componentId": "sc-bwzfXH",
"isStatic": false,
"lastClassName": "iAtits",
"lastClassName": "kVCDmm",
"rules": Array [
"display:grid;grid-gap:20px;align-items:center;",
"
display: grid;
grid-gap: 20px;
align-items: center;
",
[Function],
"
",
],
},
"displayName": "DetailList",
"displayName": "Styled(DetailList)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "DetailList-sc-12g7m4-0",
"styledComponentId": "sc-bwzfXH",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -410,15 +366,15 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
stacked={true}
>
<DetailList
className="DetailList-sc-12g7m4-0 iAtits"
className="sc-bwzfXH kVCDmm"
stacked={true}
>
<TextList
className="DetailList-sc-12g7m4-0 iAtits"
className="sc-bwzfXH kVCDmm"
component="dl"
>
<dl
className="DetailList-sc-12g7m4-0 iAtits"
className="sc-bwzfXH kVCDmm"
data-pf-content={true}
>
<Detail
@ -427,7 +383,7 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
label="Name"
value="jane brown"
>
<Detail__DetailName
<Styled(Component)
component="dt"
data-cy={null}
fullWidth={false}
@ -440,18 +396,22 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "Detail__DetailName-sc-16ypsyv-0",
"componentId": "sc-htpNat",
"isStatic": false,
"lastClassName": "erdIBg",
"lastClassName": "iYJcPm",
"rules": Array [
"font-weight:var(--pf-global--FontWeight--bold);",
"
font-weight: var(--pf-global--FontWeight--bold);
",
[Function],
"
",
],
},
"displayName": "Detail__DetailName",
"displayName": "Styled(Component)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "Detail__DetailName-sc-16ypsyv-0",
"styledComponentId": "sc-htpNat",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -462,18 +422,18 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
fullWidth={false}
>
<Component
className="Detail__DetailName-sc-16ypsyv-0 erdIBg"
className="sc-htpNat iYJcPm"
component="dt"
data-cy={null}
fullWidth={false}
>
<TextListItem
className="Detail__DetailName-sc-16ypsyv-0 erdIBg"
className="sc-htpNat iYJcPm"
component="dt"
data-cy={null}
>
<dt
className="Detail__DetailName-sc-16ypsyv-0 erdIBg"
className="sc-htpNat iYJcPm"
data-cy={null}
data-pf-content={true}
>
@ -482,8 +442,8 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</TextListItem>
</Component>
</StyledComponent>
</Detail__DetailName>
<Detail__DetailValue
</Styled(Component)>
<Styled(Component)
component="dd"
data-cy={null}
fullWidth={false}
@ -496,20 +456,25 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "Detail__DetailValue-sc-16ypsyv-1",
"componentId": "sc-bxivhb",
"isStatic": false,
"lastClassName": "kCDjmZ",
"lastClassName": "gxmPlV",
"rules": Array [
"word-break:break-all;",
"
word-break: break-all;
",
[Function],
" ",
"
",
[Function],
"
",
],
},
"displayName": "Detail__DetailValue",
"displayName": "Styled(Component)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "Detail__DetailValue-sc-16ypsyv-1",
"styledComponentId": "sc-bxivhb",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -520,18 +485,18 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
fullWidth={false}
>
<Component
className="Detail__DetailValue-sc-16ypsyv-1 kCDjmZ"
className="sc-bxivhb gxmPlV"
component="dd"
data-cy={null}
fullWidth={false}
>
<TextListItem
className="Detail__DetailValue-sc-16ypsyv-1 kCDjmZ"
className="sc-bxivhb gxmPlV"
component="dd"
data-cy={null}
>
<dd
className="Detail__DetailValue-sc-16ypsyv-1 kCDjmZ"
className="sc-bxivhb gxmPlV"
data-cy={null}
data-pf-content={true}
>
@ -540,13 +505,13 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</TextListItem>
</Component>
</StyledComponent>
</Detail__DetailValue>
</Styled(Component)>
</Detail>
</dl>
</TextList>
</DetailList>
</StyledComponent>
</DetailList>
</Styled(DetailList)>
</div>
</PFDataListCell>
</StyledComponent>
@ -560,17 +525,19 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "DataListCell-sc-18ntxrx-0",
"isStatic": true,
"lastClassName": "flJMIO",
"componentId": "sc-bdVaJa",
"isStatic": false,
"lastClassName": "kruorc",
"rules": Array [
"word-break:break-word;",
"
word-break: break-word;
",
],
},
"displayName": "DataListCell",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "DataListCell-sc-18ntxrx-0",
"styledComponentId": "sc-bdVaJa",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -580,12 +547,12 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
forwardedRef={null}
>
<PFDataListCell
className="DataListCell-sc-18ntxrx-0 flJMIO"
className="sc-bdVaJa kruorc"
>
<div
className="pf-c-data-list__cell DataListCell-sc-18ntxrx-0 flJMIO"
className="pf-c-data-list__cell sc-bdVaJa kruorc"
>
<DetailList
<Styled(DetailList)
stacked={true}
>
<StyledComponent
@ -594,18 +561,24 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "DetailList-sc-12g7m4-0",
"componentId": "sc-bwzfXH",
"isStatic": false,
"lastClassName": "iAtits",
"lastClassName": "kVCDmm",
"rules": Array [
"display:grid;grid-gap:20px;align-items:center;",
"
display: grid;
grid-gap: 20px;
align-items: center;
",
[Function],
"
",
],
},
"displayName": "DetailList",
"displayName": "Styled(DetailList)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "DetailList-sc-12g7m4-0",
"styledComponentId": "sc-bwzfXH",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -616,15 +589,15 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
stacked={true}
>
<DetailList
className="DetailList-sc-12g7m4-0 iAtits"
className="sc-bwzfXH kVCDmm"
stacked={true}
>
<TextList
className="DetailList-sc-12g7m4-0 iAtits"
className="sc-bwzfXH kVCDmm"
component="dl"
>
<dl
className="DetailList-sc-12g7m4-0 iAtits"
className="sc-bwzfXH kVCDmm"
data-pf-content={true}
>
<Detail
@ -645,7 +618,7 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</WithI18n>
}
>
<Detail__DetailName
<Styled(Component)
component="dt"
data-cy={null}
fullWidth={false}
@ -658,18 +631,22 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "Detail__DetailName-sc-16ypsyv-0",
"componentId": "sc-htpNat",
"isStatic": false,
"lastClassName": "erdIBg",
"lastClassName": "iYJcPm",
"rules": Array [
"font-weight:var(--pf-global--FontWeight--bold);",
"
font-weight: var(--pf-global--FontWeight--bold);
",
[Function],
"
",
],
},
"displayName": "Detail__DetailName",
"displayName": "Styled(Component)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "Detail__DetailName-sc-16ypsyv-0",
"styledComponentId": "sc-htpNat",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -680,18 +657,18 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
fullWidth={false}
>
<Component
className="Detail__DetailName-sc-16ypsyv-0 erdIBg"
className="sc-htpNat iYJcPm"
component="dt"
data-cy={null}
fullWidth={false}
>
<TextListItem
className="Detail__DetailName-sc-16ypsyv-0 erdIBg"
className="sc-htpNat iYJcPm"
component="dt"
data-cy={null}
>
<dt
className="Detail__DetailName-sc-16ypsyv-0 erdIBg"
className="sc-htpNat iYJcPm"
data-cy={null}
data-pf-content={true}
>
@ -700,8 +677,8 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</TextListItem>
</Component>
</StyledComponent>
</Detail__DetailName>
<Detail__DetailValue
</Styled(Component)>
<Styled(Component)
component="dd"
data-cy={null}
fullWidth={false}
@ -714,20 +691,25 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
"$$typeof": Symbol(react.forward_ref),
"attrs": Array [],
"componentStyle": ComponentStyle {
"componentId": "Detail__DetailValue-sc-16ypsyv-1",
"componentId": "sc-bxivhb",
"isStatic": false,
"lastClassName": "kCDjmZ",
"lastClassName": "gxmPlV",
"rules": Array [
"word-break:break-all;",
"
word-break: break-all;
",
[Function],
" ",
"
",
[Function],
"
",
],
},
"displayName": "Detail__DetailValue",
"displayName": "Styled(Component)",
"foldedComponentIds": Array [],
"render": [Function],
"styledComponentId": "Detail__DetailValue-sc-16ypsyv-1",
"styledComponentId": "sc-bxivhb",
"target": [Function],
"toString": [Function],
"warnTooManyClasses": [Function],
@ -738,18 +720,18 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
fullWidth={false}
>
<Component
className="Detail__DetailValue-sc-16ypsyv-1 kCDjmZ"
className="sc-bxivhb gxmPlV"
component="dd"
data-cy={null}
fullWidth={false}
>
<TextListItem
className="Detail__DetailValue-sc-16ypsyv-1 kCDjmZ"
className="sc-bxivhb gxmPlV"
component="dd"
data-cy={null}
>
<dd
className="Detail__DetailValue-sc-16ypsyv-1 kCDjmZ"
className="sc-bxivhb gxmPlV"
data-cy={null}
data-pf-content={true}
>
@ -944,13 +926,13 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</TextListItem>
</Component>
</StyledComponent>
</Detail__DetailValue>
</Styled(Component)>
</Detail>
</dl>
</TextList>
</DetailList>
</StyledComponent>
</DetailList>
</Styled(DetailList)>
</div>
</PFDataListCell>
</StyledComponent>
@ -958,7 +940,7 @@ exports[`<ResourceAccessListItem /> initially renders succesfully 1`] = `
</div>
</DataListItemCells>
</StyledComponent>
</ResourceAccessListItem__DataListItemCells>
</Styled(DataListItemCells)>
</div>
</DataListItemRow>
</li>

View File

@ -1,5 +1,3 @@
export { default as ResourceAccessList } from './ResourceAccessList';
export { default as ResourceAccessListItem } from './ResourceAccessListItem';
export {
default as DeleteRoleConfirmationModal,
} from './DeleteRoleConfirmationModal';
export { default as DeleteRoleConfirmationModal } from './DeleteRoleConfirmationModal';

View File

@ -17,7 +17,8 @@ import RoutedTabs from '../RoutedTabs';
import ContentError from '../ContentError';
import ContentLoading from '../ContentLoading';
import { TabbedCardHeader } from '../Card';
import { ScheduleDetail, ScheduleEdit } from '.';
import ScheduleDetail from './ScheduleDetail';
import ScheduleEdit from './ScheduleEdit';
import { SchedulesAPI } from '../../api';
function Schedule({ i18n, setBreadcrumb, unifiedJobTemplate }) {

View File

@ -4,21 +4,21 @@ import { RRule, rrulestr } from 'rrule';
import styled from 'styled-components';
import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import { Schedule } from '../../../types';
import { Chip, Title, Button } from '@patternfly/react-core';
import AlertModal from '../../../components/AlertModal';
import { CardBody, CardActionsRow } from '../../../components/Card';
import ContentError from '../../../components/ContentError';
import ContentLoading from '../../../components/ContentLoading';
import CredentialChip from '../../../components/CredentialChip';
import { DetailList, Detail, UserDateDetail } from '../../../components/DetailList';
import { ScheduleOccurrences, ScheduleToggle } from '../../../components/Schedule';
import { Schedule } from '../../../types';
import AlertModal from '../../AlertModal';
import { CardBody, CardActionsRow } from '../../Card';
import ContentError from '../../ContentError';
import ContentLoading from '../../ContentLoading';
import CredentialChip from '../../CredentialChip';
import { DetailList, Detail, UserDateDetail } from '../../DetailList';
import { ScheduleOccurrences, ScheduleToggle } from '..';
import { formatDateString } from '../../../util/dates';
import useRequest from '../../../util/useRequest';
import { SchedulesAPI } from '../../../api';
import DeleteButton from '../../../components/DeleteButton';
import ErrorDetail from '../../../components/ErrorDetail';
import ChipGroup from '../../../components/ChipGroup';
import DeleteButton from '../../DeleteButton';
import ErrorDetail from '../../ErrorDetail';
import ChipGroup from '../../ChipGroup';
const PromptTitle = styled(Title)`
--pf-c-title--m-md--FontWeight: 700;

View File

@ -44,7 +44,10 @@ function ScheduleOccurrences({ preview = { local: [], utc: [] }, i18n }) {
</SplitItem>
<SplitItem>
<MultiButtonToggle
buttons={[['local', 'Local'], ['utc', 'UTC']]}
buttons={[
['local', 'Local'],
['utc', 'UTC'],
]}
value={mode}
onChange={newMode => setMode(newMode)}
/>

View File

@ -1,7 +1,9 @@
import React from 'react';
import { withI18n } from '@lingui/react';
import { Switch, Route, useRouteMatch } from 'react-router-dom';
import { Schedule, ScheduleAdd, ScheduleList } from '.';
import Schedule from './Schedule';
import ScheduleAdd from './ScheduleAdd';
import ScheduleList from './ScheduleList';
function Schedules({
createSchedule,

View File

@ -2,8 +2,8 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Chip, Split as PFSplit, SplitItem } from '@patternfly/react-core';
import ChipGroup from '../../components/ChipGroup';
import styled from 'styled-components';
import ChipGroup from '../ChipGroup';
const Split = styled(PFSplit)`
margin: 20px 0px;

View File

@ -1,6 +1,6 @@
import React from 'react';
import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
import ChipGroup from '../../components/ChipGroup';
import ChipGroup from '../ChipGroup';
import SelectedList from './SelectedList';

View File

@ -77,6 +77,20 @@ const SkippedBottom = styled.div`
background-color: #2dbaba;
`;
RunningJob.displayName = 'RunningJob';
WaitingJob.displayName = 'WaitingJob';
FinishedJob.displayName = 'FinishedJob';
SuccessfulTop.displayName = 'SuccessfulTop';
SuccessfulBottom.displayName = 'SuccessfulBottom';
FailedTop.displayName = 'FailedTop';
FailedBottom.displayName = 'FailedBottom';
UnreachableTop.displayName = 'UnreachableTop';
UnreachableBottom.displayName = 'UnreachableBottom';
ChangedTop.displayName = 'ChangedTop';
ChangedBottom.displayName = 'ChangedBottom';
SkippedTop.displayName = 'SkippedTop';
SkippedBottom.displayName = 'SkippedBottom';
const StatusIcon = ({ status, ...props }) => {
return (
<div {...props}>

View File

@ -6,53 +6,53 @@ describe('StatusIcon', () => {
test('renders the successful status', () => {
const wrapper = mount(<StatusIcon status="successful" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__SuccessfulTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon__SuccessfulBottom')).toHaveLength(1);
expect(wrapper.find('StatusIcon SuccessfulTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon SuccessfulBottom')).toHaveLength(1);
});
test('renders running status', () => {
const wrapper = mount(<StatusIcon status="running" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__RunningJob')).toHaveLength(1);
expect(wrapper.find('StatusIcon RunningJob')).toHaveLength(1);
});
test('renders waiting status', () => {
const wrapper = mount(<StatusIcon status="waiting" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__WaitingJob')).toHaveLength(1);
expect(wrapper.find('StatusIcon WaitingJob')).toHaveLength(1);
});
test('renders failed status', () => {
const wrapper = mount(<StatusIcon status="failed" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__FailedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon__FailedBottom')).toHaveLength(1);
expect(wrapper.find('StatusIcon FailedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon FailedBottom')).toHaveLength(1);
});
test('renders a successful status when host status is "ok"', () => {
const wrapper = mount(<StatusIcon status="ok" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__SuccessfulTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon__SuccessfulBottom')).toHaveLength(1);
expect(wrapper.find('StatusIcon SuccessfulTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon SuccessfulBottom')).toHaveLength(1);
});
test('renders "failed" host status', () => {
const wrapper = mount(<StatusIcon status="failed" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__FailedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon__FailedBottom')).toHaveLength(1);
expect(wrapper.find('StatusIcon FailedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon FailedBottom')).toHaveLength(1);
});
test('renders "changed" host status', () => {
const wrapper = mount(<StatusIcon status="changed" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__ChangedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon__ChangedBottom')).toHaveLength(1);
expect(wrapper.find('StatusIcon ChangedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon ChangedBottom')).toHaveLength(1);
});
test('renders "skipped" host status', () => {
const wrapper = mount(<StatusIcon status="skipped" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__SkippedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon__SkippedBottom')).toHaveLength(1);
expect(wrapper.find('StatusIcon SkippedTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon SkippedBottom')).toHaveLength(1);
});
test('renders "unreachable" host status', () => {
const wrapper = mount(<StatusIcon status="unreachable" />);
expect(wrapper).toHaveLength(1);
expect(wrapper.find('StatusIcon__UnreachableTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon__UnreachableBottom')).toHaveLength(1);
expect(wrapper.find('StatusIcon UnreachableTop')).toHaveLength(1);
expect(wrapper.find('StatusIcon UnreachableBottom')).toHaveLength(1);
});
});

View File

@ -9,7 +9,8 @@ import {
WorkflowStateContext,
} from '../../contexts/Workflow';
import { constants as wfConstants } from './WorkflowUtils';
import { WorkflowActionTooltip, WorkflowActionTooltipItem } from '.';
import WorkflowActionTooltip from './WorkflowActionTooltip';
import WorkflowActionTooltipItem from './WorkflowActionTooltipItem';
const StartG = styled.g`
pointer-events: ${props => (props.ignorePointerEvents ? 'none' : 'auto')};

View File

@ -1,7 +1,5 @@
export { default as WorkflowActionTooltip } from './WorkflowActionTooltip';
export {
default as WorkflowActionTooltipItem,
} from './WorkflowActionTooltipItem';
export { default as WorkflowActionTooltipItem } from './WorkflowActionTooltipItem';
export { default as WorkflowHelp } from './WorkflowHelp';
export { default as WorkflowLegend } from './WorkflowLegend';
export { default as WorkflowLinkHelp } from './WorkflowLinkHelp';

View File

@ -13,7 +13,7 @@ import PaginatedDataList, {
} from '../../../components/PaginatedDataList';
import useRequest, { useDeleteItems } from '../../../util/useRequest';
import { getQSConfig, parseQueryString } from '../../../util/qs';
import { CredentialListItem } from '.';
import CredentialListItem from './CredentialListItem';
const QS_CONFIG = getQSConfig('credential', {
page: 1,

View File

@ -45,7 +45,10 @@ describe('<InventoryAdd />', () => {
expect(wrapper.length).toBe(1);
});
test('handleSubmit should call the api and redirect to details page', async () => {
const instanceGroups = [{ name: 'Bizz', id: 1 }, { name: 'Buzz', id: 2 }];
const instanceGroups = [
{ name: 'Bizz', id: 1 },
{ name: 'Buzz', id: 2 },
];
await waitForElement(wrapper, 'isLoading', el => el.length === 0);
wrapper.find('InventoryForm').prop('onSubmit')({

View File

@ -4,7 +4,11 @@ import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import { Button, Chip } from '@patternfly/react-core';
import { CardBody, CardActionsRow } from '../../../components/Card';
import { DetailList, Detail, UserDateDetail } from '../../../components/DetailList';
import {
DetailList,
Detail,
UserDateDetail,
} from '../../../components/DetailList';
import { VariablesDetail } from '../../../components/CodeMirrorInput';
import DeleteButton from '../../../components/DeleteButton';
import ContentError from '../../../components/ContentError';

View File

@ -90,11 +90,11 @@ describe('<InventoryDetail />', () => {
expectDetailToMatch(wrapper, 'Type', 'Inventory');
const org = wrapper.find('Detail[label="Organization"]');
expect(org.prop('value')).toMatchInlineSnapshot(`
<Link
<ForwardRef
to="/organizations/1/details"
>
The Organization
</Link>
</ForwardRef>
`);
const vars = wrapper.find('VariablesDetail');
expect(vars).toHaveLength(1);

View File

@ -110,7 +110,10 @@ describe('<InventoryEdit />', () => {
test('handleSubmit should post to the api', async () => {
await waitForElement(wrapper, 'isLoading', el => el.length === 0);
const instanceGroups = [{ name: 'Bizz', id: 2 }, { name: 'Buzz', id: 3 }];
const instanceGroups = [
{ name: 'Bizz', id: 2 },
{ name: 'Buzz', id: 3 },
];
wrapper.find('InventoryForm').prop('onSubmit')({
name: 'Foo',
id: 13,

View File

@ -18,7 +18,8 @@ import { PencilAltIcon } from '@patternfly/react-icons';
import { timeOfDay } from '../../../util/dates';
import { InventoriesAPI } from '../../../api';
import { Inventory } from '../../../types';
import CopyButton from '../../../components/CopyButton/CopyButton';
import DataListCell from '../../../components/DataListCell';
import CopyButton from '../../../components/CopyButton';
const DataListAction = styled(_DataListAction)`
align-items: center;

View File

@ -9,11 +9,11 @@ import {
useRouteMatch,
useLocation,
} from 'react-router-dom';
import { CaretLeftIcon } from '@patternfly/react-icons';
import { CardActions } from '@patternfly/react-core';
import useRequest from '../../../util/useRequest';
import { InventoriesAPI } from '../../../api';
import { CaretLeftIcon } from '@patternfly/react-icons';
import { CardActions } from '@patternfly/react-core';
import { TabbedCardHeader } from '../../../components/Card';
import CardCloseButton from '../../../components/CardCloseButton';
import ContentError from '../../../components/ContentError';

View File

@ -2,7 +2,10 @@ import React from 'react';
import { act } from 'react-dom/test-utils';
import { createMemoryHistory } from 'history';
import { InventoriesAPI } from '../../../api';
import { mountWithContexts, waitForElement } from '../../../../testUtils/enzymeHelpers';
import {
mountWithContexts,
waitForElement,
} from '../../../../testUtils/enzymeHelpers';
import mockInventorySource from '../shared/data.inventory_source.json';
import InventorySource from './InventorySource';

View File

@ -15,7 +15,11 @@ import { CardBody, CardActionsRow } from '../../../components/Card';
import { VariablesDetail } from '../../../components/CodeMirrorInput';
import CredentialChip from '../../../components/CredentialChip';
import DeleteButton from '../../../components/DeleteButton';
import { DetailList, Detail, UserDateDetail } from '../../../components/DetailList';
import {
DetailList,
Detail,
UserDateDetail,
} from '../../../components/DetailList';
import ErrorDetail from '../../../components/ErrorDetail';
import { InventorySourcesAPI } from '../../../api';

View File

@ -1,7 +1,10 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
import { createMemoryHistory } from 'history';
import { mountWithContexts, waitForElement } from '../../../../testUtils/enzymeHelpers';
import {
mountWithContexts,
waitForElement,
} from '../../../../testUtils/enzymeHelpers';
import InventorySourceDetail from './InventorySourceDetail';
import mockInvSource from '../shared/data.inventory_source.json';
import { InventorySourcesAPI } from '../../../api';

View File

@ -43,7 +43,14 @@ describe('<InventorySourceList />', () => {
InventorySourcesAPI.readOptions.mockResolvedValue({
data: {
actions: {
GET: { source: { choices: [['scm', 'SCM'], ['ec2', 'EC2']] } },
GET: {
source: {
choices: [
['scm', 'SCM'],
['ec2', 'EC2'],
],
},
},
POST: {},
},
},
@ -247,7 +254,14 @@ describe('<InventorySourceList /> RBAC testing', () => {
InventorySourcesAPI.readOptions.mockResolvedValue({
data: {
actions: {
GET: { source: { choices: [['scm', 'SCM'], ['ec2', 'EC2']] } },
GET: {
source: {
choices: [
['scm', 'SCM'],
['ec2', 'EC2'],
],
},
},
},
},
});

View File

@ -100,6 +100,10 @@ function InventorySourceSyncButton({ onSyncLoading, source, i18n }) {
);
}
InventorySourceSyncButton.defaultProps = {
source: {},
};
InventorySourceSyncButton.propTypes = {
onSyncLoading: PropTypes.func.isRequired,
source: PropTypes.shape({}),

View File

@ -1,6 +1,9 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
import { mountWithContexts, waitForElement } from '../../../../testUtils/enzymeHelpers';
import {
mountWithContexts,
waitForElement,
} from '../../../../testUtils/enzymeHelpers';
import InventoryForm from './InventoryForm';
@ -47,7 +50,10 @@ const inventory = {
pending_deletion: false,
};
const instanceGroups = [{ name: 'Foo', id: 1 }, { name: 'Bar', id: 2 }];
const instanceGroups = [
{ name: 'Foo', id: 1 },
{ name: 'Bar', id: 2 },
];
describe('<InventoryForm />', () => {
let wrapper;
let onCancel;

View File

@ -59,14 +59,14 @@ describe('<JobDetail />', () => {
test('should display successful job status icon', () => {
const statusDetail = wrapper.find('Detail[label="Status"]');
expect(statusDetail.find('StatusIcon__SuccessfulTop')).toHaveLength(1);
expect(statusDetail.find('StatusIcon__SuccessfulBottom')).toHaveLength(1);
expect(statusDetail.find('StatusIcon SuccessfulTop')).toHaveLength(1);
expect(statusDetail.find('StatusIcon SuccessfulBottom')).toHaveLength(1);
});
test('should display successful project status icon', () => {
const statusDetail = wrapper.find('Detail[label="Project"]');
expect(statusDetail.find('StatusIcon__SuccessfulTop')).toHaveLength(1);
expect(statusDetail.find('StatusIcon__SuccessfulBottom')).toHaveLength(1);
expect(statusDetail.find('StatusIcon SuccessfulTop')).toHaveLength(1);
expect(statusDetail.find('StatusIcon SuccessfulBottom')).toHaveLength(1);
});
test('should properly delete job', async () => {

View File

@ -4,13 +4,13 @@ import PropTypes from 'prop-types';
import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import styled from 'styled-components';
import Entities from 'html-entities';
import { AllHtmlEntities } from 'html-entities';
import StatusIcon from '../../../components/StatusIcon';
import { DetailList, Detail } from '../../../components/DetailList';
import ContentEmpty from '../../../components/ContentEmpty';
import CodeMirrorInput from '../../../components/CodeMirrorInput';
const entities = new Entities.AllHtmlEntities();
const entities = new AllHtmlEntities();
const Modal = styled(PFModal)`
--pf-c-modal-box__footer--MarginTop: 0;

View File

@ -130,8 +130,8 @@ describe('HostEventModal', () => {
);
const icon = wrapper.find('StatusIcon');
expect(icon.prop('status')).toBe('ok');
expect(icon.find('StatusIcon__SuccessfulTop').length).toBe(1);
expect(icon.find('StatusIcon__SuccessfulBottom').length).toBe(1);
expect(icon.find('StatusIcon SuccessfulTop').length).toBe(1);
expect(icon.find('StatusIcon SuccessfulBottom').length).toBe(1);
});
test('should display skipped host status icon', () => {
@ -142,8 +142,8 @@ describe('HostEventModal', () => {
const icon = wrapper.find('StatusIcon');
expect(icon.prop('status')).toBe('skipped');
expect(icon.find('StatusIcon__SkippedTop').length).toBe(1);
expect(icon.find('StatusIcon__SkippedBottom').length).toBe(1);
expect(icon.find('StatusIcon SkippedTop').length).toBe(1);
expect(icon.find('StatusIcon SkippedBottom').length).toBe(1);
});
test('should display unreachable host status icon', () => {
@ -162,8 +162,8 @@ describe('HostEventModal', () => {
const icon = wrapper.find('StatusIcon');
expect(icon.prop('status')).toBe('unreachable');
expect(icon.find('StatusIcon__UnreachableTop').length).toBe(1);
expect(icon.find('StatusIcon__UnreachableBottom').length).toBe(1);
expect(icon.find('StatusIcon UnreachableTop').length).toBe(1);
expect(icon.find('StatusIcon UnreachableBottom').length).toBe(1);
});
test('should display failed host status icon', () => {
@ -183,8 +183,8 @@ describe('HostEventModal', () => {
const icon = wrapper.find('StatusIcon');
expect(icon.prop('status')).toBe('failed');
expect(icon.find('StatusIcon__FailedTop').length).toBe(1);
expect(icon.find('StatusIcon__FailedBottom').length).toBe(1);
expect(icon.find('StatusIcon FailedTop').length).toBe(1);
expect(icon.find('StatusIcon FailedBottom').length).toBe(1);
});
test('should display JSON tab content on tab click', () => {

View File

@ -1,6 +1,6 @@
import Ansi from 'ansi-to-html';
import hasAnsi from 'has-ansi';
import Entities from 'html-entities';
import { AllHtmlEntities } from 'html-entities';
import React from 'react';
import {
JobEventLine,
@ -35,7 +35,7 @@ const ansi = new Ansi({
15: '#FFF',
},
});
const entities = new Entities.AllHtmlEntities();
const entities = new AllHtmlEntities();
function getTimestamp({ created }) {
const date = new Date(created);

View File

@ -12,7 +12,7 @@ jest.mock('../../../api');
async function checkOutput(wrapper, expectedLines) {
await waitForElement(wrapper, 'div[type="job_event"]', el => el.length > 1);
const jobEventLines = wrapper.find('div[type="job_event_line_text"]');
const jobEventLines = wrapper.find('JobEventLineText div');
const actualLines = [];
jobEventLines.forEach(line => {
actualLines.push(line.text());
@ -67,58 +67,184 @@ describe('<JobOutput />', () => {
wrapper = mountWithContexts(<JobOutput job={mockJob} />);
await waitForElement(wrapper, 'JobEvent', el => el.length > 0);
await checkOutput(wrapper, [
'ok: [localhost] => (item=37) => {',
' "msg": "This is a debug message: 37"',
'}',
'ok: [localhost] => (item=38) => {',
' "msg": "This is a debug message: 38"',
'}',
'ok: [localhost] => (item=39) => {',
' "msg": "This is a debug message: 39"',
'}',
'ok: [localhost] => (item=40) => {',
' "msg": "This is a debug message: 40"',
'}',
'ok: [localhost] => (item=41) => {',
' "msg": "This is a debug message: 41"',
'}',
'ok: [localhost] => (item=42) => {',
' "msg": "This is a debug message: 42"',
'}',
'ok: [localhost] => (item=43) => {',
' "msg": "This is a debug message: 43"',
'}',
'ok: [localhost] => (item=44) => {',
' "msg": "This is a debug message: 44"',
'}',
'ok: [localhost] => (item=45) => {',
' "msg": "This is a debug message: 45"',
'}',
'ok: [localhost] => (item=46) => {',
' "msg": "This is a debug message: 46"',
'}',
'ok: [localhost] => (item=47) => {',
' "msg": "This is a debug message: 47"',
'}',
'ok: [localhost] => (item=48) => {',
' "msg": "This is a debug message: 48"',
'}',
'ok: [localhost] => (item=49) => {',
' "msg": "This is a debug message: 49"',
'}',
'ok: [localhost] => (item=50) => {',
' "msg": "This is a debug message: 50"',
'}',
'ok: [localhost] => (item=51) => {',
' "msg": "This is a debug message: 51"',
'}',
'ok: [localhost] => (item=52) => {',
' "msg": "This is a debug message: 52"',
'}',
'ok: [localhost] => (item=53) => {',
' "msg": "This is a debug message: 53"',
'}',
'ok: [localhost] => (item=54) => {',
' "msg": "This is a debug message: 54"',
'}',
'ok: [localhost] => (item=55) => {',
' "msg": "This is a debug message: 55"',
'}',
'ok: [localhost] => (item=56) => {',
' "msg": "This is a debug message: 56"',
'}',
'ok: [localhost] => (item=57) => {',
' "msg": "This is a debug message: 57"',
'}',
'ok: [localhost] => (item=58) => {',
' "msg": "This is a debug message: 58"',
'}',
'ok: [localhost] => (item=59) => {',
' "msg": "This is a debug message: 59"',
'}',
'ok: [localhost] => (item=60) => {',
' "msg": "This is a debug message: 60"',
'}',
'ok: [localhost] => (item=61) => {',
' "msg": "This is a debug message: 61"',
'}',
'ok: [localhost] => (item=62) => {',
' "msg": "This is a debug message: 62"',
'}',
'ok: [localhost] => (item=63) => {',
' "msg": "This is a debug message: 63"',
'}',
'ok: [localhost] => (item=64) => {',
' "msg": "This is a debug message: 64"',
'}',
'ok: [localhost] => (item=65) => {',
' "msg": "This is a debug message: 65"',
'}',
'ok: [localhost] => (item=66) => {',
' "msg": "This is a debug message: 66"',
'}',
'ok: [localhost] => (item=67) => {',
' "msg": "This is a debug message: 67"',
'}',
'ok: [localhost] => (item=68) => {',
' "msg": "This is a debug message: 68"',
'}',
'ok: [localhost] => (item=69) => {',
' "msg": "This is a debug message: 69"',
'}',
'ok: [localhost] => (item=70) => {',
' "msg": "This is a debug message: 70"',
'}',
'ok: [localhost] => (item=71) => {',
' "msg": "This is a debug message: 71"',
'}',
'ok: [localhost] => (item=72) => {',
' "msg": "This is a debug message: 72"',
'}',
'ok: [localhost] => (item=73) => {',
' "msg": "This is a debug message: 73"',
'}',
'ok: [localhost] => (item=74) => {',
' "msg": "This is a debug message: 74"',
'}',
'ok: [localhost] => (item=75) => {',
' "msg": "This is a debug message: 75"',
'}',
'ok: [localhost] => (item=76) => {',
' "msg": "This is a debug message: 76"',
'}',
'ok: [localhost] => (item=77) => {',
' "msg": "This is a debug message: 77"',
'}',
'ok: [localhost] => (item=78) => {',
' "msg": "This is a debug message: 78"',
'}',
'ok: [localhost] => (item=79) => {',
' "msg": "This is a debug message: 79"',
'}',
'ok: [localhost] => (item=80) => {',
' "msg": "This is a debug message: 80"',
'}',
'ok: [localhost] => (item=81) => {',
' "msg": "This is a debug message: 81"',
'}',
'ok: [localhost] => (item=82) => {',
' "msg": "This is a debug message: 82"',
'}',
'ok: [localhost] => (item=83) => {',
' "msg": "This is a debug message: 83"',
'}',
'ok: [localhost] => (item=84) => {',
' "msg": "This is a debug message: 84"',
'}',
'ok: [localhost] => (item=85) => {',
' "msg": "This is a debug message: 85"',
'}',
'ok: [localhost] => (item=86) => {',
' "msg": "This is a debug message: 86"',
'}',
'ok: [localhost] => (item=87) => {',
' "msg": "This is a debug message: 87"',
'}',
'ok: [localhost] => (item=88) => {',
' "msg": "This is a debug message: 88"',
'}',
'ok: [localhost] => (item=89) => {',
' "msg": "This is a debug message: 89"',
'}',
'ok: [localhost] => (item=90) => {',
' "msg": "This is a debug message: 90"',
'}',
'ok: [localhost] => (item=91) => {',
' "msg": "This is a debug message: 91"',
'}',
'ok: [localhost] => (item=92) => {',
' "msg": "This is a debug message: 92"',
'}',
'ok: [localhost] => (item=93) => {',
' "msg": "This is a debug message: 93"',
'}',
'ok: [localhost] => (item=94) => {',
' "msg": "This is a debug message: 94"',
'}',
'',
'PLAY [all] *********************************************************************15:37:25',
'PLAY RECAP *********************************************************************15:37:26',
'localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ',
'',
'TASK [debug] *******************************************************************15:37:25',
'ok: [localhost] => (item=1) => {',
' "msg": "This is a debug message: 1"',
'}',
'ok: [localhost] => (item=2) => {',
' "msg": "This is a debug message: 2"',
'}',
'ok: [localhost] => (item=3) => {',
' "msg": "This is a debug message: 3"',
'}',
'ok: [localhost] => (item=4) => {',
' "msg": "This is a debug message: 4"',
'}',
'ok: [localhost] => (item=5) => {',
' "msg": "This is a debug message: 5"',
'}',
'ok: [localhost] => (item=6) => {',
' "msg": "This is a debug message: 6"',
'}',
'ok: [localhost] => (item=7) => {',
' "msg": "This is a debug message: 7"',
'}',
'ok: [localhost] => (item=8) => {',
' "msg": "This is a debug message: 8"',
'}',
'ok: [localhost] => (item=9) => {',
' "msg": "This is a debug message: 9"',
'}',
'ok: [localhost] => (item=10) => {',
' "msg": "This is a debug message: 10"',
'}',
'ok: [localhost] => (item=11) => {',
' "msg": "This is a debug message: 11"',
'}',
'ok: [localhost] => (item=12) => {',
' "msg": "This is a debug message: 12"',
'}',
'ok: [localhost] => (item=13) => {',
' "msg": "This is a debug message: 13"',
'}',
'ok: [localhost] => (item=14) => {',
' "msg": "This is a debug message: 14"',
'}',
'ok: [localhost] => (item=15) => {',
' "msg": "This is a debug message: 15"',
'}',
'ok: [localhost] => (item=16) => {',
' "msg": "This is a debug message: 16"',
'}',
]);
expect(wrapper.find('JobOutput').length).toBe(1);

View File

@ -16,6 +16,7 @@ const BarSegment = styled.div`
background-color: ${props => props.color || 'inherit'};
flex-grow: ${props => props.count || 0};
`;
BarSegment.displayName = 'BarSegment';
const TooltipContent = styled.div`
align-items: center;

View File

@ -22,7 +22,7 @@ describe('<HostStatusBar />', () => {
});
test('should render five bar segments', () => {
expect(wrapper.find('HostStatusBar__BarSegment').length).toBe(5);
expect(wrapper.find('BarSegment').length).toBe(5);
});
test('tooltips should display host status and count', () => {
@ -44,7 +44,7 @@ describe('<HostStatusBar />', () => {
test('empty host counts should display tooltip and one bar segment', () => {
wrapper = mountWithContexts(<HostStatusBar />);
expect(wrapper.find('HostStatusBar__BarSegment').length).toBe(1);
expect(wrapper.find('BarSegment').length).toBe(1);
expect(wrapper.find('TooltipContent').text()).toEqual(
'Host status information for this job is unavailable.'
);

View File

@ -1,6 +1,6 @@
import styled from 'styled-components';
export default styled.div`
const JobEventLineNumber = styled.div`
color: #161b1f;
background-color: #ebebeb;
flex: 0 0 45px;
@ -10,3 +10,7 @@ export default styled.div`
border-right: 1px solid #d7d7d7;
user-select: none;
`;
JobEventLineNumber.displayName = 'JobEventLineNumber';
export default JobEventLineNumber;

View File

@ -1,6 +1,6 @@
import styled from 'styled-components';
export default styled.div`
const JobEventLineText = styled.div`
padding: 0 15px;
white-space: pre-wrap;
word-break: break-all;
@ -27,3 +27,7 @@ export default styled.div`
border-radius: 5px;
}
`;
JobEventLineText.displayName = 'JobEventLineText';
export default JobEventLineText;

View File

@ -5,7 +5,8 @@ import {
getScaleAndOffsetToFit,
getTranslatePointsForZoom,
} from '../../../components/Workflow/WorkflowUtils';
import { WorkflowOutputLink, WorkflowOutputNode } from '.';
import WorkflowOutputLink from './WorkflowOutputLink';
import WorkflowOutputNode from './WorkflowOutputNode';
import {
WorkflowHelp,
WorkflowLegend,

View File

@ -59,6 +59,8 @@ const NodeDefaultLabel = styled.p`
white-space: nowrap;
`;
Elapsed.displayName = 'Elapsed';
function WorkflowOutputNode({ i18n, mouseEnter, mouseLeave, node }) {
const history = useHistory();
const { nodePositions } = useContext(WorkflowStateContext);

View File

@ -73,7 +73,7 @@ describe('WorkflowOutputNode', () => {
</svg>
);
expect(wrapper.contains(<p>Automation JT</p>)).toEqual(true);
expect(wrapper.find('WorkflowOutputNode__Elapsed').text()).toBe('00:00:07');
expect(wrapper.find('WorkflowOutputNode Elapsed').text()).toBe('00:00:07');
});
test('node contents displayed correctly when Job Template deleted', () => {
const wrapper = mountWithContexts(
@ -88,7 +88,7 @@ describe('WorkflowOutputNode', () => {
</svg>
);
expect(wrapper.contains(<p>Automation JT 2</p>)).toEqual(true);
expect(wrapper.find('WorkflowOutputNode__Elapsed').text()).toBe('00:00:07');
expect(wrapper.find('WorkflowOutputNode Elapsed').text()).toBe('00:00:07');
});
test('node contents displayed correctly when Job deleted', () => {
const wrapper = mountWithContexts(

View File

@ -7,7 +7,7 @@ import { LoginForm, LoginPage as PFLoginPage } from '@patternfly/react-core';
import { RootAPI } from '../../api';
import { BrandName } from '../../variables';
import brandLogo from '../../../images/brand-logo.svg';
import brandLogo from './brand-logo.svg';
const LoginPage = styled(PFLoginPage)`
& .pf-c-brand {

View File

@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 500 500" style="enable-background:new 0 0 500 500;" xml:space="preserve">
<style type="text/css">
.st0{display:none;}
.st1{display:inline;fill:#ED1C24;}
.st2{fill:#42210B;}
.st3{fill:#FFFFFF;}
.st4{fill:#C69C6D;stroke:#8C6239;stroke-width:5;stroke-miterlimit:10;}
.st5{fill:#FFFFFF;stroke:#42210B;stroke-width:3;stroke-miterlimit:10;}
.st6{fill:#ED1C24;stroke:#8C6239;stroke-width:5;stroke-miterlimit:10;}
.st7{fill:#A67C52;}
.st8{fill:#ED1C24;}
</style>
<g class="st0">
<path class="st1" d="M319.8,169.3c1.5-14.2,13.7-27.2,29.9-31.9c-13.1,1.5-27.3-1.7-36-10c-8.7-8.3-10-21.9-1.4-30.1
c-12,6.7-28.1,8.1-41.4,3.4c-13.3-4.6-23.5-15.1-26.2-26.9c-2-8.8,0-17.9,2-26.7c-6.2,9.4-17.6,17.3-30.5,17.3
c-12.9,0.1-25.7-10.2-22.9-20.7c-5.5,7.8-11.4,15.9-21,20.2c-9.5,4.3-23.7,2.7-28.2-5.5c-1.6,10.8-7.5,22-19.1,27
c-9,3.9-21.5,2.2-28-3.8c5.7,11.4,4.3,25.3-4.1,35.6c-9.9,12.2-29.1,18.6-46.4,15.6c14.7,7.2,28.5,17.7,32.1,31.5
c3.7,13.8-7.1,30.7-24.1,31.7c13.6,3.1,28,7.4,35.6,17.2c7.6,9.8,2.9,26.4-11.1,28c12.8-2.6,27.4,3.9,31.9,14.2
c4.1,9.5-0.9,20.9-10.9,26.5c18.6-8.9,41-17.1,59.6-8.8c13.9,6.2,20.8,21.6,15.1,33.8c10.4-10.6,23-21.3,39.2-23.5
c12.8-1.8,27.5,4.6,31.9,14.1c-0.3-12.7,6.1-25.5,17.5-34c13.8-10.3,34.4-14,52-9.2c-11.1-7.8-14.9-22-8.9-33
c6-11,21.3-18,35.7-16.2C327.5,198.1,318.3,183.5,319.8,169.3z"/>
</g>
<g>
<g>
<g>
<path class="st2" d="M179.7,297.3c-10.1,3.2-20.3,6-30.6,8.4c-10.7,2.5-21.7,5-32.8,5.1C96,311.1,79.9,297.2,60,296.1
c-5.8-0.3-5.8,8.7,0,9c9.9,0.5,18.9,5.1,27.9,8.8c9.8,4,19.6,6.3,30.2,5.9c21.5-0.8,43.5-7.4,64-13.8
C187.6,304.3,185.2,295.6,179.7,297.3L179.7,297.3z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M322.2,194.8c17.9-8,36-18.5,44.3-37.2c4.2-9.3,6-19.2,7.2-29.3c1.5-11.7,2.5-23.4,3.7-35.2
c0.6-5.8-8.4-5.7-9,0c-1.1,10.3-2.1,20.6-3.3,30.9c-1.1,9.7-2.5,19.7-6.4,28.7c-7.5,17.5-24.6,26.8-41.2,34.2
C312.4,189.4,316.9,197.2,322.2,194.8L322.2,194.8z"/>
</g>
</g>
<g>
<ellipse transform="matrix(0.5541 -0.8324 0.8324 0.5541 -219.4917 376.0051)" class="st2" cx="241.2" cy="392.9" rx="65.5" ry="33.7"/>
</g>
<g>
<g>
<path class="st3" d="M224.1,442.5c22-11.5,38.7-31,47.1-54.3c2-5.5-6.7-7.8-8.7-2.4c-7.6,21.1-23.1,38.5-43,48.9
C214.4,437.4,218.9,445.1,224.1,442.5L224.1,442.5z"/>
</g>
</g>
<g>
<ellipse transform="matrix(0.9684 -0.2494 0.2494 0.9684 -66.4734 109.0276)" class="st2" cx="397" cy="316.8" rx="63.9" ry="32.9"/>
</g>
<g>
<g>
<path class="st3" d="M363.8,341.5c28.3,7,58.7-0.8,80.2-20.5c4.3-3.9-2.1-10.3-6.4-6.4c-19.1,17.5-46.4,24.4-71.5,18.2
C360.5,331.5,358.1,340.1,363.8,341.5L363.8,341.5z"/>
</g>
</g>
<path class="st4" d="M156.9,96c-25.4,4.5-32.9,20.2-45,46.9c-20.2,44.4,2,90.3,5.6,97.5c18.4,36.5,42.3,36.8,60,80.6
c8.6,21.2,4.6,25.2,13.1,37.5c20.4,29.2,63.7,36.1,91.9,33.8c40.3-3.3,91.5-28.8,108.8-82.5c17.1-53.2-6-112.1-41.2-131.2
c-25.3-13.7-44.9-0.5-71.2-20.6c-21.6-16.5-18.4-33.1-37.5-48.8C227.9,98.1,203.7,87.7,156.9,96z"/>
<ellipse transform="matrix(0.6622 -0.7494 0.7494 0.6622 65.2068 309.6339)" class="st2" cx="376" cy="82.5" rx="21" ry="15.5"/>
<g>
<g>
<path class="st3" d="M379.8,75.3c0.8,0.2-0.6-0.4-0.1-0.1c0.2,0.1,0.3,0.2,0.5,0.3c0.4,0.2-0.6-0.7-0.1-0.1
c0.1,0.1,0.7,0.8,0.2,0.2c-0.4-0.5,0,0,0.1,0.1c0.4,0.7,0,0.2,0-0.2c0,0.1,0.1,0.4,0.2,0.5c0.3,0.9-0.1-1,0-0.1
c0.1,2.3,2,4.6,4.5,4.5c2.3-0.1,4.6-2,4.5-4.5c-0.3-4.4-3-8.1-7.3-9.4c-2.2-0.7-5,0.8-5.5,3.1C376.1,72.2,377.4,74.5,379.8,75.3
L379.8,75.3z"/>
</g>
</g>
<ellipse transform="matrix(0.9999 -1.433736e-02 1.433736e-02 0.9999 -4.303 0.8051)" class="st2" cx="54" cy="300.5" rx="21" ry="15.5"/>
<g>
<g>
<path class="st3" d="M52.2,297.5c1.1-0.3,1.4-0.4,2.5,0c0.8,0.3,1.3,0.7,2,1.7c1.5,1.9,4.8,1.6,6.4,0c1.9-1.9,1.5-4.4,0-6.4
c-3.1-3.9-8.6-5.4-13.3-4C44.3,290.5,46.7,299.2,52.2,297.5L52.2,297.5z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M149.3,108.8c4.9-10.8-1.3-24.2-12.9-26.9c-1.9-0.4-2.7,2.4-0.8,2.9c9.6,2.3,15.3,13.5,11.2,22.5
C145.9,109,148.5,110.5,149.3,108.8L149.3,108.8z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M141.2,112.3c2.4-9.4-5.4-19.3-15.2-19c-1.9,0.1-1.9,3.1,0,3c7.8-0.2,14.2,7.6,12.3,15.2
C137.8,113.4,140.7,114.2,141.2,112.3L141.2,112.3z"/>
</g>
</g>
<g>
<g>
<path class="st2" d="M132.6,118c-1.1-8.3-10.9-13.4-18.2-9.1c-1.7,1-0.2,3.6,1.5,2.6c5.2-3,12.9,0.4,13.7,6.5
C129.8,119.9,132.8,119.9,132.6,118L132.6,118z"/>
</g>
</g>
<path class="st5" d="M215.5,166.5l34-73c0,0,35,0,46,21c7.5,14.3,8,39,8,39L215.5,166.5z"/>
<path class="st5" d="M208.2,170.5l-79.5-12.7c0,0-19.6,29-8.4,49.9c7.6,14.2,27.8,28.5,27.8,28.5L208.2,170.5z"/>
<path class="st2" d="M210.5,164.5l33-74c0,0-2.5-5.5-8-7s-12,0-12,0L210.5,164.5z"/>
<path class="st2" d="M207.4,165.3l-73.1-35c0,0-5.6,2.4-7.2,7.8c-1.6,5.5-0.3,12-0.3,12L207.4,165.3z"/>
<path d="M215.5,166.5L234,127c0,0,17-6,25.5,7.5c8.6,13.6-3.5,25.5-3.5,25.5L215.5,166.5z"/>
<path d="M206.7,170.9l-29.6,32c0,0-18,0.5-22-14.9c-4-15.6,11.1-23.2,11.1-23.2L206.7,170.9z"/>
<g>
<g>
<path class="st3" d="M243.4,139.1c-0.6,0.2-0.7,0.3-0.4,0.2c0.3-0.1,0.2-0.1-0.5,0.1c0.7,0-0.3,0-0.4-0.1c0.1,0,0.3,0.1,0.4,0.1
c0.3,0.1,0.2,0-0.4-0.2c0,0,0.6,0.3,0.6,0.3c0.5,0.2-0.9-0.6-0.1-0.1c0.6,0.4-0.3-0.5-0.1-0.1c0.3,0.5-0.3-1-0.1-0.2
c0.2,0.8,0-1,0-0.1c0,2.4,2.1,4.6,4.5,4.5c2.5-0.1,4.5-2,4.5-4.5c0-3-1.6-5.7-4.1-7.3c-2.6-1.7-5.6-1.6-8.4-0.4
c-2.2,0.9-2.8,4.3-1.6,6.2C238.7,139.7,241,140.1,243.4,139.1L243.4,139.1z"/>
</g>
</g>
<g>
<g>
<path class="st3" d="M173.5,176.4c-0.5-0.3-0.1,0,0.2,0.1c-0.7-0.6,0.3,0.5,0.1,0c-0.3-0.5,0.4,0.8,0.1,0.2
c-0.4-0.8,0.2,0.2,0,0.1c0,0,0-0.6,0-0.6c-0.1,0.1-0.1,1,0,0.3c-0.1,0.2-0.1,0.3-0.2,0.5c0.2-0.3,0.2-0.4,0-0.1
c-0.2,0.2-0.2,0.3-0.1,0.1c0.2-0.2,0.1-0.2-0.3,0.2c1.9-1.4,3-4,1.6-6.2c-1.2-1.9-4.1-3.1-6.2-1.6c-2.4,1.7-4,4.3-3.9,7.4
c0.1,3,1.6,5.7,4.1,7.3c2,1.2,5,0.5,6.2-1.6C176.3,180.4,175.7,177.7,173.5,176.4L173.5,176.4z"/>
</g>
</g>
<ellipse transform="matrix(0.862 -0.5069 0.5069 0.862 -88.3186 186.5516)" class="st6" cx="298.5" cy="255.5" rx="79.5" ry="68.5"/>
<g>
<g>
<path class="st7" d="M173.6,109.8c-2.1,2-3.9,4.6-3.6,7.6c0.3,3.5,2.8,6.6,6.6,6.7c6,0.2,11.5-7.7,8.2-13c-1-1.7-3.1-3.1-5.2-3
c-1.7,0.1-3.1,0.8-4.4,1.9c-2,1.8-2.8,5.2-1.9,7.7c2.4,6.6,11.8,5.9,13.8-0.7c0.7-2.5-0.9-5.6-3.5-6.2c-2.7-0.6-5.4,0.8-6.2,3.5
c0.6-2.1,3.1-2.6,4.6-1c0.8,0.9,1,1.8,0.8,2.8c0.2-0.5,0.1-0.4-0.1,0.3c-0.4,0.7-1,1.2-1.8,1.4c-0.9,0-1.8,0-2.7,0
c-1.8-0.6-2.5-1.6-2.3-3.1c-0.1-0.4-0.1-0.7,0.1-1c0.2-0.3,0.1-0.3-0.1,0.1c0.1-0.1,0.2-0.2,0.3-0.4c-0.2,0.3-0.5,0.5-0.7,0.8
c-0.1,0.1-0.2,0.2-0.3,0.3c-0.3,0.2-0.2,0.2,0.1-0.1c1.3,0.2,2.6,0.4,3.9,0.6c0.2,0.4,0.5,0.9,0.7,1.3c0.2,0.6-0.2,0.9-0.2,1.4
c0,0.4,0.4-0.5-0.1,0.1c0.3-0.4,0.6-0.7,1-1c1.9-1.8,2-5.3,0-7.1C178.7,107.9,175.6,107.8,173.6,109.8L173.6,109.8z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M151.2,248.6c-5.7,7,1.7,16.9,10,13.3c3.4-1.5,6.3-5,6.3-8.9c0-4.2-2.7-7.6-7-7.8c-3.1-0.1-5.8,3.3-4.8,6.3
c1.2,3.4,3.7,6.1,7.3,7c2.6,0.6,5.4-0.8,6.2-3.5c0.7-2.5-0.9-5.5-3.5-6.2c-1.7-0.4,0,0.1-0.2,0.1c-0.4,0-0.4-0.8-0.1-0.1
c-1.6,2.1-3.2,4.2-4.8,6.3c-2.4-0.1-2.8-1.1-3-2.6c0.1,0.7-0.1,0.2,0.1-0.1c0.7-0.9-0.5,0.5,0,0c-0.5,0.5-0.3,0.1-0.2,0.2
c0.1,0,0.6,0,0.7,0c0.4,0.1,0.5,0.4,0.8,0.6c0.2,0.3,0.2,0.2-0.1-0.2c0.1,0.1,0.1,0.3,0.2,0.4c0,1,0.1,1.1-0.7,2.1
c1.7-2.1,2-5,0-7.1C156.5,246.8,152.9,246.5,151.2,248.6L151.2,248.6z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M204.1,205.7c0.8,4.8,5.3,8.6,10.1,8.6c5.1,0,9.5-3.9,10.3-8.9c0.7-4.4-0.2-12.1-5.3-13.6
c-2.7-0.8-5.2,0.5-7,2.4c-1.1,1.2-1.5,1.7-3.1,1.2c0.7,2.8,1.5,5.6,2.2,8.4c0.2-0.2-0.5,0.2-0.5,0.2c6.3,1.4,8.9-8.2,2.7-9.6
c-3.5-0.8-6.6,0-9.3,2.4c-3,2.6-1.1,7.2,2.2,8.4c2.6,0.9,5.5,0.8,8-0.2c1.3-0.5,2.4-1.2,3.4-2.1c0.4-0.3,0.7-0.6,1-1
c0.2-0.3,0.4-0.5,0.6-0.7c0.4-0.4,0.3-0.4-0.5,0.3c-0.9,0-1.8,0-2.7,0c0.2,0.1,0.3,0.1,0.5,0.2c-0.7-0.4-1.5-0.9-2.2-1.3
c0.1,0.2,0.3,0.3,0.4,0.5c-0.4-0.7-0.9-1.5-1.3-2.2c0.4,1.2,0.8,2.5,1,3.7c0,0.4,0,0.8,0,1.2c0,0.5-0.5,0.9,0,0.4
c-0.8,0.6-0.9,0.2-1.1-0.9c-0.4-2.7-3.8-4.1-6.2-3.5C204.7,200.3,203.7,203,204.1,205.7L204.1,205.7z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M265.9,179.6c0.2,0.4,0.5,0.9,0.7,1.3c0.6,1.1,1.8,2,3,2.3c1.2,0.3,2.8,0.2,3.9-0.5c1.1-0.7,2-1.7,2.3-3
c0.3-1.4,0.1-2.6-0.5-3.9c-0.2-0.4-0.5-0.9-0.7-1.3c-0.6-1.1-1.8-2-3-2.3c-1.2-0.3-2.8-0.2-3.9,0.5c-1.1,0.7-2,1.7-2.3,3
C265.1,177.1,265.3,178.3,265.9,179.6L265.9,179.6z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M200.4,295.8c-6.1,1.6-8.1,8.6-5,13.7c2.8,4.7,9.1,7.2,14.3,5.4c4.9-1.7,7.8-7.1,6.3-12.2
c-0.8-2.7-2.7-4.8-5.3-5.8c-1.4-0.5-2.8-0.7-4.2-0.8c-0.1,0-0.9-0.1-0.9-0.1c0.2-0.4,1.2,2.5,0.9,0.7c0,0.9,0,1.8,0,2.7
c-0.1,0.1-0.1,0.1-0.2,0.2c3.1-5.6-5.5-10.7-8.6-5c-1.7,3-1.1,6.6,1.4,9c1.3,1.2,2.8,2,4.5,2.3c0.8,0.1,1.6,0.2,2.4,0.3
c0.4,0,0.7,0,1.1,0.1c0.2,0.1,0.1,0.1-0.2-0.1c0,0.1-0.6-0.5-0.6-0.5c-0.1-0.1-0.1-0.2,0-0.3c0.1-0.3,0.1-0.1-0.1,0.5
c-0.3-0.1,0.7-0.2-0.3-0.3c-0.9-0.1-1.1-0.6-1.8-0.9c0,0-0.2-0.3-0.3-0.3c0.3,0-0.8,1.2-0.8,1.2
C209.3,303.8,206.6,294.2,200.4,295.8L200.4,295.8z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M244.8,355.3c-4-6.2-11.2-2.3-12,3.9c-0.8,5.9,1.8,12,6.5,15.6c4.5,3.5,11.5,4.9,16.7,2.1
c6.4-3.3,5.4-9.8,4.9-15.9c-0.5-6.3-1.9-12-9.5-12.1c-5.1-0.1-13.1,0.2-14.5,6.4c-1.2,5.4,2.5,12.8,8.2,13.8
c6.2,1.1,11.2-5.5,7.8-11c-2.2-3.5-8.1-3.1-9.1,1.2c-1.1,4.4,0.5,8,4.1,10.6c5.2,3.8,10.2-4.8,5-8.6c0.2,0.2,0.4,0.5,0.5,0.7
c-3,0.4-6.1,0.8-9.1,1.2c-0.4-0.7,3.4-3.1,2.9-4.8c-0.8-2.6-1.7,1.4-1.9,1.1c0,0.1,5.2-0.1,5.6-0.4c0.7,0.1,0.8-0.1,0.2-0.6
c-0.4-0.7-0.5-0.8-0.4-0.3c-0.2,0.3,0.2,1.9,0.2,2.3c0.2,2,0.3,4,0.5,5.9c0.1,1.6,0.4,1.7-1.1,2c-1.3,0.2-2.9-0.3-4-0.9
c-1.4-0.8-2.5-2-3.1-3.5c-0.3-0.7-0.4-1.3-0.5-2c0-0.3-0.1-0.7,0-1c0.2-1.9-1.1-1.5-3.8,1.2c-1-0.8-2-1.5-3-2.3
c0.1,0.2,0.2,0.4,0.4,0.6C239.6,365.7,248.3,360.7,244.8,355.3L244.8,355.3z"/>
</g>
</g>
<g>
<g>
<path class="st7" d="M336.5,337.4c-2.4-1.5-5.1-2.5-7.9-1.8c-2.7,0.7-4.9,3.2-5.3,6c-0.9,6.4,6.3,8.3,11.2,8.4
c4.8,0.1,10.6-2.4,10.9-7.9c0.2-5.6-5.5-9.6-10.6-6.9c-5.7,3-0.7,11.6,5,8.6c-0.1,0.1-0.2,0.1-0.3,0.2c-0.9,0-1.8,0-2.7,0
c-2.1-0.4-1.4-4.8-0.3-4.3c0,0-1.3,0.3-1.3,0.3c-0.6,0-1.2,0-1.8-0.1c-0.5-0.1-1-0.2-1.5-0.4c-1.2-0.5-1-0.2,0.6,0.7
c0.2,0.8,0.5,1.7,0.7,2.5c-3.4,1.1-4.4,1.9-2.8,2.7c0.4,0.2,0.7,0.4,1.1,0.7C336.9,349.6,341.9,340.9,336.5,337.4L336.5,337.4z"
/>
</g>
</g>
<path class="st3" d="M224.3,256.5L252,273v-40l32,20v-38l28,17l4-28l23,12l-3-24c0,0-14-8-35.5-6.4c-11.6,0.9-24.3,6.8-33.5,11.4
c-14,7-23.7,18.9-31.2,29.1C227,238,224.3,256.5,224.3,256.5z"/>
<path class="st3" d="M372.9,248.9l-28.8-14.5l2.9,39.9l-33.3-17.7l2.7,37.9l-29.1-15l-2,28.2l-23.8-10.3l4.7,23.7
c0,0,14.5,7,35.9,3.8c11.5-1.7,23.7-8.5,32.6-13.8c13.5-8,22.3-20.5,29-31.2C371.5,267.5,372.9,248.9,372.9,248.9z"/>
</g>
<g>
<g>
<path class="st8" d="M235.2,121.6c8.5-3.1,23.2-0.1,27.8,8.4c2.3,4.4,4.5,9.9,4.5,14.9c0.1,5.5-2.7,10.5-5.3,15.3
c-1.5,2.8,2.8,5.4,4.3,2.5c3.1-5.8,6.3-11.9,6-18.7c-0.3-6-2.8-12.8-5.9-17.9c-6-9.5-22.6-13.1-32.7-9.4
C230.9,117.8,232.2,122.7,235.2,121.6L235.2,121.6z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M241.1,110.5c11.6-2.3,25.6,2.3,32.2,12.4c6.6,10.2,6.1,22.8,3.1,34.2c-1.3,5,6.4,7.1,7.7,2.1
c3.8-14.3,3.8-30.3-5.5-42.6c-8.9-11.7-25.5-16.6-39.6-13.8C233.9,103.8,236.1,111.5,241.1,110.5L241.1,110.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M245.4,97.5c7.8-1.8,15.5,0,22.9,2.8c7.2,2.7,15,6.1,20.3,11.8c10.7,11.7,9.5,29.3,8.7,44
c-0.3,6.4,9.7,6.4,10,0c1-17.9,1.2-38.5-12.7-52.1c-6.4-6.3-15.3-10.2-23.6-13.3c-9.1-3.4-18.6-4.9-28.2-2.8
C236.5,89.2,239.1,98.9,245.4,97.5L245.4,97.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M155.8,158.5c-13.1,4.8-14.2,21.6-10.1,33.1c4.3,12,15.2,20.6,28.2,20.5c3.2,0,3.2-5,0-5
c-9.9,0.1-18.6-5.9-22.6-14.9c-3.9-8.6-5.2-24.8,5.8-28.9C160.2,162.3,158.9,157.4,155.8,158.5L155.8,158.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M164.1,216.5c-11.4-2.2-18.8-11.4-22.7-21.9c-3.6-9.6-7.7-25.3,1.2-33.1c3.9-3.4-1.8-9-5.7-5.7
c-11.3,9.9-7.9,28.5-3.3,40.9c4.8,13,14.1,24.7,28.3,27.5C167,225.2,169.1,217.5,164.1,216.5L164.1,216.5z"/>
</g>
</g>
<g>
<g>
<path class="st8" d="M152,231.7c-27.3-13.3-38.1-46.5-23.3-73.2c3.1-5.6-5.5-10.7-8.6-5c-17.3,31.2-5.3,71.1,26.9,86.9
C152.7,243.1,157.8,234.5,152,231.7L152,231.7z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -92,7 +92,10 @@ describe('<OrganizationAdd />', () => {
});
test('AnsibleSelect component renders if there are virtual environments', async () => {
const mockInstanceGroups = [{ name: 'One', id: 1 }, { name: 'Two', id: 2 }];
const mockInstanceGroups = [
{ name: 'One', id: 1 },
{ name: 'Two', id: 2 },
];
OrganizationsAPI.readInstanceGroups.mockReturnValue({
data: {
results: mockInstanceGroups,
@ -119,7 +122,10 @@ describe('<OrganizationAdd />', () => {
});
test('AnsibleSelect component does not render if there are 0 virtual environments', async () => {
const mockInstanceGroups = [{ name: 'One', id: 1 }, { name: 'Two', id: 2 }];
const mockInstanceGroups = [
{ name: 'One', id: 1 },
{ name: 'Two', id: 2 },
];
OrganizationsAPI.readInstanceGroups.mockReturnValue({
data: {
results: mockInstanceGroups,

View File

@ -4,7 +4,11 @@ import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import { Button, Chip } from '@patternfly/react-core';
import { OrganizationsAPI } from '../../../api';
import { DetailList, Detail, UserDateDetail } from '../../../components/DetailList';
import {
DetailList,
Detail,
UserDateDetail,
} from '../../../components/DetailList';
import { CardBody, CardActionsRow } from '../../../components/Card';
import AlertModal from '../../../components/AlertModal';
import ChipGroup from '../../../components/ChipGroup';

View File

@ -28,7 +28,10 @@ describe('<OrganizationDetail />', () => {
};
const mockInstanceGroups = {
data: {
results: [{ name: 'One', id: 1 }, { name: 'Two', id: 2 }],
results: [
{ name: 'One', id: 1 },
{ name: 'Two', id: 2 },
],
},
};

View File

@ -64,7 +64,10 @@ describe('<OrganizationEdit />', () => {
});
test('should navigate to organization detail when cancel is clicked', async () => {
const mockInstanceGroups = [{ name: 'One', id: 1 }, { name: 'Two', id: 2 }];
const mockInstanceGroups = [
{ name: 'One', id: 1 },
{ name: 'Two', id: 2 },
];
OrganizationsAPI.readInstanceGroups.mockReturnValue({
data: {
results: mockInstanceGroups,

View File

@ -27,7 +27,10 @@ describe('<OrganizationForm />', () => {
instance_groups: '/api/v2/organizations/1/instance_groups',
},
};
const mockInstanceGroups = [{ name: 'One', id: 1 }, { name: 'Two', id: 2 }];
const mockInstanceGroups = [
{ name: 'One', id: 1 },
{ name: 'Two', id: 2 },
];
afterEach(() => {
jest.clearAllMocks();
@ -232,7 +235,10 @@ describe('<OrganizationForm />', () => {
await waitForElement(wrapper, 'ContentLoading', el => el.length === 0);
await act(async () => {
wrapper.find('InstanceGroupsLookup').prop('onChange')(
[{ name: 'One', id: 1 }, { name: 'Three', id: 3 }],
[
{ name: 'One', id: 1 },
{ name: 'Three', id: 3 },
],
'instanceGroups'
);
});

View File

@ -19,6 +19,7 @@ import { timeOfDay } from '../../../util/dates';
import { ProjectsAPI } from '../../../api';
import ClipboardCopyButton from '../../../components/ClipboardCopyButton';
import StatusIcon from '../../../components/StatusIcon';
import DataListCell from '../../../components/DataListCell';
import { toTitleCase } from '../../../util/strings';
import CopyButton from '../../../components/CopyButton';
import ProjectSyncButton from '../shared/ProjectSyncButton';

View File

@ -1,7 +1,7 @@
import React from 'react';
import { mountWithContexts } from '../../../../testUtils/enzymeHelpers';
import { act } from 'react-dom/test-utils';
import { mountWithContexts } from '../../../../testUtils/enzymeHelpers';
import ProjectsListItem from './ProjectListItem';
import { ProjectsAPI } from '../../../api';

View File

@ -4,8 +4,8 @@ import { useLocation, useRouteMatch, useParams } from 'react-router-dom';
import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import { TeamsAPI } from '../../../api';
import { Card } from '@patternfly/react-core';
import { TeamsAPI } from '../../../api';
import useRequest from '../../../util/useRequest';
import DataListToolbar from '../../../components/DataListToolbar';

View File

@ -1,9 +1,12 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
import { createMemoryHistory } from 'history';
import { TeamsAPI } from '../../../api';
import { Route } from 'react-router-dom';
import { mountWithContexts, waitForElement } from '../../../../testUtils/enzymeHelpers';
import { TeamsAPI } from '../../../api';
import {
mountWithContexts,
waitForElement,
} from '../../../../testUtils/enzymeHelpers';
import TeamAccessList from './TeamAccessList';
jest.mock('../../../api/models/Teams');

View File

@ -6,9 +6,8 @@ import {
DataListItemCells,
DataListItemRow,
} from '@patternfly/react-core';
import DataListCell from '../../../components/DataListCell';
import { Link } from 'react-router-dom';
import DataListCell from '../../../components/DataListCell';
function TeamAccessListItem({ role, i18n, detailUrl }) {
const labelId = `teamRole-${role.id}`;

View File

@ -13,7 +13,10 @@ jest.mock('../../../api');
const mockInstanceGroups = {
count: 5,
data: {
results: [{ id: 1, name: 'IG1' }, { id: 2, name: 'IG2' }],
results: [
{ id: 1, name: 'IG1' },
{ id: 2, name: 'IG2' },
],
},
};

View File

@ -46,7 +46,10 @@ const mockJobTemplate = {
edit: true,
},
labels: {
results: [{ name: 'Sushi', id: 1 }, { name: 'Major', id: 2 }],
results: [
{ name: 'Sushi', id: 1 },
{ name: 'Major', id: 2 },
],
},
inventory: {
id: 2,
@ -309,7 +312,10 @@ describe('<JobTemplateEdit />', () => {
edit: true,
},
labels: {
results: [{ name: 'Sushi', id: 1 }, { name: 'Major', id: 2 }],
results: [
{ name: 'Sushi', id: 1 },
{ name: 'Major', id: 2 },
],
},
inventory: {
id: 2,

View File

@ -13,11 +13,10 @@ import {
Stack,
StackItem,
} from '@patternfly/react-core';
import DataListCell from '../../../components/DataListCell';
import ChipGroup from '../../../components/ChipGroup';
import { CaretDownIcon, CaretUpIcon } from '@patternfly/react-icons';
import styled from 'styled-components';
import DataListCell from '../../../components/DataListCell';
import ChipGroup from '../../../components/ChipGroup';
const DataListAction = styled(_DataListAction)`
margin-left: 0;

View File

@ -19,7 +19,11 @@ import ChipGroup from '../../../components/ChipGroup';
import { VariablesDetail } from '../../../components/CodeMirrorInput';
import ContentLoading from '../../../components/ContentLoading';
import DeleteButton from '../../../components/DeleteButton';
import { DetailList, Detail, UserDateDetail } from '../../../components/DetailList';
import {
DetailList,
Detail,
UserDateDetail,
} from '../../../components/DetailList';
import ErrorDetail from '../../../components/ErrorDetail';
import LaunchButton from '../../../components/LaunchButton';
import Sparkline from '../../../components/Sparkline';

View File

@ -100,7 +100,7 @@ describe('<WorkflowJobTemplateDetail/>', () => {
{
element: 'Detail[label="Webhook URL"]',
prop: 'value',
value: 'http://127.0.0.1:3001/api/v2/workflow_job_templates/45/github/',
value: 'http://localhost/api/v2/workflow_job_templates/45/github/',
},
{
element: "Detail[label='Webhook Service']",
@ -136,7 +136,7 @@ describe('<WorkflowJobTemplateDetail/>', () => {
const labels = wrapper
.find('Detail[label="Labels"]')
.find('Chip[component="li"]');
const sparkline = wrapper.find('Sparkline__Link');
const sparkline = wrapper.find('Sparkline Link');
expect(organization.text()).toBe('Org');
expect(inventory.text()).toEqual('Bar');

View File

@ -23,7 +23,10 @@ const mockTemplate = {
inventory: { id: 1, name: 'Inventory 1' },
organization: { id: 1, name: 'Organization 1' },
labels: {
results: [{ name: 'Label 1', id: 1 }, { name: 'Label 2', id: 2 }],
results: [
{ name: 'Label 1', id: 1 },
{ name: 'Label 2', id: 2 },
],
},
},
scm_branch: 'devel',
@ -187,7 +190,10 @@ describe('<WorkflowJobTemplateEdit/>', () => {
summary_fields: {
inventory: { id: 1, name: 'Inventory 1' },
labels: {
results: [{ name: 'Label 1', id: 1 }, { name: 'Label 2', id: 2 }],
results: [
{ name: 'Label 1', id: 1 },
{ name: 'Label 2', id: 2 },
],
},
},
scm_branch: 'devel',

View File

@ -14,7 +14,8 @@ import {
} from '../../../../../contexts/Workflow';
import Wizard from '../../../../../components/Wizard';
import { NodeTypeStep } from './NodeTypeStep';
import { RunStep, NodeNextButton } from '.';
import RunStep from './RunStep';
import NodeNextButton from './NodeNextButton';
function NodeModal({ askLinkType, i18n, onSave, title }) {
const history = useHistory();

View File

@ -2,6 +2,4 @@ export { default as InventorySourcesList } from './InventorySourcesList';
export { default as JobTemplatesList } from './JobTemplatesList';
export { default as NodeTypeStep } from './NodeTypeStep';
export { default as ProjectsList } from './ProjectsList';
export {
default as WorkflowJobTemplatesList,
} from './WorkflowJobTemplatesList';
export { default as WorkflowJobTemplatesList } from './WorkflowJobTemplatesList';

View File

@ -21,7 +21,8 @@ import {
WorkflowStartNode,
WorkflowTools,
} from '../../../components/Workflow';
import { VisualizerLink, VisualizerNode } from '.';
import VisualizerLink from './VisualizerLink';
import VisualizerNode from './VisualizerNode';
const PotentialLink = styled.polyline`
pointer-events: none;

View File

@ -38,7 +38,12 @@ describe('<JobTemplateForm />', () => {
id: 3,
name: 'qux',
},
labels: { results: [{ name: 'Sushi', id: 1 }, { name: 'Major', id: 2 }] },
labels: {
results: [
{ name: 'Sushi', id: 1 },
{ name: 'Major', id: 2 },
],
},
credentials: [
{ id: 1, kind: 'cloud', name: 'Foo' },
{ id: 2, kind: 'ssh', name: 'Bar' },

View File

@ -6,7 +6,10 @@ import LabelSelect from './LabelSelect';
jest.mock('../../../api');
const options = [{ id: 1, name: 'one' }, { id: 2, name: 'two' }];
const options = [
{ id: 1, name: 'one' },
{ id: 2, name: 'two' },
];
describe('<LabelSelect />', () => {
afterEach(() => {
@ -40,7 +43,10 @@ describe('<LabelSelect />', () => {
});
LabelsAPI.read.mockReturnValueOnce({
data: {
results: [{ id: 3, name: 'three' }, { id: 4, name: 'four' }],
results: [
{ id: 3, name: 'three' },
{ id: 4, name: 'four' },
],
},
});
let wrapper;

View File

@ -9,10 +9,10 @@ import {
InputGroup,
Button,
} from '@patternfly/react-core';
import { useField } from 'formik';
import ContentError from '../../../components/ContentError';
import ContentLoading from '../../../components/ContentLoading';
import useRequest from '../../../util/useRequest';
import { useField } from 'formik';
import { FormColumnLayout } from '../../../components/FormLayout';
import { CredentialLookup } from '../../../components/Lookup';
import AnsibleSelect from '../../../components/AnsibleSelect';

View File

@ -32,7 +32,10 @@ describe('<WorkflowJobTemplateForm/>', () => {
inventory: { id: 1, name: 'Inventory 1' },
organization: { id: 1, name: 'Organization 1' },
labels: {
results: [{ name: 'Label 1', id: 1 }, { name: 'Label 2', id: 2 }],
results: [
{ name: 'Label 1', id: 1 },
{ name: 'Label 2', id: 2 },
],
},
},
scm_branch: 'devel',
@ -61,7 +64,10 @@ describe('<WorkflowJobTemplateForm/>', () => {
results: [{ id: 1 }, { id: 2 }],
});
InventoriesAPI.read.mockResolvedValue({
results: [{ id: 1, name: 'Foo' }, { id: 2, name: 'Bar' }],
results: [
{ id: 1, name: 'Foo' },
{ id: 2, name: 'Bar' },
],
});
history = createMemoryHistory({

View File

@ -1,9 +1,12 @@
import React from 'react';
import { act } from 'react-dom/test-utils';
import { createMemoryHistory } from 'history';
import { UsersAPI } from '../../../api';
import { Route } from 'react-router-dom';
import { mountWithContexts, waitForElement } from '../../../../testUtils/enzymeHelpers';
import { UsersAPI } from '../../../api';
import {
mountWithContexts,
waitForElement,
} from '../../../../testUtils/enzymeHelpers';
import UserAccessList from './UserAccessList';
jest.mock('../../../api/models/Users');

View File

@ -6,9 +6,8 @@ import {
DataListItemCells,
DataListItemRow,
} from '@patternfly/react-core';
import DataListCell from '../../../components/DataListCell';
import { Link } from 'react-router-dom';
import DataListCell from '../../../components/DataListCell';
function UserAccessListItem({ role, i18n, detailUrl }) {
const labelId = `userRole-${role.id}`;