348 lines
10 KiB
TypeScript
348 lines
10 KiB
TypeScript
import {Organization} from '@influxdata/influx'
|
|
|
|
describe('tokens', () => {
|
|
let authData: {description: string; status: boolean; id: string}[]
|
|
let testTokens: {
|
|
id: string
|
|
description: string
|
|
status: string
|
|
permissions: object[]
|
|
}[]
|
|
|
|
beforeEach(() => {
|
|
cy.flush()
|
|
|
|
authData = []
|
|
|
|
cy.signin().then(({body}) => {
|
|
const {
|
|
org: {id},
|
|
} = body
|
|
cy.wrap(body.org).as('org')
|
|
|
|
testTokens = [
|
|
{
|
|
id: id,
|
|
description: 'token test \u0950',
|
|
status: 'active',
|
|
permissions: [
|
|
{action: 'write', resource: {type: 'views'}},
|
|
{action: 'write', resource: {type: 'documents'}},
|
|
{action: 'write', resource: {type: 'dashboards'}},
|
|
{action: 'write', resource: {type: 'buckets'}},
|
|
],
|
|
},
|
|
{
|
|
id: id,
|
|
description: 'token test 02',
|
|
status: 'inactive',
|
|
permissions: [
|
|
{action: 'write', resource: {type: 'views'}},
|
|
{action: 'write', resource: {type: 'documents'}},
|
|
{action: 'write', resource: {type: 'dashboards'}},
|
|
{action: 'write', resource: {type: 'buckets'}},
|
|
],
|
|
},
|
|
{
|
|
id: id,
|
|
description: 'token test 03',
|
|
status: 'inactive',
|
|
permissions: [
|
|
{action: 'read', resource: {type: 'views'}},
|
|
{action: 'read', resource: {type: 'documents'}},
|
|
{action: 'read', resource: {type: 'dashboards'}},
|
|
{action: 'read', resource: {type: 'buckets'}},
|
|
],
|
|
},
|
|
]
|
|
|
|
//check out array.reduce for the nested calls here
|
|
cy.request('api/v2/authorizations').then(resp => {
|
|
expect(resp.body).to.exist
|
|
authData.push({
|
|
description: resp.body.authorizations[0].description,
|
|
status: resp.body.authorizations[0].status === 'active',
|
|
id: resp.body.authorizations[0].id,
|
|
})
|
|
|
|
testTokens.forEach(token => {
|
|
cy.createToken(
|
|
token.id,
|
|
token.description,
|
|
token.status,
|
|
token.permissions
|
|
).then(resp => {
|
|
expect(resp.body).to.exist
|
|
authData.push({
|
|
description: resp.body.description,
|
|
status: resp.body.status === 'active',
|
|
id: resp.body.id,
|
|
})
|
|
})
|
|
})
|
|
|
|
cy.fixture('routes').then(({orgs}) => {
|
|
cy.visit(`${orgs}/${id}/tokens`)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
it('can list tokens', () => {
|
|
cy.getByTestID('table-row').should('have.length', 4)
|
|
cy.getByTestID('table-row').then(rows => {
|
|
authData = authData.sort((a, b) =>
|
|
// eslint-disable-next-line
|
|
a.description < b.description
|
|
? -1
|
|
: a.description > b.description
|
|
? 1
|
|
: 0
|
|
)
|
|
|
|
for (var i = 0; i < rows.length; i++) {
|
|
cy.getByTestID('editable-name')
|
|
.eq(i)
|
|
.children('a')
|
|
.children('span')
|
|
.should('have.text', authData[i].description)
|
|
|
|
if (authData[i].status) {
|
|
cy.getByTestID('slide-toggle')
|
|
.eq(i)
|
|
.should('have.class', 'active')
|
|
} else {
|
|
cy.getByTestID('slide-toggle')
|
|
.eq(i)
|
|
.should('not.have.class', 'active')
|
|
}
|
|
}
|
|
})
|
|
})
|
|
|
|
it('can filter tokens', () => {
|
|
//basic filter
|
|
cy.getByTestID('input-field--filter').type('test')
|
|
cy.getByTestID('table-row').should('have.length', 3)
|
|
|
|
//clear filter
|
|
cy.getByTestID('input-field--filter').clear()
|
|
cy.getByTestID('table-row').should('have.length', 4)
|
|
|
|
//exotic filter
|
|
cy.getByTestID('input-field--filter').type('\u0950')
|
|
cy.getByTestID('table-row').should('have.length', 1)
|
|
})
|
|
|
|
it('can change token activation status', () => {
|
|
//toggle on
|
|
cy.getByTestID('table-row')
|
|
.contains('token test 02')
|
|
.parents('[data-testid=table-row]')
|
|
.within(() => {
|
|
cy.getByTestID('slide-toggle')
|
|
.click()
|
|
.then(() => {
|
|
//wait for backend to sync
|
|
cy.wait(1000)
|
|
|
|
//check for status update on backend
|
|
// @ts-ignore
|
|
cy.request(
|
|
'api/v2/authorizations/' +
|
|
authData.find(function(item) {
|
|
return item.description === 'token test 02'
|
|
}).id
|
|
).then(resp => {
|
|
expect(resp.body.status).equals('active')
|
|
})
|
|
})
|
|
})
|
|
|
|
cy.getByTestID('table-row')
|
|
.contains('token test 02')
|
|
.parents('[data-testid=table-row]')
|
|
.within(() => {
|
|
cy.getByTestID('slide-toggle').should('have.class', 'active')
|
|
})
|
|
|
|
cy.getByTestID('table-row')
|
|
.contains('token test 02')
|
|
.parents('[data-testid=table-row]')
|
|
.within(() => {
|
|
cy.getByTestID('slide-toggle')
|
|
.click()
|
|
.then(() => {
|
|
//wait for backend to sync
|
|
cy.wait(1000)
|
|
|
|
//check for status update on backend
|
|
// @ts-ignore
|
|
cy.request(
|
|
'api/v2/authorizations/' +
|
|
authData.find(function(item) {
|
|
return item.description === 'token test 02'
|
|
}).id
|
|
).then(resp => {
|
|
expect(resp.body.status).equals('inactive')
|
|
})
|
|
})
|
|
})
|
|
|
|
cy.getByTestID('table-row')
|
|
.contains('token test 02')
|
|
.parents('[data-testid=table-row]')
|
|
.within(() => {
|
|
cy.getByTestID('slide-toggle').should('not.have.class', 'active')
|
|
})
|
|
})
|
|
|
|
it('can delete a token', () => {
|
|
cy.getByTestID('table-row').should('have.length', 4)
|
|
|
|
cy.getByTestID('table-row')
|
|
.contains('token test 03')
|
|
.parents('[data-testid=table-row]')
|
|
.within(() => {
|
|
cy.getByTestID('delete-button')
|
|
.click()
|
|
.then(() => {
|
|
cy.getByTestID('confirmation-button').click({force: true})
|
|
})
|
|
})
|
|
|
|
cy.getByTestID('table-row').should('have.length', 3)
|
|
|
|
cy.getByTestID('table-row')
|
|
.contains('token test 03')
|
|
.should('not.exist')
|
|
})
|
|
|
|
it('can generate a read/write token', () => {
|
|
cy.getByTestID('table-row').should('have.length', 4)
|
|
|
|
//create some extra buckets for filters
|
|
cy.get<Organization>('@org').then(({id, name}) => {
|
|
cy.createBucket(id, name, 'Magna Carta').then(() => {
|
|
cy.createBucket(id, name, 'Sicilsky Bull').then(() => {
|
|
cy.createBucket(id, name, 'A la Carta')
|
|
})
|
|
})
|
|
|
|
// open overlay
|
|
cy.getByTestID('dropdown-button--gen-token').click()
|
|
cy.getByTestIDSubStr('dropdown--item').should('have.length', 2)
|
|
cy.getByTestID('dropdown--item Read/Write Token').click()
|
|
cy.getByTestID('overlay--container').should('be.visible')
|
|
|
|
//check cancel
|
|
cy.getByTestID('button--cancel').click()
|
|
cy.getByTestID('overlay--container').should('not.be.visible')
|
|
cy.getByTestID('table-row').should('have.length', 4)
|
|
|
|
// open overlay - again
|
|
cy.getByTestID('dropdown-button--gen-token').click()
|
|
cy.getByTestIDSubStr('dropdown--item').should('have.length', 2)
|
|
cy.getByTestID('dropdown--item Read/Write Token').click()
|
|
cy.getByTestID('overlay--container').should('be.visible')
|
|
|
|
//Create a token //todo filters in this or seperate test
|
|
cy.getByTestID('input-field--descr').type('Jeton 01')
|
|
cy.getByTestID('builder-card--body')
|
|
.eq(0)
|
|
.within(() => {
|
|
cy.getByTitle('Click to filter by Sicilsky Bull').click()
|
|
cy.getByTitle('Click to filter by A la Carta').click()
|
|
})
|
|
cy.getByTestID('builder-card--body')
|
|
.eq(1)
|
|
.within(() => {
|
|
cy.getByTitle('Click to filter by Sicilsky Bull').click()
|
|
})
|
|
|
|
cy.getByTestID('button--save').click()
|
|
|
|
//Verify token
|
|
cy.getByTestID('table-row')
|
|
.should('have.length', 5)
|
|
.contains('Jeton 01')
|
|
.should('be.visible')
|
|
cy.getByTestID('table-row')
|
|
.contains('Jeton 01')
|
|
.click()
|
|
cy.getByTestID('overlay--container').should('be.visible')
|
|
cy.getByTestID('overlay--header').should('contain', 'Jeton 01')
|
|
cy.getByTestID('permissions-section').should('have.length', 2)
|
|
|
|
cy.getByTestID('permissions-section')
|
|
.contains('buckets-Sicilsky Bull')
|
|
.should('be.visible')
|
|
cy.getByTestID('permissions-section')
|
|
.contains('buckets-Sicilsky Bull')
|
|
.parent()
|
|
.parent()
|
|
.within(() => {
|
|
cy.getByTestID('permissions--item').should('have.length', 2)
|
|
cy.getByTestID('permissions--item')
|
|
.contains('write')
|
|
.should('be.visible')
|
|
cy.getByTestID('permissions--item')
|
|
.contains('read')
|
|
.should('be.visible')
|
|
})
|
|
|
|
cy.getByTestID('permissions-section')
|
|
.contains('buckets-A la Carta')
|
|
.parent()
|
|
.parent()
|
|
.within(() => {
|
|
cy.getByTestID('permissions--item').should('have.length', 1)
|
|
cy.getByTestID('permissions--item')
|
|
.contains('write')
|
|
.should('not.be.visible')
|
|
cy.getByTestID('permissions--item')
|
|
.contains('read')
|
|
.should('be.visible')
|
|
})
|
|
})
|
|
|
|
it('can view a token', () => {
|
|
cy.getByTestID('table-row')
|
|
.contains('token test \u0950')
|
|
.click()
|
|
|
|
//title match
|
|
cy.getByTestID('overlay--container').should('be.visible')
|
|
cy.getByTestID('overlay--header').should('contain', 'token test \u0950')
|
|
|
|
//summary match
|
|
cy.getByTestID('permissions-section').should('have.length', 4)
|
|
cy.getByTestID('permissions-section')
|
|
.contains('views')
|
|
.should('be.visible')
|
|
cy.getByTestID('permissions-section')
|
|
.contains('documents')
|
|
.should('be.visible')
|
|
cy.getByTestID('permissions-section')
|
|
.contains('dashboards')
|
|
.should('be.visible')
|
|
cy.getByTestID('permissions-section')
|
|
.contains('buckets')
|
|
.should('be.visible')
|
|
|
|
//copy to clipboard + notification
|
|
cy.getByTestID('button-copy').click()
|
|
cy.getByTestID('notification-success').should($msg => {
|
|
expect($msg).to.contain('has been copied to clipboard')
|
|
})
|
|
//todo check system clipboard
|
|
|
|
//close button
|
|
cy.getByTestID('overlay--header').within(() => {
|
|
cy.get('button').click()
|
|
})
|
|
cy.getByTestID('overlay--container').should('not.be.visible')
|
|
})
|
|
})
|
|
})
|