Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ZKUI-373 // disable list versions for veeam xml #629

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/react/databrowser/objects/ObjectList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ type Props = {
toggled: List<ObjectEntity>;
listType: ListObjectsType;
};

export const VEEAM_XML_PREFIX = '.system-d26a9498-cb7c-4a87-a44a-8ae204f5ba6c';

export default function ObjectList({
objects,
bucketName,
Expand All @@ -37,6 +40,7 @@ export default function ObjectList({
const { pathname } = useLocation();
const query = useQueryParams();
const searchInput = query.get('metadatasearch');
const prefixPath = query.get('prefix');

const { versionning } = useBucketVersionning({ bucketName });

Expand All @@ -51,6 +55,7 @@ export default function ObjectList({
const isMetadataType = !!searchInput;
const isVersioningType = listType === LIST_OBJECT_VERSIONS_S3_TYPE;
const isToggledEmpty = toggled.size === 0;
const isVeeamXML = prefixPath?.includes(VEEAM_XML_PREFIX);

const maybeListTable = () => {
if (errorZenkoMsg) {
Expand Down Expand Up @@ -106,7 +111,7 @@ export default function ObjectList({
/>
<Toggle
id="list-versions-toggle"
disabled={isMetadataType || !isBucketVersioned}
disabled={isMetadataType || !isBucketVersioned || isVeeamXML}
toggle={isVersioningType}
label="List Versions"
onChange={() => {
Expand Down
52 changes: 44 additions & 8 deletions src/react/databrowser/objects/__tests__/ObjectList.test.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import * as hooks from '../../../next-architecture/domain/business/buckets';
import { waitFor } from '@testing-library/react';
import { List } from 'immutable';
import router from 'react-router';
import { BUCKET_NAME } from '../../../actions/__tests__/utils/testUtil';
import * as s3object from '../../../actions/s3object';
import * as hooks from '../../../next-architecture/domain/business/buckets';
import * as queryHooks from '../../../utils/hooks';
import { LIST_OBJECTS_S3_TYPE } from '../../../utils/s3';
import { checkBox, reduxMount } from '../../../utils/testUtil';
import ObjectList, { VEEAM_XML_PREFIX } from '../ObjectList';
import {
FIRST_FORMATTED_OBJECT,
SECOND_FORMATTED_OBJECT,
} from './utils/testUtil';
import { LIST_OBJECTS_S3_TYPE } from '../../../utils/s3';
import { checkBox, reduxMount } from '../../../utils/testUtil';
import { BUCKET_NAME } from '../../../actions/__tests__/utils/testUtil';
import { List } from 'immutable';
import ObjectList from '../ObjectList';
import router from 'react-router';
import { waitFor } from '@testing-library/react';
describe('ObjectList', () => {
beforeAll(() => {
jest.spyOn(router, 'useLocation').mockReturnValue({
Expand Down Expand Up @@ -153,6 +154,10 @@ describe('ObjectList', () => {
jest.spyOn(hooks, 'useBucketVersionning').mockReturnValue({
versionning: { status: 'success', value: 'Enabled' },
});
jest
.spyOn(queryHooks, 'useQueryParams')
.mockReturnValueOnce(new URLSearchParams('?prefix=test'));

const { component } = reduxMount(
<ObjectList
objects={List([FIRST_FORMATTED_OBJECT])}
Expand All @@ -162,6 +167,7 @@ describe('ObjectList', () => {
listType={LIST_OBJECTS_S3_TYPE}
/>,
);

await waitFor(() => {
const toggle = component.find('ToggleSwitch#list-versions-toggle');
expect(toggle.prop('disabled')).toBe(false);
Expand All @@ -171,6 +177,10 @@ describe('ObjectList', () => {
jest.spyOn(hooks, 'useBucketVersionning').mockReturnValue({
versionning: { status: 'success', value: 'Suspended' },
});
jest
.spyOn(queryHooks, 'useQueryParams')
.mockReturnValueOnce(new URLSearchParams('?prefix=test'));

const { component } = reduxMount(
<ObjectList
objects={List([FIRST_FORMATTED_OBJECT])}
Expand Down Expand Up @@ -204,4 +214,30 @@ describe('ObjectList', () => {
expect(toggle.prop('disabled')).toBe(true);
});
});

it('should disable versioning toggle if it is a veeam xml folder', async () => {
jest.spyOn(hooks, 'useBucketVersionning').mockReturnValue({
versionning: { status: 'success', value: 'Enabled' },
});
jest
.spyOn(queryHooks, 'useQueryParams')
.mockReturnValueOnce(
new URLSearchParams(`?prefix=${VEEAM_XML_PREFIX}?showversions=true`),
);

const { component } = reduxMount(
<ObjectList
objects={List([FIRST_FORMATTED_OBJECT])}
toggled={List()}
bucketName={BUCKET_NAME}
prefixWithSlash=""
listType={LIST_OBJECTS_S3_TYPE}
/>,
);

await waitFor(() => {
const toggle = component.find('ToggleSwitch#list-versions-toggle');
expect(toggle.prop('disabled')).toBe(true);
});
});
});