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