fix tests and send feature support within first api call
This commit is contained in:
@ -87,6 +87,7 @@ class App extends React.Component<{}, state> {
|
||||
GlobalInfos.setVideoPaths(result.VideoPath, result.TVShowPath);
|
||||
|
||||
GlobalInfos.setTVShowsEnabled(result.TVShowEnabled);
|
||||
GlobalInfos.setFullDeleteEnabled(result.FullDeleteEnabled);
|
||||
|
||||
this.setState({
|
||||
mediacentername: result.MediacenterName
|
||||
|
58
src/elements/Popups/ButtonPopup/ButtonPopup.tsx
Normal file
58
src/elements/Popups/ButtonPopup/ButtonPopup.tsx
Normal file
@ -0,0 +1,58 @@
|
||||
import React from 'react';
|
||||
import PopupBase from '../PopupBase';
|
||||
import {Button} from '../../GPElements/Button';
|
||||
|
||||
/**
|
||||
* Delete Video popup
|
||||
* can only be rendered once!
|
||||
* @constructor
|
||||
*/
|
||||
export const ButtonPopup = (props: {
|
||||
onSubmit: () => void;
|
||||
onDeny: () => void;
|
||||
onAlternativeButton?: () => void;
|
||||
SubmitButtonTitle: string;
|
||||
DenyButtonTitle: string;
|
||||
AlternativeButtonTitle?: string;
|
||||
Title: string;
|
||||
}): JSX.Element => {
|
||||
return (
|
||||
<>
|
||||
<PopupBase
|
||||
title={props.Title}
|
||||
onHide={(): void => props.onDeny()}
|
||||
height='200px'
|
||||
width='400px'
|
||||
ParentSubmit={(): void => {
|
||||
props.onSubmit();
|
||||
}}>
|
||||
<Button
|
||||
onClick={(): void => {
|
||||
props.onSubmit();
|
||||
}}
|
||||
title={props.SubmitButtonTitle}
|
||||
/>
|
||||
|
||||
{props.AlternativeButtonTitle ? (
|
||||
<Button
|
||||
color={{backgroundColor: 'darkorange'}}
|
||||
onClick={(): void => {
|
||||
props.onAlternativeButton ? props.onAlternativeButton() : null;
|
||||
}}
|
||||
title={props.AlternativeButtonTitle}
|
||||
/>
|
||||
) : (
|
||||
<></>
|
||||
)}
|
||||
|
||||
<Button
|
||||
color={{backgroundColor: 'red'}}
|
||||
onClick={(): void => {
|
||||
props.onDeny();
|
||||
}}
|
||||
title={props.DenyButtonTitle}
|
||||
/>
|
||||
</PopupBase>
|
||||
</>
|
||||
);
|
||||
};
|
@ -1,37 +0,0 @@
|
||||
import React from 'react';
|
||||
import PopupBase from '../PopupBase';
|
||||
import {Button} from '../../GPElements/Button';
|
||||
|
||||
/**
|
||||
* Delete Video popup
|
||||
* can only be rendered once!
|
||||
* @constructor
|
||||
*/
|
||||
export const FullyDeletePopup = (props: {onSubmit: () => void; onDeny: () => void; onDiscard: () => void}): JSX.Element => {
|
||||
return (
|
||||
<>
|
||||
<PopupBase
|
||||
title='Fully Delete Video?'
|
||||
onHide={(): void => props.onDiscard()}
|
||||
height='200px'
|
||||
width='350px'
|
||||
ParentSubmit={(): void => {
|
||||
props.onSubmit();
|
||||
}}>
|
||||
<Button
|
||||
onClick={(): void => {
|
||||
props.onSubmit();
|
||||
}}
|
||||
title='Fully Delete!'
|
||||
/>
|
||||
<Button
|
||||
color={{backgroundColor: 'red'}}
|
||||
onClick={(): void => {
|
||||
props.onDeny();
|
||||
}}
|
||||
title='Only DB Entries'
|
||||
/>
|
||||
</PopupBase>
|
||||
</>
|
||||
);
|
||||
};
|
@ -90,16 +90,21 @@ describe('<Player/>', function () {
|
||||
|
||||
wrapper.setProps({history: {goBack: jest.fn()}});
|
||||
|
||||
global.fetch = prepareFetchApi({result: 'success'});
|
||||
// global.fetch = prepareFetchApi({result: 'success'});
|
||||
|
||||
callAPIMock({result: 'success'})
|
||||
|
||||
// request the popup to pop
|
||||
wrapper.find('.videoactions').find('Button').at(2).simulate('click');
|
||||
|
||||
// click the first submit button
|
||||
wrapper.find('ButtonPopup').dive().find('Button').at(0).simulate('click')
|
||||
|
||||
process.nextTick(() => {
|
||||
// refetch is called so fetch called 3 times
|
||||
expect(global.fetch).toHaveBeenCalledTimes(1);
|
||||
expect(callAPI).toHaveBeenCalledTimes(1);
|
||||
expect(wrapper.instance().props.history.goBack).toHaveBeenCalledTimes(1);
|
||||
|
||||
global.fetch.mockClear();
|
||||
done();
|
||||
});
|
||||
});
|
||||
@ -152,16 +157,14 @@ describe('<Player/>', function () {
|
||||
it('test click of quickadd tag btn', done => {
|
||||
const wrapper = generatetag();
|
||||
|
||||
global.fetch = prepareFetchApi({result: 'success'});
|
||||
callAPIMock({result: 'success'})
|
||||
|
||||
// render tag subcomponent
|
||||
const tag = wrapper.find('Tag').first().dive();
|
||||
tag.simulate('click');
|
||||
|
||||
process.nextTick(() => {
|
||||
expect(global.fetch).toHaveBeenCalledTimes(1);
|
||||
|
||||
global.fetch.mockClear();
|
||||
expect(callAPI).toHaveBeenCalledTimes(1);
|
||||
done();
|
||||
});
|
||||
});
|
||||
@ -169,7 +172,7 @@ describe('<Player/>', function () {
|
||||
it('test failing quickadd', done => {
|
||||
const wrapper = generatetag();
|
||||
|
||||
global.fetch = prepareFetchApi({result: 'nonsuccess'});
|
||||
callAPIMock({result: 'nonsuccess'});
|
||||
global.console.error = jest.fn();
|
||||
|
||||
// render tag subcomponent
|
||||
@ -178,8 +181,6 @@ describe('<Player/>', function () {
|
||||
|
||||
process.nextTick(() => {
|
||||
expect(global.console.error).toHaveBeenCalledTimes(2);
|
||||
|
||||
global.fetch.mockClear();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
@ -21,7 +21,7 @@ import PlyrJS from 'plyr';
|
||||
import {Button} from '../../elements/GPElements/Button';
|
||||
import {VideoTypes} from '../../types/ApiTypes';
|
||||
import GlobalInfos from '../../utils/GlobalInfos';
|
||||
import {FullyDeletePopup} from '../../elements/Popups/FullyDeletePopup/FullyDeletePopup';
|
||||
import {ButtonPopup} from '../../elements/Popups/ButtonPopup/ButtonPopup';
|
||||
|
||||
interface Props extends RouteComponentProps<{id: string}> {}
|
||||
|
||||
@ -199,23 +199,46 @@ export class Player extends React.Component<Props, mystate> {
|
||||
movieId={this.state.movieId}
|
||||
/>
|
||||
) : null}
|
||||
{this.state.deletepopupvisible ? (
|
||||
<FullyDeletePopup
|
||||
onDiscard={(): void => this.setState({deletepopupvisible: false})}
|
||||
onSubmit={(): void => {
|
||||
this.setState({deletepopupvisible: false});
|
||||
this.deleteVideo(true);
|
||||
}}
|
||||
onDeny={(): void => {
|
||||
this.setState({deletepopupvisible: false});
|
||||
this.deleteVideo(false);
|
||||
}}
|
||||
/>
|
||||
) : null}
|
||||
{this.state.deletepopupvisible ? this.renderDeletePopup() : null}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
renderDeletePopup(): JSX.Element {
|
||||
if (GlobalInfos.isVideoFulldeleteable()) {
|
||||
return (
|
||||
<ButtonPopup
|
||||
onDeny={(): void => this.setState({deletepopupvisible: false})}
|
||||
onSubmit={(): void => {
|
||||
this.setState({deletepopupvisible: false});
|
||||
this.deleteVideo(true);
|
||||
}}
|
||||
onAlternativeButton={(): void => {
|
||||
this.setState({deletepopupvisible: false});
|
||||
this.deleteVideo(false);
|
||||
}}
|
||||
DenyButtonTitle='Cancel'
|
||||
SubmitButtonTitle='Fully Delete!'
|
||||
Title='Fully Delete Video?'
|
||||
AlternativeButtonTitle='Reference Only'
|
||||
/>
|
||||
);
|
||||
} else {
|
||||
return (
|
||||
<ButtonPopup
|
||||
onDeny={(): void => this.setState({deletepopupvisible: false})}
|
||||
onSubmit={(): void => {
|
||||
this.setState({deletepopupvisible: false});
|
||||
this.deleteVideo(false);
|
||||
}}
|
||||
DenyButtonTitle='Cancel'
|
||||
SubmitButtonTitle='Delete Video Reference!'
|
||||
Title='Delete Video?'
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* quick add callback to add tag to db and change gui correctly
|
||||
* @param tagId id of tag to add
|
||||
|
@ -37,6 +37,7 @@ export namespace SettingsTypes {
|
||||
VideoPath: string;
|
||||
TVShowPath: string;
|
||||
TVShowEnabled: boolean;
|
||||
FullDeleteEnabled: boolean;
|
||||
}
|
||||
|
||||
export interface SettingsType {
|
||||
|
@ -10,6 +10,7 @@ class StaticInfos {
|
||||
private videopath: string = '';
|
||||
private tvshowpath: string = '';
|
||||
private TVShowsEnabled: boolean = false;
|
||||
private fullDeleteable: boolean = false;
|
||||
|
||||
/**
|
||||
* check if the current theme is the dark theme
|
||||
@ -80,6 +81,14 @@ class StaticInfos {
|
||||
isTVShowEnabled(): boolean {
|
||||
return this.TVShowsEnabled;
|
||||
}
|
||||
|
||||
setFullDeleteEnabled(FullDeleteEnabled: boolean): void {
|
||||
this.fullDeleteable = FullDeleteEnabled;
|
||||
}
|
||||
|
||||
isVideoFulldeleteable(): boolean {
|
||||
return this.fullDeleteable;
|
||||
}
|
||||
}
|
||||
|
||||
export default new StaticInfos();
|
||||
|
Reference in New Issue
Block a user