17754: Disables self-serve account linking offering on inactive account page.
authorLucas Di Pentima <lucas.dipentima@curii.com>
Fri, 18 Feb 2022 19:30:57 +0000 (16:30 -0300)
committerLucas Di Pentima <lucas.dipentima@curii.com>
Fri, 18 Feb 2022 19:30:57 +0000 (16:30 -0300)
(when LoginCluster is set)

Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <lucas.dipentima@curii.com>

src/views/inactive-panel/inactive-panel.test.tsx [new file with mode: 0644]
src/views/inactive-panel/inactive-panel.tsx

diff --git a/src/views/inactive-panel/inactive-panel.test.tsx b/src/views/inactive-panel/inactive-panel.test.tsx
new file mode 100644 (file)
index 0000000..c694f9d
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import React from 'react';
+import { mount, configure } from 'enzyme';
+import Adapter from "enzyme-adapter-react-16";
+import { CustomTheme } from 'common/custom-theme';
+import { InactivePanelStateProps, CssRules, InactivePanelRoot } from './inactive-panel';
+import { MuiThemeProvider, StyledComponentProps } from '@material-ui/core';
+
+configure({ adapter: new Adapter() });
+
+describe('InactivePanel', () => {
+    let props: InactivePanelStateProps & StyledComponentProps<CssRules>;
+
+    beforeEach(() => {
+        props = {
+            classes: {
+                root: 'root',
+                title: 'title',
+                ontop: 'ontop',
+            },
+            isLoginClusterFederation: false,
+            inactivePageText: 'Inactive page content',
+        };
+    });
+
+    it('should render content and link account option', () => {
+        // given
+        const expectedMessage = "Inactive page content";
+        const expectedLinkAccountText = 'If you would like to use this login to access another account click "Link Account"';
+
+        // when
+        const wrapper = mount(
+            <MuiThemeProvider theme={CustomTheme}>
+                <InactivePanelRoot {...props} />
+            </MuiThemeProvider>
+            );
+
+        // then
+        expect(wrapper.find('p').first().text()).toContain(expectedMessage);
+        expect(wrapper.find('p').at(1).text()).toContain(expectedLinkAccountText);
+    })
+
+    it('should render content and link account warning on LoginCluster federations', () => {
+        // given
+        props.isLoginClusterFederation = true;
+        const expectedMessage = "Inactive page content";
+        const expectedLinkAccountText = 'If you would like to use this login to access another account, please contact your administrator';
+
+        // when
+        const wrapper = mount(
+            <MuiThemeProvider theme={CustomTheme}>
+                <InactivePanelRoot {...props} />
+            </MuiThemeProvider>
+            );
+
+        // then
+        expect(wrapper.find('p').first().text()).toContain(expectedMessage);
+        expect(wrapper.find('p').at(1).text()).toContain(expectedLinkAccountText);
+    })
+});
\ No newline at end of file
index 6d8bbf597236115e8d73048df97ece40b4703178..8a7c7928933925e77462d7d8b5e4e8d0875bbbdd 100644 (file)
@@ -11,7 +11,7 @@ import { ArvadosTheme } from 'common/custom-theme';
 import { navigateToLinkAccount } from 'store/navigation/navigation-action';
 import { RootState } from 'store/store';
 
-type CssRules = 'root' | 'ontop' | 'title';
+export type CssRules = 'root' | 'ontop' | 'title';
 
 const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
     root: {
@@ -47,32 +47,45 @@ const mapDispatchToProps = (dispatch: Dispatch): InactivePanelActionProps => ({
     }
 });
 
+const mapStateToProps = (state: RootState): InactivePanelStateProps => ({
+    inactivePageText: state.auth.config.clusterConfig.Workbench.InactivePageHTML,
+    isLoginClusterFederation: state.auth.config.clusterConfig.Login.LoginCluster !== '',
+});
+
 export interface InactivePanelStateProps {
     inactivePageText: string;
+    isLoginClusterFederation: boolean;
 }
 
 type InactivePanelProps = WithStyles<CssRules> & InactivePanelActionProps & InactivePanelStateProps;
 
-export const InactivePanel = connect((state: RootState) => ({
-    inactivePageText: state.auth.config.clusterConfig.Workbench.InactivePageHTML
-}), mapDispatchToProps)(withStyles(styles)((({ classes, startLinking, inactivePageText }: InactivePanelProps) =>
+
+export const InactivePanelRoot = ({ classes, startLinking, inactivePageText, isLoginClusterFederation }: InactivePanelProps) =>
     <Grid container justify="center" alignItems="center" direction="column" spacing={24}
         className={classes.root}
         style={{ marginTop: 56, height: "100%" }}>
         <Grid item>
             <Typography>
-                <div dangerouslySetInnerHTML={{ __html: inactivePageText }} style={{ margin: "1em" }} />
+                <span dangerouslySetInnerHTML={{ __html: inactivePageText }} style={{ margin: "1em" }} />
             </Typography>
         </Grid>
-        <Grid item>
+        { !isLoginClusterFederation
+        ? <><Grid item>
             <Typography align="center">
-                If you would like to use this login to access another account click "Link Account".
-           </Typography>
+            If you would like to use this login to access another account click "Link Account".
+            </Typography>
         </Grid>
         <Grid item>
             <Button className={classes.ontop} color="primary" variant="contained" onClick={() => startLinking()}>
                 Link Account
-           </Button>
-        </Grid>
-    </Grid >
-)));
+            </Button>
+        </Grid></>
+        : <><Grid item>
+            <Typography align="center">
+                If you would like to use this login to access another account, please contact your administrator.
+            </Typography>
+        </Grid></> }
+    </Grid >;
+
+export const InactivePanel = connect(mapStateToProps, mapDispatchToProps)(
+    withStyles(styles)(InactivePanelRoot));