]> source.dussan.org Git - sonarqube.git/commitdiff
fix displaying organization name on project dashboard
authorStas Vilchik <stas.vilchik@sonarsource.com>
Wed, 4 Oct 2017 16:16:08 +0000 (18:16 +0200)
committerStas Vilchik <stas.vilchik@sonarsource.com>
Thu, 5 Oct 2017 10:12:43 +0000 (12:12 +0200)
server/sonar-web/src/main/js/app/components/ComponentContainer.tsx
server/sonar-web/src/main/js/app/components/__tests__/ComponentContainer-test.tsx

index 5c4287ae23175c37ce1a171f69844951d7dbaa31..a20ec1d527c7807e7b3067ff7ab9fdcb8d184c47 100644 (file)
@@ -18,6 +18,7 @@
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  */
 import * as React from 'react';
+import { connect } from 'react-redux';
 import ComponentContainerNotFound from './ComponentContainerNotFound';
 import ComponentNav from './nav/component/ComponentNav';
 import { Branch, Component } from '../types';
@@ -25,12 +26,16 @@ import handleRequiredAuthorization from '../utils/handleRequiredAuthorization';
 import { getBranches } from '../../api/branches';
 import { getComponentData } from '../../api/components';
 import { getComponentNavigation } from '../../api/nav';
+import { fetchOrganizations } from '../../store/rootActions';
+import { areThereCustomOrganizations } from '../../store/rootReducer';
 
 interface Props {
   children: any;
+  fetchOrganizations: (organizations: string[]) => void;
   location: {
     query: { branch?: string; id: string };
   };
+  organizationsEnabled?: boolean;
 }
 
 interface State {
@@ -39,7 +44,7 @@ interface State {
   component: Component | null;
 }
 
-export default class ComponentContainer extends React.PureComponent<Props, State> {
+export class ComponentContainer extends React.PureComponent<Props, State> {
   mounted: boolean;
 
   constructor(props: Props) {
@@ -86,6 +91,11 @@ export default class ComponentContainer extends React.PureComponent<Props, State
 
     Promise.all([getComponentNavigation(id), getComponentData(id, branch)]).then(([nav, data]) => {
       const component = this.addQualifier({ ...nav, ...data });
+
+      if (this.props.organizationsEnabled) {
+        this.props.fetchOrganizations([component.organization]);
+      }
+
       this.fetchBranches(component).then(branches => {
         if (this.mounted) {
           this.setState({ loading: false, branches, component });
@@ -156,3 +166,11 @@ export default class ComponentContainer extends React.PureComponent<Props, State
     );
   }
 }
+
+const mapStateToProps = (state: any) => ({
+  organizationsEnabled: areThereCustomOrganizations(state)
+});
+
+const mapDispatchToProps = { fetchOrganizations };
+
+export default connect<any, any, any>(mapStateToProps, mapDispatchToProps)(ComponentContainer);
index 105931959f9a3b47ee5f2f1edb1d1d2c8f51e3ca..cd5be6f916cd6b02d4b7cdbeeac8a78cdfa6abb3 100644 (file)
@@ -28,7 +28,7 @@ jest.mock('../nav/component/ComponentNav', () => ({
 
 import * as React from 'react';
 import { shallow, mount } from 'enzyme';
-import ComponentContainer from '../ComponentContainer';
+import { ComponentContainer } from '../ComponentContainer';
 import { getBranches } from '../../../api/branches';
 import { getComponentData } from '../../../api/components';
 import { getComponentNavigation } from '../../../api/nav';
@@ -44,7 +44,7 @@ beforeEach(() => {
 
 it('changes component', () => {
   const wrapper = shallow(
-    <ComponentContainer location={{ query: { id: 'foo' } }}>
+    <ComponentContainer fetchOrganizations={jest.fn()} location={{ query: { id: 'foo' } }}>
       <Inner />
     </ComponentContainer>
   );
@@ -72,7 +72,7 @@ it("loads branches for module's project", () => {
   );
 
   mount(
-    <ComponentContainer location={{ query: { id: 'moduleKey' } }}>
+    <ComponentContainer fetchOrganizations={jest.fn()} location={{ query: { id: 'moduleKey' } }}>
       <Inner />
     </ComponentContainer>
   );
@@ -94,7 +94,7 @@ it("doesn't load branches portfolio", () => {
   );
 
   const wrapper = mount(
-    <ComponentContainer location={{ query: { id: 'portfolioKey' } }}>
+    <ComponentContainer fetchOrganizations={jest.fn()} location={{ query: { id: 'portfolioKey' } }}>
       <Inner />
     </ComponentContainer>
   );
@@ -110,7 +110,7 @@ it("doesn't load branches portfolio", () => {
 it('updates branches on change', () => {
   (getBranches as jest.Mock<any>).mockImplementation(() => Promise.resolve([]));
   const wrapper = shallow(
-    <ComponentContainer location={{ query: { id: 'portfolioKey' } }}>
+    <ComponentContainer fetchOrganizations={jest.fn()} location={{ query: { id: 'portfolioKey' } }}>
       <Inner />
     </ComponentContainer>
   );
@@ -123,3 +123,23 @@ it('updates branches on change', () => {
   (wrapper.find(Inner).prop('onBranchesChange') as Function)();
   expect(getBranches).toBeCalledWith('projectKey');
 });
+
+it('loads organization', () => {
+  (getComponentData as jest.Mock<any>).mockImplementation(() =>
+    Promise.resolve({ organization: 'org' })
+  );
+
+  const fetchOrganizations = jest.fn();
+  mount(
+    <ComponentContainer
+      fetchOrganizations={fetchOrganizations}
+      location={{ query: { id: 'foo' } }}
+      organizationsEnabled={true}>
+      <Inner />
+    </ComponentContainer>
+  );
+
+  return doAsync().then(() => {
+    expect(fetchOrganizations).toBeCalledWith(['org']);
+  });
+});