21720:
[arvados.git] / services / workbench2 / src / views-components / context-menu / actions / download-action.cy.js
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import React from 'react';
6 import axios from 'axios';
7 import { DownloadAction } from './download-action';
8 import { ThemeProvider } from '@mui/material';
9 import { CustomTheme } from 'common/custom-theme';
10
11 describe('<DownloadAction />', () => {
12     let props;
13     let zip;
14
15     beforeEach(() => {
16         props = {};
17     });
18
19     it('should return null if missing href or kind of file in props', () => {
20         // when
21         cy.mount(
22                 <ThemeProvider theme={CustomTheme}>
23                     <DownloadAction {...props} />
24                 </ThemeProvider>);
25
26         // then
27         cy.get('[data-cy-root]').children().should('have.length', 0);
28     });
29
30     it('should return a element', () => {
31         // setup
32         props.href = '#';
33
34         // when
35         cy.mount(
36             <ThemeProvider theme={CustomTheme}>
37                 <DownloadAction {...props} />
38             </ThemeProvider>);
39
40         // then
41         cy.get('[data-cy-root]').children().should('have.length.greaterThan', 0);
42     });
43
44     it('should handle download', () => {
45         // setup
46         props = {
47             href: ['file1'],
48             kind: 'files',
49             download: [],
50             currentCollectionUuid: '123412-123123'
51         };
52
53         Cypress.on('uncaught:exception', (err, runnable) => {
54             // Returning false here prevents Cypress from failing the test when axios returns 404
55             if (err.message.includes('Request failed with status code 404')) {
56                 return false;
57               }
58               // Otherwise, let the error fail the test
59               return true;
60           });
61         
62         cy.intercept('GET', '*', (req) => {
63             req.reply({
64               statusCode: 200,
65               body: { message: 'Mocked response' },
66             });
67           }).as('getData');
68         
69         cy.spy(axios, 'get').as('get');
70         
71         cy.mount(
72             <ThemeProvider theme={CustomTheme}>
73                 <DownloadAction {...props} />
74             </ThemeProvider>);
75
76         // when
77         cy.get('span').contains('Download selected').click();
78
79         // then
80         cy.get('@get').should('be.calledWith', props.href[0]);
81     });
82 });