feat: wrap article and user service functions with TypedResult for improved error handling
This commit is contained in:
@@ -35,14 +35,15 @@ describe('UserService', () => {
|
||||
role: 'user',
|
||||
};
|
||||
|
||||
const savedUser = await saveUser(userToSave);
|
||||
const result = await saveUser(userToSave);
|
||||
|
||||
expect(savedUser.id).toBeDefined();
|
||||
expect(savedUser.name).toBe(userToSave.name);
|
||||
expect(savedUser.email).toBe(userToSave.email);
|
||||
expect(savedUser.role).toBe(userToSave.role);
|
||||
expect(savedUser.role).toBe(userToSave.role);
|
||||
expect(savedUser.externalId).toBeDefined(); // Default to true if not set
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value.id).toBeDefined();
|
||||
expect(result.value.name).toBe(userToSave.name);
|
||||
expect(result.value.email).toBe(userToSave.email);
|
||||
expect(result.value.role).toBe(userToSave.role);
|
||||
expect(result.value.externalId).toBeDefined();
|
||||
});
|
||||
|
||||
test('cannot save user with existing email', async () => {
|
||||
@@ -51,23 +52,31 @@ describe('UserService', () => {
|
||||
email: 'test@email.com',
|
||||
role: 'user',
|
||||
};
|
||||
await expect(saveUser(userToSave)).rejects.toThrow(
|
||||
`User with email ${userToSave.email} already exists`
|
||||
);
|
||||
|
||||
const result = await saveUser(userToSave);
|
||||
|
||||
expect(result.ok).toBe(false);
|
||||
if (result.ok) return;
|
||||
expect(result.error.message).toContain(userToSave.email);
|
||||
});
|
||||
|
||||
test('can getUserByEmail', async () => {
|
||||
const user = await getUserByEmail('test@email.com');
|
||||
const result = await getUserByEmail('test@email.com');
|
||||
|
||||
expect(user).toBeDefined();
|
||||
expect(user?.email).toBe('test@email.com');
|
||||
expect(user?.name).toBe('Test User');
|
||||
expect(user?.role).toBe('user');
|
||||
expect(user?.externalId).toBeDefined(); // Default to true if not set
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value?.email).toBe('test@email.com');
|
||||
expect(result.value?.name).toBe('Test User');
|
||||
expect(result.value?.role).toBe('user');
|
||||
expect(result.value?.externalId).toBeDefined();
|
||||
});
|
||||
|
||||
test('cannot getUserByEmail with non-existing email', async () => {
|
||||
await expect(getUserByEmail('missing@email.com')).resolves.toBeNull();
|
||||
const result = await getUserByEmail('missing@email.com');
|
||||
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value).toBeNull();
|
||||
});
|
||||
|
||||
test('can update user', async () => {
|
||||
@@ -76,17 +85,21 @@ describe('UserService', () => {
|
||||
role: 'admin',
|
||||
};
|
||||
|
||||
const user = await getUserByEmail('test@email.com');
|
||||
const userResult = await getUserByEmail('test@email.com');
|
||||
expect(userResult.ok).toBe(true);
|
||||
if (!userResult.ok) return;
|
||||
const user = userResult.value;
|
||||
expect(user).toBeDefined();
|
||||
|
||||
const updatedUser = await updateUser(user!.id, dataToUpdate);
|
||||
const result = await updateUser(user!.id, dataToUpdate);
|
||||
|
||||
expect(updatedUser).toBeDefined();
|
||||
expect(updatedUser.id).toBe(user!.id);
|
||||
expect(updatedUser.name).toBe(dataToUpdate.name);
|
||||
expect(updatedUser.role).toBe(dataToUpdate.role);
|
||||
expect(updatedUser.email).toBe(user!.email);
|
||||
expect(updatedUser.externalId).toBeDefined(); // Default to true if not set
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value.id).toBe(user!.id);
|
||||
expect(result.value.name).toBe(dataToUpdate.name);
|
||||
expect(result.value.role).toBe(dataToUpdate.role);
|
||||
expect(result.value.email).toBe(user!.email);
|
||||
expect(result.value.externalId).toBeDefined();
|
||||
});
|
||||
|
||||
test('cannot update non-existing user', async () => {
|
||||
@@ -95,9 +108,11 @@ describe('UserService', () => {
|
||||
role: 'admin',
|
||||
};
|
||||
|
||||
await expect(updateUser('9999', dataToUpdate)).rejects.toThrow(
|
||||
`User with ID 9999 not found`
|
||||
);
|
||||
const result = await updateUser('9999', dataToUpdate);
|
||||
|
||||
expect(result.ok).toBe(false);
|
||||
if (result.ok) return;
|
||||
expect(result.error.message).toContain('9999');
|
||||
});
|
||||
|
||||
test('can sync admin user', async () => {
|
||||
@@ -131,12 +146,14 @@ describe('UserService', () => {
|
||||
},
|
||||
},
|
||||
} as SessionClaims;
|
||||
const syncedUser = await syncUser(sessionClaims);
|
||||
|
||||
expect(syncedUser).toBeDefined();
|
||||
expect(syncedUser.name).toBe('Updated Name');
|
||||
expect(syncedUser.email).toBe('test@email.com');
|
||||
expect(syncedUser.role).toBe('admin');
|
||||
const result = await syncUser(sessionClaims);
|
||||
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value.name).toBe('Updated Name');
|
||||
expect(result.value.email).toBe('test@email.com');
|
||||
expect(result.value.role).toBe('admin');
|
||||
});
|
||||
|
||||
test('can sync internal user', async () => {
|
||||
@@ -170,12 +187,14 @@ describe('UserService', () => {
|
||||
},
|
||||
},
|
||||
} as SessionClaims;
|
||||
const syncedUser = await syncUser(sessionClaims);
|
||||
|
||||
expect(syncedUser).toBeDefined();
|
||||
expect(syncedUser.name).toBe('Updated Name');
|
||||
expect(syncedUser.email).toBe('test@email.com');
|
||||
expect(syncedUser.role).toBe('internal');
|
||||
const result = await syncUser(sessionClaims);
|
||||
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value.name).toBe('Updated Name');
|
||||
expect(result.value.email).toBe('test@email.com');
|
||||
expect(result.value.role).toBe('internal');
|
||||
});
|
||||
|
||||
test('can sync user', async () => {
|
||||
@@ -202,12 +221,14 @@ describe('UserService', () => {
|
||||
},
|
||||
},
|
||||
} as SessionClaims;
|
||||
const syncedUser = await syncUser(sessionClaims);
|
||||
|
||||
expect(syncedUser).toBeDefined();
|
||||
expect(syncedUser.name).toBe('Updated Name');
|
||||
expect(syncedUser.email).toBe('test@email.com');
|
||||
expect(syncedUser.role).toBe('user');
|
||||
const result = await syncUser(sessionClaims);
|
||||
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value.name).toBe('Updated Name');
|
||||
expect(result.value.email).toBe('test@email.com');
|
||||
expect(result.value.role).toBe('user');
|
||||
});
|
||||
|
||||
test('can sync saving new user', async () => {
|
||||
@@ -234,11 +255,13 @@ describe('UserService', () => {
|
||||
},
|
||||
},
|
||||
} as SessionClaims;
|
||||
const syncedUser = await syncUser(sessionClaims);
|
||||
|
||||
expect(syncedUser).toBeDefined();
|
||||
expect(syncedUser.name).toBe('Updated Name');
|
||||
expect(syncedUser.email).toBe('new@email.com');
|
||||
expect(syncedUser.role).toBe('user');
|
||||
const result = await syncUser(sessionClaims);
|
||||
|
||||
expect(result.ok).toBe(true);
|
||||
if (!result.ok) return;
|
||||
expect(result.value.name).toBe('Updated Name');
|
||||
expect(result.value.email).toBe('new@email.com');
|
||||
expect(result.value.role).toBe('user');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user