activity-analyzer.test.js
1 const assert = require('assert'); 2 const { test, suite } = require('node:test'); 3 const { ActivityAnalyzer } = require('./activity-analyzer.js'); 4 5 suite('ActivityAnalyzer', () => { 6 let analyzer; 7 8 test.beforeEach(() => { 9 // Mock GITHUB_TOKEN for testing 10 process.env.GITHUB_TOKEN = 'mock_token'; 11 analyzer = new ActivityAnalyzer(); 12 }); 13 14 test.afterEach(() => { 15 delete process.env.GITHUB_TOKEN; 16 }); 17 18 test('should calculate professional metrics correctly', async () => { 19 // Mock client.request to return dummy data 20 analyzer.client.request = async (endpoint) => { 21 console.log(`Mocking request for: ${endpoint}`); 22 if (endpoint.includes('/users/') && !endpoint.includes('/repos')) { 23 return { followers: 10, created_at: '2020-01-01T00:00:00Z' }; 24 } else if (endpoint.includes('/repos')) { 25 return [ 26 { stargazers_count: 50, forks_count: 5, language: 'JavaScript', updated_at: '2025-07-20T00:00:00Z', size: 1000, private: false, has_issues: true, has_wiki: true, has_pages: true, fork: false, watchers_count: 10 }, 27 { stargazers_count: 20, forks_count: 2, language: 'Python', updated_at: '2025-07-25T00:00:00Z', size: 2000, private: false, has_issues: true, has_wiki: true, has_pages: true, fork: false, watchers_count: 5 }, 28 { stargazers_count: 10, forks_count: 1, language: 'TypeScript', updated_at: '2025-07-28T00:00:00Z', size: 500, private: false, has_issues: true, has_wiki: true, has_pages: true, fork: false, watchers_count: 2 } 29 ]; 30 } 31 return {}; 32 }; 33 34 const metrics = await analyzer.calculateProfessionalMetrics(); 35 36 assert.strictEqual(typeof metrics.scores.overall_professional_score, 'number'); 37 assert(metrics.scores.overall_professional_score >= 0 && metrics.scores.overall_professional_score <= 100); 38 assert.strictEqual(metrics.raw_metrics.total_repositories, 3); 39 assert.strictEqual(metrics.raw_metrics.total_stars, 80); 40 }); 41 42 test('should analyze skill proficiency correctly', async () => { 43 // Mock client.request to return dummy data 44 analyzer.client.request = async (endpoint) => { 45 if (endpoint.includes('/repos')) { 46 return [ 47 { stargazers_count: 100, forks_count: 10, language: 'Python', size: 5000, updated_at: '2025-07-20T00:00:00Z' }, 48 { stargazers_count: 50, forks_count: 5, language: 'JavaScript', size: 2000, updated_at: '2025-07-25T00:00:00Z' } 49 ]; 50 } 51 return {}; 52 }; 53 54 const skillAnalysis = await analyzer.analyzeSkillProficiency(); 55 56 assert.strictEqual(typeof skillAnalysis.skill_proficiency.Python.proficiency_score, 'number'); 57 assert.strictEqual(skillAnalysis.skill_proficiency.Python.proficiency_level, 'Advanced'); 58 assert.strictEqual(skillAnalysis.summary.total_languages, 2); 59 }); 60 });