test((server) user admin test): fix async failing test handling
This commit is contained in:
@@ -31,7 +31,7 @@ const {
|
||||
|
||||
const { createObject, createObjects } = require( '../services/objects' )
|
||||
|
||||
describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
describe( 'Actors & Tokens @user-services', () => {
|
||||
let myTestActor = {
|
||||
name: 'Dimitrie Stefanescu',
|
||||
email: 'didimitrie@gmail.com',
|
||||
@@ -40,22 +40,22 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
|
||||
let otherUser = {}
|
||||
|
||||
before( async ( ) => {
|
||||
await knex.migrate.rollback( )
|
||||
await knex.migrate.latest( )
|
||||
before( async () => {
|
||||
await knex.migrate.rollback()
|
||||
await knex.migrate.latest()
|
||||
await init()
|
||||
|
||||
let actorId = await createUser( myTestActor )
|
||||
myTestActor.id = actorId
|
||||
} )
|
||||
|
||||
after( async ( ) => {
|
||||
await knex.migrate.rollback( )
|
||||
after( async () => {
|
||||
await knex.migrate.rollback()
|
||||
} )
|
||||
|
||||
|
||||
describe( 'Users @core-users', ( ) => {
|
||||
it( 'Should create an user', async ( ) => {
|
||||
describe( 'Users @core-users', () => {
|
||||
it( 'Should create an user', async () => {
|
||||
let newUser = { ...myTestActor }
|
||||
newUser.name = 'Bill Gates'
|
||||
newUser.email = 'bill@gates.com'
|
||||
@@ -68,7 +68,7 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
expect( actorId ).to.be.a( 'string' )
|
||||
} )
|
||||
|
||||
it( 'Should store user email lowercase', async ( ) => {
|
||||
it( 'Should store user email lowercase', async () => {
|
||||
let user = { name: 'Marty McFly', email: 'Marty@Mc.Fly', password: 'something_future_proof' }
|
||||
|
||||
let userId = await createUser( user )
|
||||
@@ -76,13 +76,13 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
let storedUser = await getUser( userId )
|
||||
expect( storedUser.email ).to.equal( user.email.toLowerCase() )
|
||||
} )
|
||||
|
||||
it ( 'Get user by should ignore email casing', async ( ) => {
|
||||
|
||||
it( 'Get user by should ignore email casing', async () => {
|
||||
let user = await getUserByEmail( { email: 'BiLL@GaTES.cOm' } )
|
||||
expect( user.email ).to.equal( 'bill@gates.com' )
|
||||
} )
|
||||
|
||||
it ( 'Validate password should ignore email casing', async ( ) => {
|
||||
it( 'Validate password should ignore email casing', async () => {
|
||||
expect( await validatePasssword( { email: 'BiLL@GaTES.cOm', password: 'testthebest' } ) )
|
||||
} )
|
||||
|
||||
@@ -95,8 +95,8 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
assert.fail( 'short pwd' )
|
||||
} )
|
||||
|
||||
it( 'Should not create an user with the same email', async ( ) => {
|
||||
let newUser = { }
|
||||
it( 'Should not create an user with the same email', async () => {
|
||||
let newUser = {}
|
||||
newUser.name = 'Bill Gates'
|
||||
newUser.email = 'bill@gates.com'
|
||||
newUser.password = 'testthebest'
|
||||
@@ -111,8 +111,8 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
|
||||
let ballmerUserId = null
|
||||
|
||||
it( 'Find or create should create a user', async ( ) => {
|
||||
let newUser = { }
|
||||
it( 'Find or create should create a user', async () => {
|
||||
let newUser = {}
|
||||
newUser.name = 'Steve Ballmer Balls'
|
||||
newUser.email = 'ballmer@balls.com'
|
||||
newUser.password = 'testthebest'
|
||||
@@ -122,8 +122,8 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
expect( id ).to.be.a( 'string' )
|
||||
} )
|
||||
|
||||
it( 'Find or create should NOT create a user', async ( ) => {
|
||||
let newUser = { }
|
||||
it( 'Find or create should NOT create a user', async () => {
|
||||
let newUser = {}
|
||||
newUser.name = 'Steve Ballmer Balls'
|
||||
newUser.email = 'ballmer@balls.com'
|
||||
newUser.password = 'testthebest'
|
||||
@@ -134,15 +134,15 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
} )
|
||||
|
||||
// Note: deletion is more complicated.
|
||||
it( 'Should delete a user', async ( ) => {
|
||||
it( 'Should delete a user', async () => {
|
||||
let soloOwnerStream = { name: 'Test Stream 01', description: 'wonderful test stream', isPublic: true }
|
||||
let multiOwnerStream = { name: 'Test Stream 02', description: 'another test stream', isPublic: true }
|
||||
|
||||
soloOwnerStream.id = await createStream( { ...soloOwnerStream, ownerId: ballmerUserId } )
|
||||
multiOwnerStream.id = await createStream( { ...multiOwnerStream, ownerId: ballmerUserId } )
|
||||
|
||||
|
||||
await grantPermissionsStream( { streamId: multiOwnerStream.id, userId: myTestActor.id, role: 'stream:owner' } )
|
||||
|
||||
|
||||
// create a branch for ballmer on the multiowner stream
|
||||
let branch = { name: 'ballmer/dev' }
|
||||
branch.id = await createBranch( { ...branch, streamId: multiOwnerStream.id, authorId: ballmerUserId } )
|
||||
@@ -152,8 +152,8 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
|
||||
// create an object and a commit around it on the multiowner stream
|
||||
let objId = await createObject( multiOwnerStream.id, { pie: 'in the sky' } )
|
||||
let commitId = await createCommitByBranchName( { streamId: multiOwnerStream.id, branchName: 'ballmer/dev', message: 'breakfast commit', sourceApplication: 'tests', objectId:objId, authorId: ballmerUserId } )
|
||||
|
||||
let commitId = await createCommitByBranchName( { streamId: multiOwnerStream.id, branchName: 'ballmer/dev', message: 'breakfast commit', sourceApplication: 'tests', objectId: objId, authorId: ballmerUserId } )
|
||||
|
||||
await deleteUser( ballmerUserId )
|
||||
|
||||
if ( await getStream( { streamId: soloOwnerStream.id } ) !== undefined ) {
|
||||
@@ -168,7 +168,7 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
let branches = await getBranchesByStreamId( { streamId: multiOwnerStream.id } )
|
||||
expect( branches.items.length ).to.equal( 3 )
|
||||
|
||||
let branchCommits = await getCommitsByBranchName( { streamId: multiOwnerStream.id, branchName:'ballmer/dev' } )
|
||||
let branchCommits = await getCommitsByBranchName( { streamId: multiOwnerStream.id, branchName: 'ballmer/dev' } )
|
||||
expect( branchCommits.commits.length ).to.equal( 1 )
|
||||
|
||||
let commit = await getCommitById( { id: commitId } )
|
||||
@@ -182,18 +182,18 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
assert.fail( 'user not deleted' )
|
||||
} )
|
||||
|
||||
it( 'Should get a user', async ( ) => {
|
||||
it( 'Should get a user', async () => {
|
||||
let actor = await getUser( myTestActor.id )
|
||||
expect( actor ).to.not.have.property( 'passwordDigest' )
|
||||
} )
|
||||
|
||||
it( 'Should search and get users', async ( ) => {
|
||||
it( 'Should search and get users', async () => {
|
||||
let { users } = await searchUsers( 'gates', 20, null )
|
||||
expect( users ).to.have.lengthOf( 1 )
|
||||
expect( users[ 0 ].name ).to.equal( 'Bill Gates' )
|
||||
expect( users[0].name ).to.equal( 'Bill Gates' )
|
||||
} )
|
||||
|
||||
it( 'Should update a user', async ( ) => {
|
||||
it( 'Should update a user', async () => {
|
||||
let updatedActor = { ...myTestActor }
|
||||
updatedActor.name = 'didimitrie'
|
||||
|
||||
@@ -203,7 +203,7 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
expect( actor.name ).to.equal( updatedActor.name )
|
||||
} )
|
||||
|
||||
it( 'Should not update password', async ( ) => {
|
||||
it( 'Should not update password', async () => {
|
||||
let updatedActor = { ...myTestActor }
|
||||
updatedActor.password = 'failwhale'
|
||||
|
||||
@@ -213,7 +213,7 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
expect( match ).to.equal( false )
|
||||
} )
|
||||
|
||||
it( 'Should validate user password', async ( ) => {
|
||||
it( 'Should validate user password', async () => {
|
||||
let actor = {}
|
||||
actor.password = 'super-test-200'
|
||||
actor.email = 'e@ma.il'
|
||||
@@ -227,8 +227,8 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
expect( match_wrong ).to.equal( false )
|
||||
} )
|
||||
|
||||
it( 'Should update the password of a user', async() => {
|
||||
let id = await createUser( { name: 'D', email:'tester@mcbester.com', password:'H4!b5at+kWls-8yh4Guq' } ) // https://mostsecure.pw
|
||||
it( 'Should update the password of a user', async () => {
|
||||
let id = await createUser( { name: 'D', email: 'tester@mcbester.com', password: 'H4!b5at+kWls-8yh4Guq' } ) // https://mostsecure.pw
|
||||
await updateUserPassword( { id, newPassword: 'Hello Dogs and Cats' } )
|
||||
|
||||
let match = await validatePasssword( { email: 'tester@mcbester.com', password: 'Hello Dogs and Cats' } )
|
||||
@@ -236,21 +236,21 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
} )
|
||||
} )
|
||||
|
||||
describe( 'API Tokens @core-apitokens', ( ) => {
|
||||
describe( 'API Tokens @core-apitokens', () => {
|
||||
let myFirstToken
|
||||
let pregeneratedToken
|
||||
let revokedToken
|
||||
let someOtherToken
|
||||
let expireSoonToken
|
||||
|
||||
before( async ( ) => {
|
||||
before( async () => {
|
||||
pregeneratedToken = await createPersonalAccessToken( myTestActor.id, 'Whabadub', [ 'streams:read', 'streams:write', 'profile:read', 'users:email' ] )
|
||||
revokedToken = await createPersonalAccessToken( myTestActor.id, 'Mr. Revoked', [ 'streams:read' ] )
|
||||
someOtherToken = await createPersonalAccessToken( otherUser.id, 'Hello World', [ 'streams:write' ] )
|
||||
expireSoonToken = await createPersonalAccessToken( myTestActor.id, 'Mayfly', [ 'streams:read' ], 1 ) // 1ms lifespan
|
||||
} )
|
||||
|
||||
it( 'Should create an personal api token', async ( ) => {
|
||||
it( 'Should create an personal api token', async () => {
|
||||
let scopes = [ 'streams:write', 'profile:read' ]
|
||||
let name = 'My Test Token'
|
||||
|
||||
@@ -263,7 +263,7 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
// expect( test ).to.have.lengthOf( 42 )
|
||||
// } )
|
||||
|
||||
it( 'Should validate a token', async ( ) => {
|
||||
it( 'Should validate a token', async () => {
|
||||
let res = await validateToken( pregeneratedToken )
|
||||
expect( res ).to.have.property( 'valid' )
|
||||
expect( res.valid ).to.equal( true )
|
||||
@@ -272,20 +272,20 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
expect( res ).to.have.property( 'role' )
|
||||
} )
|
||||
|
||||
it( 'Should revoke an api token', async ( ) => {
|
||||
it( 'Should revoke an api token', async () => {
|
||||
await revokeToken( revokedToken, myTestActor.id )
|
||||
let res = await validateToken( revokedToken )
|
||||
expect( res ).to.have.property( 'valid' )
|
||||
expect( res.valid ).to.equal( false )
|
||||
} )
|
||||
|
||||
it( 'Should refuse an expired token', async ( ) => {
|
||||
it( 'Should refuse an expired token', async () => {
|
||||
let res = await validateToken( expireSoonToken )
|
||||
expect( res.valid ).to.equal( false )
|
||||
// assert.fail( )
|
||||
} )
|
||||
|
||||
it( 'Should get the tokens of an user', async ( ) => {
|
||||
it( 'Should get the tokens of an user', async () => {
|
||||
let userTokens = await getUserTokens( myTestActor.id )
|
||||
expect( userTokens ).to.be.an( 'array' )
|
||||
expect( userTokens ).to.have.lengthOf( 2 )
|
||||
@@ -294,7 +294,7 @@ describe( 'Actors & Tokens @user-services', ( ) => {
|
||||
} )
|
||||
|
||||
|
||||
describe ( 'User admin @user-services', ( ) => {
|
||||
describe( 'User admin @user-services', () => {
|
||||
let myTestActor = {
|
||||
name: 'Gergo Jedlicska',
|
||||
email: 'gergo@jedlicska.com',
|
||||
@@ -302,30 +302,30 @@ describe ( 'User admin @user-services', ( ) => {
|
||||
}
|
||||
|
||||
before( async () => {
|
||||
await knex.migrate.rollback( )
|
||||
await knex.migrate.latest( )
|
||||
await knex.migrate.rollback()
|
||||
await knex.migrate.latest()
|
||||
await init()
|
||||
|
||||
let actorId = await createUser( myTestActor )
|
||||
myTestActor.id = actorId
|
||||
} )
|
||||
|
||||
after( async ( ) => {
|
||||
await knex.migrate.rollback( )
|
||||
after( async () => {
|
||||
await knex.migrate.rollback()
|
||||
} )
|
||||
|
||||
it ( 'First created user should be admin', async () => {
|
||||
it( 'First created user should be admin', async () => {
|
||||
let users = await getUsers( 100, 0 )
|
||||
expect( users ).to.be.an( 'array' )
|
||||
expect( users ).to.have.lengthOf( 1 )
|
||||
let firstUser = users[0]
|
||||
|
||||
let userRole = await getUserRole( firstUser.id )
|
||||
let userRole = await getUserRole( firstUser.id )
|
||||
expect( userRole ).to.equal( 'server:admin' )
|
||||
} )
|
||||
|
||||
it ( 'Count user knows how to count', async () => {
|
||||
expect ( await countUsers() ).to.equal( 1 )
|
||||
it( 'Count user knows how to count', async () => {
|
||||
expect( await countUsers() ).to.equal( 1 )
|
||||
let newUser = { ...myTestActor }
|
||||
newUser.name = 'Bill Gates'
|
||||
newUser.email = 'bill@gates.com'
|
||||
@@ -333,13 +333,13 @@ describe ( 'User admin @user-services', ( ) => {
|
||||
|
||||
let actorId = await createUser( newUser )
|
||||
|
||||
expect ( await countUsers() ).to.equal( 2 )
|
||||
expect( await countUsers() ).to.equal( 2 )
|
||||
|
||||
await deleteUser( actorId )
|
||||
expect ( await countUsers() ).to.equal( 1 )
|
||||
expect( await countUsers() ).to.equal( 1 )
|
||||
} )
|
||||
|
||||
it ( 'Get users query limit is sanitized to upper limit', async () => {
|
||||
it( 'Get users query limit is sanitized to upper limit', async () => {
|
||||
let createNewDroid = ( number ) => {
|
||||
return {
|
||||
name: `${number}`,
|
||||
@@ -350,49 +350,52 @@ describe ( 'User admin @user-services', ( ) => {
|
||||
|
||||
let userInputs = Array( 250 ).fill().map( ( v, i ) => createNewDroid( i ) )
|
||||
|
||||
expect ( await countUsers() ).to.equal( 1 )
|
||||
expect( await countUsers() ).to.equal( 1 )
|
||||
|
||||
await Promise.all( userInputs.map( userInput => createUser( userInput ) ) )
|
||||
expect ( await countUsers() ).to.equal( 251 )
|
||||
expect( await countUsers() ).to.equal( 251 )
|
||||
|
||||
let users = await getUsers( 2000000 )
|
||||
expect ( users ).to.have.lengthOf( 200 )
|
||||
expect( users ).to.have.lengthOf( 200 )
|
||||
} )
|
||||
|
||||
it ( 'Get users offset is applied', async () => {
|
||||
it( 'Get users offset is applied', async () => {
|
||||
let users = await getUsers( 200, 200 )
|
||||
expect( users ).to.have.lengthOf( 51 )
|
||||
} )
|
||||
|
||||
it ( 'User query filters', async () => {
|
||||
it( 'User query filters', async () => {
|
||||
let users = await getUsers( 100, 0, 'gergo' )
|
||||
expect ( users ).to.have.lengthOf( 1 )
|
||||
expect( users ).to.have.lengthOf( 1 )
|
||||
let [ user ] = users
|
||||
expect ( user.email ).to.equal( 'gergo@jedlicska.com' )
|
||||
expect( user.email ).to.equal( 'gergo@jedlicska.com' )
|
||||
} )
|
||||
|
||||
it ( 'Count users applies query', async () => {
|
||||
expect ( await countUsers( 'droid' ) ).to.equal( 250 )
|
||||
it( 'Count users applies query', async () => {
|
||||
expect( await countUsers( 'droid' ) ).to.equal( 250 )
|
||||
} )
|
||||
|
||||
it ( 'Change user role modifies role', async () => {
|
||||
it( 'Change user role modifies role', async () => {
|
||||
let [ user ] = await getUsers( 1, 10 )
|
||||
|
||||
let oldRole = await getUserRole( user.id )
|
||||
expect( oldRole ).to.equal( 'server:user' )
|
||||
|
||||
await makeUserAdmin ( { userId: user.id } )
|
||||
await makeUserAdmin( { userId: user.id } )
|
||||
let newRole = await getUserRole( user.id )
|
||||
expect( newRole ).to.equal( 'server:admin' )
|
||||
|
||||
await unmakeUserAdmin ( { userId: user.id } )
|
||||
await unmakeUserAdmin( { userId: user.id } )
|
||||
newRole = await getUserRole( user.id )
|
||||
expect( newRole ).to.equal( 'server:user' )
|
||||
} )
|
||||
|
||||
it ( 'Ensure at least one admin remains in the server', async () => {
|
||||
unmakeUserAdmin ( { userId: myTestActor.id, role: 'server:admin' } )
|
||||
.then( function( m ) { throw new Error( 'This should have failed' ) } )
|
||||
.catch( function( err ) { expect( err ).to.equal( new Error( 'Cannot remove the last admin role from the server' ) ) } )
|
||||
it( 'Ensure at least one admin remains in the server', async () => {
|
||||
try {
|
||||
await unmakeUserAdmin( { userId: myTestActor.id, role: 'server:admin' } )
|
||||
assert.fail( 'This should have failed' )
|
||||
} catch ( err ) {
|
||||
expect( err.message ).to.equal( 'Cannot remove the last admin role from the server' )
|
||||
}
|
||||
} )
|
||||
} )
|
||||
|
||||
Reference in New Issue
Block a user