influxdb/ui/spec/dashboards/reducers/uiSpec.js

216 lines
5.3 KiB
JavaScript

import _ from 'lodash'
import reducer from 'src/dashboards/reducers/ui'
import {
loadDashboards,
deleteDashboardFailed,
setTimeRange,
updateDashboardCells,
editDashboardCell,
renameDashboardCell,
syncDashboardCell,
templateVariableSelected,
templateVariablesSelectedByName,
cancelEditCell,
} from 'src/dashboards/actions'
let state
const templates = [
{
id: '1',
type: 'query',
label: 'test query',
tempVar: ':region:',
query: {
db: 'db1',
rp: 'rp1',
measurement: 'm1',
influxql: 'SHOW TAGS WHERE CHRONOGIRAFFE = "friend"',
},
values: [
{value: 'us-west', type: 'tagKey', selected: false},
{value: 'us-east', type: 'tagKey', selected: true},
{value: 'us-mount', type: 'tagKey', selected: false},
],
},
{
id: '2',
type: 'csv',
label: 'test csv',
tempVar: ':temperature:',
values: [
{value: '98.7', type: 'measurement', selected: false},
{value: '99.1', type: 'measurement', selected: false},
{value: '101.3', type: 'measurement', selected: true},
],
},
]
const d1 = {
id: 1,
cells: [],
name: 'd1',
templates,
}
const d2 = {id: 2, cells: [], name: 'd2', templates: []}
const dashboards = [d1, d2]
const c1 = {
x: 0,
y: 0,
w: 4,
h: 4,
id: 1,
i: 'im-a-cell-id-index',
isEditing: false,
name: 'Gigawatts',
}
const editingCell = {
i: 1,
isEditing: true,
name: 'Edit me',
}
const cells = [c1]
describe('DataExplorer.Reducers.UI', () => {
it('can load the dashboards', () => {
const actual = reducer(state, loadDashboards(dashboards, d1.id))
const expected = {
dashboards,
}
expect(actual.dashboards).to.deep.equal(expected.dashboards)
})
it('can handle a failed dashboard deletion', () => {
const loadedState = reducer(state, loadDashboards([d1]))
const actual = reducer(loadedState, deleteDashboardFailed(d2))
const actualFirst = _.first(actual.dashboards)
expect(actual.dashboards).to.have.length(2)
_.forOwn(d2, (v, k) => {
expect(actualFirst[k]).to.deep.equal(v)
})
})
it('can set the time range', () => {
const expected = {upper: null, lower: 'now() - 1h'}
const actual = reducer(state, setTimeRange(expected))
expect(actual.timeRange).to.deep.equal(expected)
})
it('can update dashboard cells', () => {
state = {
dashboards,
}
const updatedCells = [{id: 1}, {id: 2}]
const expected = {
id: 1,
cells: updatedCells,
name: 'd1',
templates,
}
const actual = reducer(state, updateDashboardCells(d1, updatedCells))
expect(actual.dashboards[0]).to.deep.equal(expected)
})
it('can edit a cell', () => {
const dash = {...d1, cells}
state = {
dashboards: [dash],
}
const actual = reducer(state, editDashboardCell(dash, 0, 0, true))
expect(actual.dashboards[0].cells[0].isEditing).to.equal(true)
})
it('can sync a cell', () => {
const newCellName = 'watts is kinda cool'
const newCell = {
x: c1.x,
y: c1.y,
name: newCellName,
}
const dash = {...d1, cells: [c1]}
state = {
dashboards: [dash],
}
const actual = reducer(state, syncDashboardCell(dash, newCell))
expect(actual.dashboards[0].cells[0].name).to.equal(newCellName)
})
it('can rename cells', () => {
const c2 = {...c1, isEditing: true}
const dash = {...d1, cells: [c2]}
state = {
dashboards: [dash],
}
const actual = reducer(
state,
renameDashboardCell(dash, 0, 0, 'Plutonium Consumption Rate (ug/sec)')
)
expect(actual.dashboards[0].cells[0].name).to.equal(
'Plutonium Consumption Rate (ug/sec)'
)
})
it('can select a different template variable', () => {
const dash = _.cloneDeep(d1)
state = {
dashboards: [dash],
}
const value = dash.templates[0].values[2].value
const actual = reducer(
state,
templateVariableSelected(dash.id, dash.templates[0].id, [{value}])
)
expect(actual.dashboards[0].templates[0].values[0].selected).to.equal(false)
expect(actual.dashboards[0].templates[0].values[1].selected).to.equal(false)
expect(actual.dashboards[0].templates[0].values[2].selected).to.equal(true)
})
it('can select template variable values by name', () => {
const dash = _.cloneDeep(d1)
state = {
dashboards: [dash],
}
const selected = {region: 'us-west', temperature: '99.1'}
const actual = reducer(
state,
templateVariablesSelectedByName(dash.id, selected)
)
expect(actual.dashboards[0].templates[0].values[0].selected).to.equal(true)
expect(actual.dashboards[0].templates[0].values[1].selected).to.equal(false)
expect(actual.dashboards[0].templates[0].values[2].selected).to.equal(false)
expect(actual.dashboards[0].templates[1].values[0].selected).to.equal(false)
expect(actual.dashboards[0].templates[1].values[1].selected).to.equal(true)
expect(actual.dashboards[0].templates[1].values[2].selected).to.equal(false)
})
it('can cancel cell editing', () => {
const dash = _.cloneDeep(d1)
dash.cells = [editingCell]
const actual = reducer(
{dashboards: [dash]},
cancelEditCell(dash.id, editingCell.i)
)
expect(actual.dashboards[0].cells[0].isEditing).to.equal(false)
expect(actual.dashboards[0].cells[0].name).to.equal(editingCell.name)
})
})