chronograf/ui/spec/admin/reducers/adminSpec.js

366 lines
8.2 KiB
JavaScript
Raw Normal View History

import reducer from 'src/admin/reducers/admin'
import {
2017-03-07 07:21:10 +00:00
addUser,
addRole,
2017-03-21 22:34:13 +00:00
addDatabase,
2017-03-21 23:53:40 +00:00
addRetentionPolicy,
syncUser,
syncRole,
2017-03-09 20:48:37 +00:00
editUser,
editRole,
2017-03-21 22:47:51 +00:00
editDatabase,
editRetentionPolicy,
loadRoles,
2017-03-10 16:35:51 +00:00
loadPermissions,
deleteRole,
deleteUser,
2017-03-21 22:51:14 +00:00
removeDatabase,
2017-03-21 23:53:40 +00:00
removeRetentionPolicy,
filterRoles,
filterUsers,
2017-03-21 23:27:30 +00:00
addDatabaseDeleteCode,
removeDatabaseDeleteCode,
} from 'src/admin/actions'
import {
NEW_DEFAULT_USER,
NEW_DEFAULT_ROLE,
NEW_DEFAULT_DATABASE,
NEW_EMPTY_RP,
} from 'src/admin/constants'
2017-03-30 22:29:43 +00:00
let state
2017-03-10 16:35:51 +00:00
// Users
2017-03-09 20:48:37 +00:00
const u1 = {
name: 'acidburn',
roles: [
{
name: 'hax0r',
permissions: {
allowed: [
'ViewAdmin',
'ViewChronograf',
'CreateDatabase',
'CreateUserAndRole',
'AddRemoveNode',
'DropDatabase',
'DropData',
'ReadData',
'WriteData',
'Rebalance',
'ManageShard',
'ManageContinuousQuery',
'ManageQuery',
'ManageSubscription',
'Monitor',
'CopyShard',
'KapacitorAPI',
2017-03-30 22:29:43 +00:00
'KapacitorConfigAPI',
],
scope: 'all',
},
2017-03-30 22:29:43 +00:00
},
],
2017-03-09 20:48:37 +00:00
permissions: [],
links: {self: '/chronograf/v1/sources/1/users/acidburn'},
}
const u2 = {
name: 'zerocool',
roles: [],
permissions: [],
links: {self: '/chronograf/v1/sources/1/users/zerocool'},
}
const users = [u1, u2]
2017-03-09 20:48:37 +00:00
// Roles
const r1 = {
name: 'hax0r',
users: [],
permissions: [
{
allowed: [
'ViewAdmin',
'ViewChronograf',
'CreateDatabase',
'CreateUserAndRole',
'AddRemoveNode',
'DropDatabase',
'DropData',
'ReadData',
'WriteData',
'Rebalance',
'ManageShard',
'ManageContinuousQuery',
'ManageQuery',
'ManageSubscription',
'Monitor',
'CopyShard',
'KapacitorAPI',
2017-03-30 22:29:43 +00:00
'KapacitorConfigAPI',
],
scope: 'all',
},
],
2017-03-30 22:29:43 +00:00
links: {self: '/chronograf/v1/sources/1/roles/hax0r'},
}
const r2 = {
name: 'l33tus3r',
2017-03-30 22:29:43 +00:00
links: {self: '/chronograf/v1/sources/1/roles/l33tus3r'},
}
const roles = [r1, r2]
2017-03-10 16:35:51 +00:00
// Permissions
const global = {scope: 'all', allowed: ['p1', 'p2']}
const scoped = {scope: 'db1', allowed: ['p1', 'p3']}
const permissions = [global, scoped]
2017-03-21 22:34:13 +00:00
// Databases && Retention Policies
2017-03-21 23:53:40 +00:00
const rp1 = {
name: 'rp1',
duration: '0',
replication: 2,
isDefault: true,
links: {self: '/chronograf/v1/sources/1/db/db1/rp/rp1'},
}
2017-03-21 22:34:13 +00:00
const db1 = {
name: 'db1',
links: {self: '/chronograf/v1/sources/1/db/db1'},
2017-03-21 23:53:40 +00:00
retentionPolicies: [rp1],
2017-03-21 22:34:13 +00:00
}
const db2 = {
name: 'db2',
links: {self: '/chronograf/v1/sources/1/db/db2'},
retentionPolicies: [],
2017-03-21 23:27:30 +00:00
deleteCode: 'DELETE',
2017-03-21 22:34:13 +00:00
}
describe('Admin.Reducers', () => {
2017-03-21 23:53:40 +00:00
describe('Databases', () => {
2017-03-21 23:27:30 +00:00
const state = {databases: [db1, db2]}
2017-03-21 22:34:13 +00:00
2017-03-21 22:47:51 +00:00
it('can add a database', () => {
2017-03-21 22:34:13 +00:00
const actual = reducer(state, addDatabase())
2017-06-07 16:23:53 +00:00
const expected = [{...NEW_DEFAULT_DATABASE, isEditing: true}, db1, db2]
expect(actual.databases.length).to.equal(expected.length)
expect(actual.databases[0].name).to.equal(expected[0].name)
expect(actual.databases[0].isNew).to.equal(expected[0].isNew)
expect(actual.databases[0].retentionPolicies).to.equal(
expected[0].retentionPolicies
)
2017-03-21 22:47:51 +00:00
})
it('can edit a database', () => {
2017-03-21 23:11:42 +00:00
const updates = {name: 'dbOne'}
const actual = reducer(state, editDatabase(db1, updates))
2017-03-21 23:27:30 +00:00
const expected = [{...db1, ...updates}, db2]
2017-03-21 22:34:13 +00:00
2017-03-21 22:47:51 +00:00
expect(actual.databases).to.deep.equal(expected)
2017-03-21 22:34:13 +00:00
})
2017-03-21 22:51:14 +00:00
it('can remove a database', () => {
const actual = reducer(state, removeDatabase(db1))
2017-03-21 23:27:30 +00:00
const expected = [db2]
2017-03-21 22:51:14 +00:00
2017-03-21 22:56:41 +00:00
expect(actual.databases).to.deep.equal(expected)
})
2017-03-21 23:27:30 +00:00
it('can add a database delete code', () => {
const actual = reducer(state, addDatabaseDeleteCode(db1))
2017-06-07 16:23:53 +00:00
const expected = [{...db1, deleteCode: ''}, db2]
2017-03-21 22:56:41 +00:00
2017-03-21 23:27:30 +00:00
expect(actual.databases).to.deep.equal(expected)
})
it('can remove the delete code', () => {
const actual = reducer(state, removeDatabaseDeleteCode(db2))
delete db2.deleteCode
2017-06-07 16:23:53 +00:00
const expected = [db1, db2]
2017-03-21 22:56:41 +00:00
2017-03-21 22:51:14 +00:00
expect(actual.databases).to.deep.equal(expected)
})
2017-03-21 23:53:40 +00:00
})
describe('Retention Policies', () => {
const state = {databases: [db1]}
it('can add a retention policy', () => {
const actual = reducer(state, addRetentionPolicy(db1))
2017-06-07 16:23:53 +00:00
const expected = [{...db1, retentionPolicies: [NEW_EMPTY_RP, rp1]}]
2017-03-21 23:53:40 +00:00
expect(actual.databases).to.deep.equal(expected)
})
it('can remove a retention policy', () => {
const actual = reducer(state, removeRetentionPolicy(db1, rp1))
2017-06-07 16:23:53 +00:00
const expected = [{...db1, retentionPolicies: []}]
2017-03-21 23:27:30 +00:00
2017-03-21 23:53:40 +00:00
expect(actual.databases).to.deep.equal(expected)
})
it('can edit a retention policy', () => {
const updates = {name: 'rpOne', duration: '100y', replication: '42'}
const actual = reducer(state, editRetentionPolicy(db1, rp1, updates))
2017-06-07 16:23:53 +00:00
const expected = [{...db1, retentionPolicies: [{...rp1, ...updates}]}]
expect(actual.databases).to.deep.equal(expected)
})
2017-03-21 22:34:13 +00:00
})
2017-03-07 07:21:10 +00:00
it('it can add a user', () => {
state = {
2017-06-07 16:23:53 +00:00
users: [u1],
2017-03-07 07:21:10 +00:00
}
2017-03-09 20:48:37 +00:00
const actual = reducer(state, addUser())
const expected = {
2017-06-07 16:23:53 +00:00
users: [{...NEW_DEFAULT_USER, isEditing: true}, u1],
2017-03-09 20:48:37 +00:00
}
expect(actual.users).to.deep.equal(expected.users)
})
it('it can sync a stale user', () => {
const staleUser = {...u1, roles: []}
state = {users: [u2, staleUser]}
2017-03-09 20:48:37 +00:00
const actual = reducer(state, syncUser(staleUser, u1))
2017-03-07 07:21:10 +00:00
const expected = {
users: [u2, u1],
}
expect(actual.users).to.deep.equal(expected.users)
})
2017-03-09 20:48:37 +00:00
it('it can edit a user', () => {
const updates = {name: 'onecool'}
state = {
users: [u2, u1],
}
2017-03-07 07:23:14 +00:00
2017-03-09 20:48:37 +00:00
const actual = reducer(state, editUser(u2, updates))
2017-03-07 07:23:14 +00:00
const expected = {
2017-03-30 22:29:43 +00:00
users: [{...u2, ...updates}, u1],
2017-03-07 07:23:14 +00:00
}
expect(actual.users).to.deep.equal(expected.users)
})
it('it can add a role', () => {
state = {
2017-06-07 16:23:53 +00:00
roles: [r1],
}
const actual = reducer(state, addRole())
const expected = {
2017-06-07 16:23:53 +00:00
roles: [{...NEW_DEFAULT_ROLE, isEditing: true}, r1],
}
expect(actual.roles).to.deep.equal(expected.roles)
})
it('it can sync a stale role', () => {
const staleRole = {...r1, permissions: []}
state = {roles: [r2, staleRole]}
const actual = reducer(state, syncRole(staleRole, r1))
const expected = {
roles: [r2, r1],
}
expect(actual.roles).to.deep.equal(expected.roles)
})
it('it can edit a role', () => {
const updates = {name: 'onecool'}
state = {
roles: [r2, r1],
}
const actual = reducer(state, editRole(r2, updates))
const expected = {
2017-03-30 22:29:43 +00:00
roles: [{...r2, ...updates}, r1],
}
expect(actual.roles).to.deep.equal(expected.roles)
})
it('it can load the roles', () => {
const actual = reducer(state, loadRoles({roles}))
const expected = {
roles,
}
expect(actual.roles).to.deep.equal(expected.roles)
})
it('it can delete a role', () => {
state = {
2017-06-07 16:23:53 +00:00
roles: [r1],
}
const actual = reducer(state, deleteRole(r1))
const expected = {
roles: [],
}
expect(actual.roles).to.deep.equal(expected.roles)
})
it('it can delete a user', () => {
state = {
2017-06-07 16:23:53 +00:00
users: [u1],
}
const actual = reducer(state, deleteUser(u1))
const expected = {
users: [],
}
expect(actual.users).to.deep.equal(expected.users)
})
it('can filter roles w/ "x" text', () => {
state = {
roles,
}
const text = 'x'
const actual = reducer(state, filterRoles(text))
const expected = {
2017-06-07 16:23:53 +00:00
roles: [{...r1, hidden: false}, {...r2, hidden: true}],
}
expect(actual.roles).to.deep.equal(expected.roles)
})
2017-03-09 20:48:37 +00:00
it('can filter users w/ "zero" text', () => {
state = {
users,
}
2017-03-09 20:48:37 +00:00
const text = 'zero'
const actual = reducer(state, filterUsers(text))
const expected = {
2017-06-07 16:23:53 +00:00
users: [{...u1, hidden: true}, {...u2, hidden: false}],
}
expect(actual.users).to.deep.equal(expected.users)
})
2017-03-10 16:35:51 +00:00
// Permissions
it('it can load the permissions', () => {
const actual = reducer(state, loadPermissions({permissions}))
const expected = {
permissions,
}
expect(actual.permissions).to.deep.equal(expected.permissions)
})
})