UNPKG

near-protocol-rewards

Version:

A transparent, metric-based rewards system for NEAR projects

137 lines (136 loc) 4.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const github_1 = require("../../src/collectors/github"); const logger_1 = require("../../src/utils/logger"); const rate_limiter_1 = require("../../src/utils/rate-limiter"); // Create a mock class that extends Octokit class MockOctokit { constructor() { this.rest = { repos: { listCommits: jest.fn(), get: jest.fn(), }, pulls: { list: jest.fn(), listReviews: jest.fn(), }, issues: { listForRepo: jest.fn(), }, rateLimit: { get: jest.fn(), }, }; this.request = jest.fn(); this.paginate = jest.fn(); } } // Mock the Octokit module jest.mock("@octokit/rest", () => { return { Octokit: jest.fn().mockImplementation(() => new MockOctokit()), }; }); describe("GitHubCollector", () => { let collector; let mockOctokit; const logger = new logger_1.ConsoleLogger("error"); beforeEach(() => { // Clear all mocks before each test jest.clearAllMocks(); // Create a new instance of mock Octokit mockOctokit = new MockOctokit(); // Setup default mock implementations mockOctokit.rest.repos.get.mockResolvedValue({ status: 200 }); mockOctokit.rest.rateLimit.get.mockResolvedValue({ data: { resources: { core: { limit: 5000, remaining: 4999, reset: Date.now() / 1000 + 3600, }, }, }, }); const config = { token: "test-token", repo: "test-org/test-repo", logger, rateLimiter: new rate_limiter_1.RateLimiter({ maxRequestsPerSecond: 10 }), }; collector = new github_1.GitHubCollector(config); collector.octokit = mockOctokit; }); describe("Metrics Collection", () => { it("should collect all metrics types", async () => { // Mock commits mockOctokit.paginate.mockResolvedValueOnce([ { sha: "abc", commit: { author: { name: "user1", date: new Date().toISOString(), }, }, author: { login: "user1" }, }, { sha: "def", commit: { author: { name: "user2", date: new Date().toISOString(), }, }, author: { login: "user2" }, }, ]); // Mock pull requests mockOctokit.paginate .mockResolvedValueOnce([ { number: 1, state: "open", user: { login: "user1" } }, ]) .mockResolvedValueOnce([ { number: 2, state: "closed", merged_at: new Date().toISOString(), user: { login: "user2" }, }, ]); // Mock reviews mockOctokit.paginate .mockResolvedValueOnce([ { number: 2, state: "closed", user: { login: "user2" } }, ]) .mockResolvedValueOnce([ { id: 1, user: { login: "user1" }, state: "APPROVED", }, ]); // Mock issues mockOctokit.paginate .mockResolvedValueOnce([ { number: 1, state: "open", user: { login: "user1" } }, ]) .mockResolvedValueOnce([ { number: 2, state: "closed", user: { login: "user2" }, assignees: [{ login: "user1" }], }, ]); const metrics = await collector.collectMetrics(); expect(metrics).toBeDefined(); expect(metrics.commits.count).toBeGreaterThan(0); expect(metrics.pullRequests.merged).toBeGreaterThan(0); expect(metrics.issues.closed).toBeGreaterThan(0); }); }); });