71 lines
2.4 KiB
TypeScript
71 lines
2.4 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { gamificationService } from './gamificationService';
|
|
|
|
describe('gamificationService', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
describe('getUserXP', () => {
|
|
it('should return user XP data', async () => {
|
|
const xp = await gamificationService.getUserXP('user-1');
|
|
|
|
expect(xp).toBeDefined();
|
|
expect(xp).toHaveProperty('current');
|
|
expect(xp).toHaveProperty('next');
|
|
expect(xp).toHaveProperty('level');
|
|
expect(xp).toHaveProperty('rank');
|
|
expect(xp).toHaveProperty('totalEarned');
|
|
});
|
|
});
|
|
|
|
describe('getAchievements', () => {
|
|
it('should return user achievements', async () => {
|
|
const achievements = await gamificationService.getAchievements('user-1');
|
|
|
|
expect(achievements).toBeDefined();
|
|
expect(Array.isArray(achievements)).toBe(true);
|
|
expect(achievements.length).toBeGreaterThan(0);
|
|
expect(achievements[0]).toHaveProperty('id');
|
|
expect(achievements[0]).toHaveProperty('name');
|
|
expect(achievements[0]).toHaveProperty('progress');
|
|
expect(achievements[0]).toHaveProperty('maxProgress');
|
|
});
|
|
});
|
|
|
|
describe('getLeaderboard', () => {
|
|
it('should return weekly leaderboard', async () => {
|
|
const leaderboard = await gamificationService.getLeaderboard('weekly');
|
|
|
|
expect(leaderboard).toBeDefined();
|
|
expect(Array.isArray(leaderboard)).toBe(true);
|
|
expect(leaderboard.length).toBeGreaterThan(0);
|
|
expect(leaderboard[0]).toHaveProperty('rank');
|
|
expect(leaderboard[0]).toHaveProperty('username');
|
|
expect(leaderboard[0]).toHaveProperty('xp');
|
|
});
|
|
|
|
it('should return monthly leaderboard', async () => {
|
|
const leaderboard = await gamificationService.getLeaderboard('monthly');
|
|
|
|
expect(leaderboard).toBeDefined();
|
|
expect(Array.isArray(leaderboard)).toBe(true);
|
|
});
|
|
|
|
it('should return all-time leaderboard', async () => {
|
|
const leaderboard = await gamificationService.getLeaderboard('all');
|
|
|
|
expect(leaderboard).toBeDefined();
|
|
expect(Array.isArray(leaderboard)).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('claimReward', () => {
|
|
it('should claim an achievement reward', async () => {
|
|
const result = await gamificationService.claimReward('achievement-1');
|
|
|
|
expect(result).toBeDefined();
|
|
expect(result.success).toBe(true);
|
|
});
|
|
});
|
|
});
|