near-protocol-rewards
Version:
A transparent, metric-based rewards system for NEAR projects
73 lines (72 loc) • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const github_rewards_1 = require("../../src/calculator/github-rewards");
const logger_1 = require("../../src/utils/logger");
const github_1 = require("../../src/validators/github");
describe("GitHubRewardsCalculator", () => {
let calculator;
let validator;
const logger = new logger_1.ConsoleLogger("error");
beforeEach(() => {
validator = new github_1.GitHubValidator({
logger,
minCommits: 10,
maxCommitsPerDay: 15,
minAuthors: 2,
minReviewPrRatio: 0.5,
});
calculator = new github_rewards_1.GitHubRewardsCalculator({
commits: 0.35,
pullRequests: 0.25,
reviews: 0.2,
issues: 0.2,
}, {
commits: 100,
pullRequests: 20,
reviews: 30,
issues: 30,
}, logger, validator);
});
describe("Reward Tiers", () => {
it("should calculate Diamond tier (90-100)", () => {
const metrics = {
commits: {
count: 100,
frequency: {
daily: [10, 15, 20, 25, 15, 10, 5],
weekly: 100,
monthly: 400,
},
authors: [
{ login: "user1", count: 50 },
{ login: "user2", count: 30 },
{ login: "user3", count: 20 },
],
},
pullRequests: {
open: 5,
merged: 20,
closed: 25,
authors: ["user1", "user2", "user3"],
},
reviews: {
count: 30,
authors: ["user1", "user2", "user3"],
},
issues: {
open: 10,
closed: 30,
participants: ["user1", "user2", "user3"],
},
metadata: {
collectionTimestamp: Date.now(),
source: "github",
projectId: "test-org/test-repo",
},
};
const result = calculator.calculateRewards(metrics, "month");
expect(result.score.total).toBeGreaterThanOrEqual(45);
expect(result.score.total).toBeLessThanOrEqual(50);
});
});
});