improved reindexing to reindex in background
new button to cleanup gravity
This commit is contained in:
		@@ -16,9 +16,6 @@ class MovieSettings extends React.Component {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    componentDidMount() {
 | 
			
		||||
        if (this.myinterval) {
 | 
			
		||||
            clearInterval(this.myinterval);
 | 
			
		||||
        }
 | 
			
		||||
        this.myinterval = setInterval(this.updateStatus, 1000);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -29,9 +26,12 @@ class MovieSettings extends React.Component {
 | 
			
		||||
    render() {
 | 
			
		||||
        return (
 | 
			
		||||
            <>
 | 
			
		||||
                <button disabled={this.state.startbtnDisabled} className='reindexbtn btn btn-success' onClick={() => {
 | 
			
		||||
                    this.startReindex()
 | 
			
		||||
                }}>Reindex Movies
 | 
			
		||||
                <button disabled={this.state.startbtnDisabled}
 | 
			
		||||
                        className='btn btn-success'
 | 
			
		||||
                        onClick={() => {this.startReindex()}}>Reindex Movie
 | 
			
		||||
                </button>
 | 
			
		||||
                <button className='btn btn-warning'
 | 
			
		||||
                        onClick={() => {this.cleanupGravity()}}>Cleanup Gravity
 | 
			
		||||
                </button>
 | 
			
		||||
                <div className={style.indextextarea}>{this.state.text.map(m => (
 | 
			
		||||
                    <div className='textarea-element'>{m}</div>
 | 
			
		||||
@@ -50,13 +50,19 @@ class MovieSettings extends React.Component {
 | 
			
		||||
        this.setState({startbtnDisabled: true});
 | 
			
		||||
 | 
			
		||||
        console.log("starting");
 | 
			
		||||
        const updateRequest = new FormData();
 | 
			
		||||
        const request = new FormData();
 | 
			
		||||
        request.append("action", "startReindex");
 | 
			
		||||
        // fetch all videos available
 | 
			
		||||
        fetch('/api/extractvideopreviews.php', {method: 'POST', body: updateRequest})
 | 
			
		||||
            .then((response) => response.text()
 | 
			
		||||
        fetch('/api/settings.php', {method: 'POST', body: request})
 | 
			
		||||
            .then((response) => response.json()
 | 
			
		||||
                .then((result) => {
 | 
			
		||||
                    // todo 2020-07-4: some kind of return finished handler
 | 
			
		||||
                    console.log("returned");
 | 
			
		||||
                    console.log(result);
 | 
			
		||||
                    if (result.success) {
 | 
			
		||||
                        console.log("started successfully");
 | 
			
		||||
                    } else {
 | 
			
		||||
                        console.log("error, reindex already running");
 | 
			
		||||
                        this.setState({startbtnDisabled: true});
 | 
			
		||||
                    }
 | 
			
		||||
                }))
 | 
			
		||||
            .catch(() => {
 | 
			
		||||
                console.log("no connection to backend");
 | 
			
		||||
@@ -71,8 +77,10 @@ class MovieSettings extends React.Component {
 | 
			
		||||
     * This interval function reloads the current status of reindexing from backend
 | 
			
		||||
     */
 | 
			
		||||
    updateStatus = () => {
 | 
			
		||||
        const updateRequest = new FormData();
 | 
			
		||||
        fetch('/api/extractionData.php', {method: 'POST', body: updateRequest})
 | 
			
		||||
        const request = new FormData();
 | 
			
		||||
        request.append("action", "getStatusMessage");
 | 
			
		||||
 | 
			
		||||
        fetch('/api/settings.php', {method: 'POST', body: request})
 | 
			
		||||
            .then((response) => response.json()
 | 
			
		||||
                .then((result) => {
 | 
			
		||||
                    if (result.contentAvailable === true) {
 | 
			
		||||
@@ -94,6 +102,25 @@ class MovieSettings extends React.Component {
 | 
			
		||||
                console.log("no connection to backend");
 | 
			
		||||
            });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * send request to cleanup db gravity
 | 
			
		||||
     */
 | 
			
		||||
    cleanupGravity() {
 | 
			
		||||
        const request = new FormData();
 | 
			
		||||
        request.append("action", "cleanupGravity");
 | 
			
		||||
 | 
			
		||||
        fetch('/api/settings.php', {method: 'POST', body: request})
 | 
			
		||||
            .then((response) => response.text()
 | 
			
		||||
                .then((result) => {
 | 
			
		||||
                    this.setState({
 | 
			
		||||
                        text: ['successfully cleaned up gravity!']
 | 
			
		||||
                    });
 | 
			
		||||
                }))
 | 
			
		||||
            .catch(() => {
 | 
			
		||||
                console.log("no connection to backend");
 | 
			
		||||
            });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default MovieSettings;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,5 +9,5 @@
 | 
			
		||||
    overflow-x: auto;
 | 
			
		||||
    overflow-y: scroll;
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    width: 50%;
 | 
			
		||||
    width: 40%;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,15 +22,33 @@ describe('<MovieSettings/>', function () {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('test simulate reindex', function () {
 | 
			
		||||
        global.fetch = global.prepareFetchApi({});
 | 
			
		||||
        global.fetch = global.prepareFetchApi({success: true});
 | 
			
		||||
        const wrapper = shallow(<MovieSettings/>);
 | 
			
		||||
 | 
			
		||||
        wrapper.find(".reindexbtn").simulate("click");
 | 
			
		||||
        wrapper.find("button").findWhere(e => e.text() === "Reindex Movie" && e.type() === "button").simulate("click");
 | 
			
		||||
 | 
			
		||||
        // initial send of reindex request to server
 | 
			
		||||
        expect(global.fetch).toBeCalledTimes(1);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('test failing reindex start', done => {
 | 
			
		||||
        global.fetch = global.prepareFetchApi({success: false});
 | 
			
		||||
        const wrapper = shallow(<MovieSettings/>);
 | 
			
		||||
 | 
			
		||||
        wrapper.find("button").findWhere(e => e.text() === "Reindex Movie" && e.type() === "button").simulate("click");
 | 
			
		||||
 | 
			
		||||
        // initial send of reindex request to server
 | 
			
		||||
        expect(global.fetch).toBeCalledTimes(1);
 | 
			
		||||
 | 
			
		||||
        process.nextTick(() => {
 | 
			
		||||
            // reindex already running --> so disable startbdn
 | 
			
		||||
            expect(wrapper.state()).toMatchObject({startbtnDisabled: true});
 | 
			
		||||
 | 
			
		||||
            global.fetch.mockClear();
 | 
			
		||||
            done();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('content available received and in state', done => {
 | 
			
		||||
        global.fetch = global.prepareFetchApi({
 | 
			
		||||
            contentAvailable: true,
 | 
			
		||||
@@ -51,4 +69,44 @@ describe('<MovieSettings/>', function () {
 | 
			
		||||
            done();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('test reindex with no content available', done=> {
 | 
			
		||||
        global.fetch = global.prepareFetchApi({
 | 
			
		||||
            contentAvailable: false
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        global.clearInterval = jest.fn();
 | 
			
		||||
 | 
			
		||||
        const wrapper = shallow(<MovieSettings/>);
 | 
			
		||||
        wrapper.instance().updateStatus();
 | 
			
		||||
 | 
			
		||||
        process.nextTick(() => {
 | 
			
		||||
            // expect the refresh interval to be cleared
 | 
			
		||||
            expect(global.clearInterval).toBeCalledTimes(1);
 | 
			
		||||
 | 
			
		||||
            // expect startbtn to be reenabled
 | 
			
		||||
            expect(wrapper.state()).toMatchObject({startbtnDisabled: false});
 | 
			
		||||
 | 
			
		||||
            global.fetch.mockClear();
 | 
			
		||||
            done();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('test simulate gravity cleanup', done => {
 | 
			
		||||
        global.fetch = global.prepareFetchApi("mmi");
 | 
			
		||||
        const wrapper = shallow(<MovieSettings/>);
 | 
			
		||||
        wrapper.instance().setState = jest.fn(),
 | 
			
		||||
 | 
			
		||||
        wrapper.find("button").findWhere(e => e.text() === "Cleanup Gravity" && e.type() === "button").simulate("click");
 | 
			
		||||
 | 
			
		||||
        // initial send of reindex request to server
 | 
			
		||||
        expect(global.fetch).toBeCalledTimes(1);
 | 
			
		||||
 | 
			
		||||
        process.nextTick(() => {
 | 
			
		||||
            expect(wrapper.instance().setState).toBeCalledTimes(1);
 | 
			
		||||
 | 
			
		||||
            global.fetch.mockClear();
 | 
			
		||||
            done();
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ global.prepareFetchApi = (response) => {
 | 
			
		||||
    const mockJsonPromise = Promise.resolve(response);
 | 
			
		||||
    const mockFetchPromise = Promise.resolve({
 | 
			
		||||
        json: () => mockJsonPromise,
 | 
			
		||||
        text: () => mockJsonPromise
 | 
			
		||||
    });
 | 
			
		||||
    return (jest.fn().mockImplementation(() => mockFetchPromise));
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user