| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| import sqlLabReducer from 'src/SqlLab/reducers/sqlLab'; |
| import * as actions from 'src/SqlLab/actions/sqlLab'; |
| import { now } from 'src/modules/dates'; |
| |
| import { table, initialState as mockState } from '../fixtures'; |
| |
| const initialState = mockState.sqlLab; |
| |
| describe('sqlLabReducer', () => { |
| describe('Query editors actions', () => { |
| let newState; |
| let defaultQueryEditor; |
| let qe; |
| beforeEach(() => { |
| newState = { ...initialState }; |
| defaultQueryEditor = newState.queryEditors[0]; |
| const action = { |
| type: actions.ADD_QUERY_EDITOR, |
| queryEditor: { ...initialState.queryEditors[0], id: 'abcd' }, |
| }; |
| newState = sqlLabReducer(newState, action); |
| qe = newState.queryEditors.find(e => e.id === 'abcd'); |
| }); |
| it('should add a query editor', () => { |
| expect(newState.queryEditors).toHaveLength(2); |
| }); |
| it('should remove a query editor', () => { |
| expect(newState.queryEditors).toHaveLength(2); |
| const action = { |
| type: actions.REMOVE_QUERY_EDITOR, |
| queryEditor: qe, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.queryEditors).toHaveLength(1); |
| }); |
| it('should set q query editor active', () => { |
| const addQueryEditorAction = { |
| type: actions.ADD_QUERY_EDITOR, |
| queryEditor: { ...initialState.queryEditors[0], id: 'abcd' }, |
| }; |
| newState = sqlLabReducer(newState, addQueryEditorAction); |
| const setActiveQueryEditorAction = { |
| type: actions.SET_ACTIVE_QUERY_EDITOR, |
| queryEditor: defaultQueryEditor, |
| }; |
| newState = sqlLabReducer(newState, setActiveQueryEditorAction); |
| expect(newState.tabHistory[newState.tabHistory.length - 1]).toBe( |
| defaultQueryEditor.id, |
| ); |
| }); |
| it('should not fail while setting DB', () => { |
| const dbId = 9; |
| const action = { |
| type: actions.QUERY_EDITOR_SETDB, |
| queryEditor: qe, |
| dbId, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.queryEditors[1].dbId).toBe(dbId); |
| }); |
| it('should not fail while setting schema', () => { |
| const schema = 'foo'; |
| const action = { |
| type: actions.QUERY_EDITOR_SET_SCHEMA, |
| queryEditor: qe, |
| schema, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.queryEditors[1].schema).toBe(schema); |
| }); |
| it('should not fail while setting autorun', () => { |
| const action = { |
| type: actions.QUERY_EDITOR_SET_AUTORUN, |
| queryEditor: qe, |
| }; |
| newState = sqlLabReducer(newState, { ...action, autorun: false }); |
| expect(newState.queryEditors[1].autorun).toBe(false); |
| newState = sqlLabReducer(newState, { ...action, autorun: true }); |
| expect(newState.queryEditors[1].autorun).toBe(true); |
| }); |
| it('should not fail while setting title', () => { |
| const title = 'a new title'; |
| const action = { |
| type: actions.QUERY_EDITOR_SET_TITLE, |
| queryEditor: qe, |
| title, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.queryEditors[1].title).toBe(title); |
| }); |
| it('should not fail while setting Sql', () => { |
| const sql = 'SELECT nothing from dev_null'; |
| const action = { |
| type: actions.QUERY_EDITOR_SET_SQL, |
| queryEditor: qe, |
| sql, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.queryEditors[1].sql).toBe(sql); |
| }); |
| it('should not fail while setting queryLimit', () => { |
| const queryLimit = 101; |
| const action = { |
| type: actions.QUERY_EDITOR_SET_QUERY_LIMIT, |
| queryEditor: qe, |
| queryLimit, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.queryEditors[1].queryLimit).toEqual(queryLimit); |
| }); |
| it('should set selectedText', () => { |
| const selectedText = 'TEST'; |
| const action = { |
| type: actions.QUERY_EDITOR_SET_SELECTED_TEXT, |
| queryEditor: newState.queryEditors[0], |
| sql: selectedText, |
| }; |
| expect(newState.queryEditors[0].selectedText).toBeNull(); |
| newState = sqlLabReducer(newState, action); |
| expect(newState.queryEditors[0].selectedText).toBe(selectedText); |
| }); |
| }); |
| describe('Tables', () => { |
| let newState; |
| let newTable; |
| beforeEach(() => { |
| newTable = { ...table }; |
| const action = { |
| type: actions.MERGE_TABLE, |
| table: newTable, |
| }; |
| newState = sqlLabReducer(initialState, action); |
| newTable = newState.tables[0]; |
| }); |
| it('should add a table', () => { |
| // Testing that beforeEach actually added the table |
| expect(newState.tables).toHaveLength(1); |
| }); |
| it('should merge the table attributes', () => { |
| // Merging the extra attribute |
| newTable.extra = true; |
| const action = { |
| type: actions.MERGE_TABLE, |
| table: newTable, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.tables).toHaveLength(1); |
| expect(newState.tables[0].extra).toBe(true); |
| }); |
| it('should expand and collapse a table', () => { |
| const collapseTableAction = { |
| type: actions.COLLAPSE_TABLE, |
| table: newTable, |
| }; |
| newState = sqlLabReducer(newState, collapseTableAction); |
| expect(newState.tables[0].expanded).toBe(false); |
| const expandTableAction = { |
| type: actions.EXPAND_TABLE, |
| table: newTable, |
| }; |
| newState = sqlLabReducer(newState, expandTableAction); |
| expect(newState.tables[0].expanded).toBe(true); |
| }); |
| it('should remove a table', () => { |
| const action = { |
| type: actions.REMOVE_TABLE, |
| table: newTable, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(newState.tables).toHaveLength(0); |
| }); |
| }); |
| describe('Run Query', () => { |
| let newState; |
| let query; |
| beforeEach(() => { |
| newState = { ...initialState }; |
| query = { |
| id: 'abcd', |
| progress: 0, |
| startDttm: now(), |
| state: 'running', |
| cached: false, |
| sqlEditorId: 'dfsadfs', |
| }; |
| }); |
| it('should start a query', () => { |
| const action = { |
| type: actions.START_QUERY, |
| query: { |
| id: 'abcd', |
| progress: 0, |
| startDttm: now(), |
| state: 'running', |
| cached: false, |
| sqlEditorId: 'dfsadfs', |
| }, |
| }; |
| newState = sqlLabReducer(newState, action); |
| expect(Object.keys(newState.queries)).toHaveLength(1); |
| }); |
| it('should stop the query', () => { |
| const startQueryAction = { |
| type: actions.START_QUERY, |
| query, |
| }; |
| newState = sqlLabReducer(newState, startQueryAction); |
| const stopQueryAction = { |
| type: actions.STOP_QUERY, |
| query, |
| }; |
| newState = sqlLabReducer(newState, stopQueryAction); |
| const q = newState.queries[Object.keys(newState.queries)[0]]; |
| expect(q.state).toBe('stopped'); |
| }); |
| it('should remove a query', () => { |
| const startQueryAction = { |
| type: actions.START_QUERY, |
| query, |
| }; |
| newState = sqlLabReducer(newState, startQueryAction); |
| const removeQueryAction = { |
| type: actions.REMOVE_QUERY, |
| query, |
| }; |
| newState = sqlLabReducer(newState, removeQueryAction); |
| expect(Object.keys(newState.queries)).toHaveLength(0); |
| }); |
| it('should refresh queries when polling returns empty', () => { |
| newState = sqlLabReducer(newState, actions.refreshQueries({})); |
| }); |
| }); |
| }); |