/ .github / scripts / activity-analyzer.test.js
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  });