further solved tests

This commit is contained in:
Claus-Peter Huebner 2023-06-30 23:23:35 +02:00
parent eb537301b8
commit faf86f95b9
3 changed files with 32 additions and 41 deletions

View File

@ -434,15 +434,13 @@ describe('UserResolver', () => {
beforeAll(async () => {
await userFactory(testEnv, peterLustig)
await userFactory(testEnv, bobBaumeister)
const loginResult = await mutate({ mutation: login, variables: bobData })
console.log('login result=', loginResult)
await mutate({ mutation: login, variables: bobData })
// create contribution as user bob
contribution = await mutate({
mutation: createContribution,
variables: { amount: 1000, memo: 'testing', creationDate: new Date().toISOString() },
})
console.log('createContribution contribution=', contribution)
// login as admin
await mutate({ mutation: login, variables: peterData })
@ -452,7 +450,6 @@ describe('UserResolver', () => {
mutation: confirmContribution,
variables: { id: contribution.data.createContribution.id },
})
console.log('confirmContribution contribution=', contribution)
// login as user bob
bob = await mutate({ mutation: login, variables: bobData })
@ -477,7 +474,6 @@ describe('UserResolver', () => {
redeemCode: transactionLink.code,
},
})
console.log('newUser=', newUser)
})
it('sets the referrer id to bob baumeister id', async () => {
@ -1411,7 +1407,7 @@ describe('UserResolver', () => {
})
})
it.only('finds peter@lustig.de', async () => {
it('finds peter@lustig.de', async () => {
await expect(mutate({ mutation: searchAdminUsers })).resolves.toEqual(
expect.objectContaining({
data: {
@ -1625,14 +1621,14 @@ describe('UserResolver', () => {
})
it('stores the ADMIN_USER_ROLE_SET event in the database', async () => {
const userContact = await UserContact.findOneOrFail(
{ email: 'bibi@bloxberg.de' },
{ relations: ['user'] },
)
const adminContact = await UserContact.findOneOrFail(
{ email: 'peter@lustig.de' },
{ relations: ['user'] },
)
const userContact = await UserContact.findOneOrFail({
where: { email: 'bibi@bloxberg.de' },
relations: ['user'],
})
const adminContact = await UserContact.findOneOrFail({
where: { email: 'peter@lustig.de' },
relations: ['user'],
})
await expect(DbEvent.find()).resolves.toContainEqual(
expect.objectContaining({
type: EventType.ADMIN_USER_ROLE_SET,

View File

@ -717,8 +717,8 @@ export class UserResolver {
async setUserRole(
@Arg('userId', () => Int)
userId: number,
@Arg('role', () => String)
role: string,
@Arg('role', () => String, { nullable: true })
role: string | null,
@Ctx()
context: Context,
): Promise<string | null> {
@ -735,7 +735,6 @@ export class UserResolver {
where: { id: userId },
relations: ['userRoles'],
})
console.log('setUserRole user=', user)
// user exists ?
if (!user) {
throw new LogError('Could not find user with given ID', userId)
@ -745,33 +744,29 @@ export class UserResolver {
if (moderator.id === userId) {
throw new LogError('Administrator can not change his own role')
}
if (isUserInRole(user, role)) {
// if user role(s) should be deleted by role=null as parameter
if (role === null && user.userRoles && user.userRoles.length > 0) {
await UserRole.delete({ userId: user.id })
user.userRoles = undefined
} else if (isUserInRole(user, role)) {
throw new LogError('User already has role=', role)
}
// if user role should be deleted by role=null as parameter
if (role === null && user.userRoles) {
for (const usrRole of user.userRoles) {
await UserRole.delete(usrRole)
if (role) {
if (user.userRoles === undefined) {
user.userRoles = [] as UserRole[]
}
user.userRoles = undefined
} else {
if (!isUserInRole(user, role)) {
if (user.userRoles === undefined) {
user.userRoles = [] as UserRole[]
user.userRoles[0] = UserRole.create()
}
user.userRoles[0].createdAt = new Date()
user.userRoles[0].role = role
user.userRoles[0].userId = user.id
} else {
throw new LogError('User already is in role=', role)
if (user.userRoles.length < 1) {
user.userRoles.push(UserRole.create())
}
user.userRoles[0].createdAt = new Date()
user.userRoles[0].role = role
user.userRoles[0].userId = user.id
await UserRole.save(user.userRoles[0])
}
console.log('setUserRole before save user=', user)
await user.save()
// await user.save()
await EVENT_ADMIN_USER_ROLE_SET(user, moderator)
const newUser = await DbUser.findOne({ id: userId }, { relations: ['userRoles'] })
console.log('setUserRole newUser=', user)
const newUser = await DbUser.findOne({ where: { id: userId }, relations: ['userRoles'] })
console.log('setUserRole newUser=', newUser)
return newUser?.userRoles ? newUser.userRoles[0].role : null
}
@ -865,7 +860,7 @@ export async function findUserByEmail(email: string): Promise<DbUser> {
})
const dbUser = dbUserContact.user
dbUser.emailContact = dbUserContact
dbUser.userRoles = await UserRole.find({ userId: dbUser.id })
dbUser.userRoles = await UserRole.find({ where: { userId: dbUser.id } })
return dbUser
}
@ -894,7 +889,7 @@ const canEmailResend = (updatedAt: Date): boolean => {
return !isTimeExpired(updatedAt, CONFIG.EMAIL_CODE_REQUEST_TIME)
}
export function isUserInRole(user: DbUser, role: string): boolean {
export function isUserInRole(user: DbUser, role: string | null): boolean {
if (user?.userRoles) {
for (const usrRole of user.userRoles) {
if (usrRole.role === role) {

View File

@ -119,7 +119,7 @@ export const confirmContribution = gql`
`
export const setUserRole = gql`
mutation ($userId: Int!, $role: String!) {
mutation ($userId: Int!, $role: String) {
setUserRole(userId: $userId, role: $role)
}
`