forked from mirrored/github-readme-stats
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dca6010ec0 |
+13
-1
@@ -90,6 +90,18 @@ Pour masquer des statistiques spécifiques, vous pouvez passer un paramètre de
|
|||||||

|

|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Ajouter le compte des contributions privées au compte des commits totaux
|
||||||
|
|
||||||
|
Vous pouvez ajouter le compte de toutes vos contributions privées au compte total des engagements en utilisant le paramètre de requête `?count_private=true`.
|
||||||
|
|
||||||
|
_Note: Si vous déployez vous-même ce projet, les contributions privées seront comptées par défaut ; sinon, vous devez choisir de partager les comptes de vos contributions privées._
|
||||||
|
|
||||||
|
> Options: `&count_private=true`
|
||||||
|
|
||||||
|
```md
|
||||||
|

|
||||||
|
```
|
||||||
|
|
||||||
### Afficher les icônes
|
### Afficher les icônes
|
||||||
|
|
||||||
Pour activer les icônes, vous pouvez passer `show_icons=true` dans le paramètre de requête, comme ceci :
|
Pour activer les icônes, vous pouvez passer `show_icons=true` dans le paramètre de requête, comme ceci :
|
||||||
@@ -148,7 +160,7 @@ Vous pouvez fournir plusieurs valeurs (suivie d'une virgule) dans l'option bg_co
|
|||||||
- `hide_rank` - Masquer le rang _(boolean)_
|
- `hide_rank` - Masquer le rang _(boolean)_
|
||||||
- `show_icons` - Afficher les icônes _(boolean)_
|
- `show_icons` - Afficher les icônes _(boolean)_
|
||||||
- `include_all_commits` - Compter le total de commits au lieu de ne compter que les commits de l'année en cours _(boolean)_
|
- `include_all_commits` - Compter le total de commits au lieu de ne compter que les commits de l'année en cours _(boolean)_
|
||||||
- `count_private` - Compter les contributions privées _(boolean)_
|
- `count_private` - Compter les commits privés _(boolean)_
|
||||||
- `line_height` - Fixer la hauteur de la ligne entre les textes _(number)_
|
- `line_height` - Fixer la hauteur de la ligne entre les textes _(number)_
|
||||||
|
|
||||||
#### Repo Card Exclusive Options:
|
#### Repo Card Exclusive Options:
|
||||||
|
|||||||
Generated
+15323
-305
File diff suppressed because it is too large
Load Diff
+2
-1
@@ -49,7 +49,8 @@
|
|||||||
"lint-staged": "^13.0.3",
|
"lint-staged": "^13.0.3",
|
||||||
"lodash.snakecase": "^4.1.1",
|
"lodash.snakecase": "^4.1.1",
|
||||||
"parse-diff": "^0.7.0",
|
"parse-diff": "^0.7.0",
|
||||||
"prettier": "^2.1.2"
|
"prettier": "^2.1.2",
|
||||||
|
"vercel": "^29.4.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.24.0",
|
"axios": "^0.24.0",
|
||||||
|
|||||||
@@ -120,6 +120,19 @@ You can pass a query parameter `&hide=` to hide any specific stats with comma-se
|
|||||||

|

|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Adding private contributions count to total commits count
|
||||||
|
|
||||||
|
You can add the count of all your private contributions to the total commits count by using the query parameter `&count_private=true`.
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
> If you are deploying this project yourself, the private contributions will be counted by default. If you are using the public Vercel instance, you need to choose to [share your private contributions](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-github-profile/managing-contribution-settings-on-your-profile/showing-your-private-contributions-and-achievements-on-your-profile).
|
||||||
|
|
||||||
|
> Options: `&count_private=true`
|
||||||
|
|
||||||
|
```md
|
||||||
|

|
||||||
|
```
|
||||||
|
|
||||||
### Showing icons
|
### Showing icons
|
||||||
|
|
||||||
To enable icons, you can pass `&show_icons=true` in the query param, like so:
|
To enable icons, you can pass `&show_icons=true` in the query param, like so:
|
||||||
@@ -270,7 +283,7 @@ You can provide multiple comma-separated values in the bg_color option to render
|
|||||||
- `rank_icon` - Shows alternative rank icon (i.e. `github` or `default`). Default: `default`.
|
- `rank_icon` - Shows alternative rank icon (i.e. `github` or `default`). Default: `default`.
|
||||||
- `show_icons` - _(boolean)_. Default: `false`.
|
- `show_icons` - _(boolean)_. Default: `false`.
|
||||||
- `include_all_commits` - Count total commits instead of just the current year commits _(boolean)_. Default: `false`.
|
- `include_all_commits` - Count total commits instead of just the current year commits _(boolean)_. Default: `false`.
|
||||||
- `count_private` - Count private contributions _(boolean)_. Default: `false`.
|
- `count_private` - Count private commits _(boolean)_. Default: `false`.
|
||||||
- `line_height` - Sets the line height between text _(number)_. Default: `25`.
|
- `line_height` - Sets the line height between text _(number)_. Default: `25`.
|
||||||
- `exclude_repo` - Exclude stars from specified repositories _(Comma-separated values)_. Default: `[] (blank array)`.
|
- `exclude_repo` - Exclude stars from specified repositories _(Comma-separated values)_. Default: `[] (blank array)`.
|
||||||
- `custom_title` - Sets a custom title for the card. Default: `<username> GitHub Stats`.
|
- `custom_title` - Sets a custom title for the card. Default: `<username> GitHub Stats`.
|
||||||
|
|||||||
+84
-51
@@ -1,72 +1,105 @@
|
|||||||
function expsf(x, lambda = 1) {
|
/**
|
||||||
return 2 ** (-lambda * x);
|
* Calculates the probability of x taking on x or a value less than x in a normal distribution
|
||||||
}
|
* with mean and standard deviation.
|
||||||
|
*
|
||||||
|
* @see https://stackoverflow.com/a/5263759/10629172
|
||||||
|
*
|
||||||
|
* @param {string} mean The mean of the normal distribution.
|
||||||
|
* @param {number} sigma The standard deviation of the normal distribution.
|
||||||
|
* @param {number} to The value to calculate the probability for.
|
||||||
|
* @returns {number} Probability.
|
||||||
|
*/
|
||||||
|
const normalcdf = (mean, sigma, to) => {
|
||||||
|
var z = (to - mean) / Math.sqrt(2 * sigma * sigma);
|
||||||
|
var t = 1 / (1 + 0.3275911 * Math.abs(z));
|
||||||
|
var a1 = 0.254829592;
|
||||||
|
var a2 = -0.284496736;
|
||||||
|
var a3 = 1.421413741;
|
||||||
|
var a4 = -1.453152027;
|
||||||
|
var a5 = 1.061405429;
|
||||||
|
var erf =
|
||||||
|
1 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(-z * z);
|
||||||
|
var sign = 1;
|
||||||
|
if (z < 0) {
|
||||||
|
sign = -1;
|
||||||
|
}
|
||||||
|
return (1 / 2) * (1 + sign * erf);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates the users rank.
|
* Calculates the users rank.
|
||||||
*
|
*
|
||||||
* @param {object} params Parameters on which the user's rank depends.
|
* @param {object} params Parameters on which the user's rank depends.
|
||||||
* @param {boolean} params.all_commits Whether `include_all_commits` was used.
|
* @param {number} params.totalRepos Total number of repos.
|
||||||
* @param {number} params.commits Number of commits.
|
* @param {number} params.totalCommits Total number of commits.
|
||||||
|
* @param {number} params.contributions The number of contributions.
|
||||||
|
* @param {number} params.followers The number of followers.
|
||||||
* @param {number} params.prs The number of pull requests.
|
* @param {number} params.prs The number of pull requests.
|
||||||
* @param {number} params.issues The number of issues.
|
* @param {number} params.issues The number of issues.
|
||||||
* @param {number} params.repos Total number of repos.
|
* @param {number} params.stargazers The number of stars.
|
||||||
* @param {number} params.stars The number of stars.
|
|
||||||
* @param {number} params.followers The number of followers.
|
|
||||||
* @returns {{level: string, score: number}}} The users rank.
|
* @returns {{level: string, score: number}}} The users rank.
|
||||||
*/
|
*/
|
||||||
function calculateRank({
|
const calculateRank = ({
|
||||||
all_commits,
|
totalRepos,
|
||||||
commits,
|
totalCommits,
|
||||||
|
contributions,
|
||||||
|
followers,
|
||||||
prs,
|
prs,
|
||||||
issues,
|
issues,
|
||||||
repos, // unused
|
stargazers,
|
||||||
stars,
|
}) => {
|
||||||
followers,
|
const COMMITS_OFFSET = 1.65;
|
||||||
}) {
|
const CONTRIBS_OFFSET = 1.65;
|
||||||
const COMMITS_MEAN = all_commits ? 1000 : 250,
|
const ISSUES_OFFSET = 1;
|
||||||
COMMITS_WEIGHT = 2;
|
const STARS_OFFSET = 0.75;
|
||||||
const PRS_MEAN = 50,
|
const PRS_OFFSET = 0.5;
|
||||||
PRS_WEIGHT = 3;
|
const FOLLOWERS_OFFSET = 0.45;
|
||||||
const ISSUES_MEAN = 25,
|
const REPO_OFFSET = 1;
|
||||||
ISSUES_WEIGHT = 1;
|
|
||||||
const STARS_MEAN = 250,
|
|
||||||
STARS_WEIGHT = 4;
|
|
||||||
const FOLLOWERS_MEAN = 25,
|
|
||||||
FOLLOWERS_WEIGHT = 1;
|
|
||||||
|
|
||||||
const TOTAL_WEIGHT =
|
const ALL_OFFSETS =
|
||||||
COMMITS_WEIGHT +
|
CONTRIBS_OFFSET +
|
||||||
PRS_WEIGHT +
|
ISSUES_OFFSET +
|
||||||
ISSUES_WEIGHT +
|
STARS_OFFSET +
|
||||||
STARS_WEIGHT +
|
PRS_OFFSET +
|
||||||
FOLLOWERS_WEIGHT;
|
FOLLOWERS_OFFSET +
|
||||||
|
REPO_OFFSET;
|
||||||
|
|
||||||
const rank =
|
const RANK_S_VALUE = 1;
|
||||||
(COMMITS_WEIGHT * expsf(commits, 1 / COMMITS_MEAN) +
|
const RANK_DOUBLE_A_VALUE = 25;
|
||||||
PRS_WEIGHT * expsf(prs, 1 / PRS_MEAN) +
|
const RANK_A2_VALUE = 45;
|
||||||
ISSUES_WEIGHT * expsf(issues, 1 / ISSUES_MEAN) +
|
const RANK_A3_VALUE = 60;
|
||||||
STARS_WEIGHT * expsf(stars, 1 / STARS_MEAN) +
|
const RANK_B_VALUE = 100;
|
||||||
FOLLOWERS_WEIGHT * expsf(followers, 1 / FOLLOWERS_MEAN)) /
|
|
||||||
TOTAL_WEIGHT;
|
|
||||||
|
|
||||||
const RANK_S_PLUS = 0.025;
|
const TOTAL_VALUES =
|
||||||
const RANK_S = 0.1;
|
RANK_S_VALUE +
|
||||||
const RANK_A_PLUS = 0.25;
|
RANK_DOUBLE_A_VALUE +
|
||||||
const RANK_A = 0.5;
|
RANK_A2_VALUE +
|
||||||
const RANK_B_PLUS = 0.75;
|
RANK_A3_VALUE +
|
||||||
|
RANK_B_VALUE;
|
||||||
|
|
||||||
|
// prettier-ignore
|
||||||
|
const score = (
|
||||||
|
totalCommits * COMMITS_OFFSET +
|
||||||
|
contributions * CONTRIBS_OFFSET +
|
||||||
|
issues * ISSUES_OFFSET +
|
||||||
|
stargazers * STARS_OFFSET +
|
||||||
|
prs * PRS_OFFSET +
|
||||||
|
followers * FOLLOWERS_OFFSET +
|
||||||
|
totalRepos * REPO_OFFSET
|
||||||
|
) / 100;
|
||||||
|
|
||||||
|
const normalizedScore = normalcdf(score, TOTAL_VALUES, ALL_OFFSETS) * 100;
|
||||||
|
|
||||||
const level = (() => {
|
const level = (() => {
|
||||||
if (rank <= RANK_S_PLUS) return "S+";
|
if (normalizedScore < RANK_S_VALUE) return "S+";
|
||||||
if (rank <= RANK_S) return "S";
|
if (normalizedScore < RANK_DOUBLE_A_VALUE) return "S";
|
||||||
if (rank <= RANK_A_PLUS) return "A+";
|
if (normalizedScore < RANK_A2_VALUE) return "A++";
|
||||||
if (rank <= RANK_A) return "A";
|
if (normalizedScore < RANK_A3_VALUE) return "A+";
|
||||||
if (rank <= RANK_B_PLUS) return "B+";
|
return "B+";
|
||||||
return "B";
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
return { level, score: rank * 100 };
|
return { level, score: normalizedScore };
|
||||||
}
|
};
|
||||||
|
|
||||||
export { calculateRank };
|
export { calculateRank };
|
||||||
export default calculateRank;
|
export default calculateRank;
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ const fetchStats = async (
|
|||||||
totalIssues: 0,
|
totalIssues: 0,
|
||||||
totalStars: 0,
|
totalStars: 0,
|
||||||
contributedTo: 0,
|
contributedTo: 0,
|
||||||
rank: { level: "B", score: 0 },
|
rank: { level: "C", score: 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
let res = await statsFetcher(username);
|
let res = await statsFetcher(username);
|
||||||
@@ -220,44 +220,53 @@ const fetchStats = async (
|
|||||||
|
|
||||||
const user = res.data.data.user;
|
const user = res.data.data.user;
|
||||||
|
|
||||||
stats.name = user.name || user.login;
|
// populate repoToHide map for quick lookup
|
||||||
|
// while filtering out
|
||||||
// if include_all_commits, fetch all commits using the REST API.
|
let repoToHide = {};
|
||||||
if (include_all_commits) {
|
if (exclude_repo) {
|
||||||
stats.totalCommits = await totalCommitsFetcher(username);
|
exclude_repo.forEach((repoName) => {
|
||||||
} else {
|
repoToHide[repoName] = true;
|
||||||
stats.totalCommits = user.contributionsCollection.totalCommitContributions;
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// if count_private, add private contributions to totalCommits.
|
stats.name = user.name || user.login;
|
||||||
|
stats.totalIssues = user.openIssues.totalCount + user.closedIssues.totalCount;
|
||||||
|
|
||||||
|
// normal commits
|
||||||
|
stats.totalCommits = user.contributionsCollection.totalCommitContributions;
|
||||||
|
|
||||||
|
// if include_all_commits then just get that,
|
||||||
|
// since totalCommitsFetcher already sends totalCommits no need to +=
|
||||||
|
if (include_all_commits) {
|
||||||
|
stats.totalCommits = await totalCommitsFetcher(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if count_private then add private commits to totalCommits so far.
|
||||||
if (count_private) {
|
if (count_private) {
|
||||||
stats.totalCommits +=
|
stats.totalCommits +=
|
||||||
user.contributionsCollection.restrictedContributionsCount;
|
user.contributionsCollection.restrictedContributionsCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
stats.totalPRs = user.pullRequests.totalCount;
|
stats.totalPRs = user.pullRequests.totalCount;
|
||||||
stats.totalIssues = user.openIssues.totalCount + user.closedIssues.totalCount;
|
|
||||||
stats.contributedTo = user.repositoriesContributedTo.totalCount;
|
stats.contributedTo = user.repositoriesContributedTo.totalCount;
|
||||||
|
|
||||||
// Retrieve stars while filtering out repositories to be hidden.
|
// Retrieve stars while filtering out repositories to be hidden
|
||||||
let repoToHide = new Set(exclude_repo);
|
|
||||||
|
|
||||||
stats.totalStars = user.repositories.nodes
|
stats.totalStars = user.repositories.nodes
|
||||||
.filter((data) => {
|
.filter((data) => {
|
||||||
return !repoToHide.has(data.name);
|
return !repoToHide[data.name];
|
||||||
})
|
})
|
||||||
.reduce((prev, curr) => {
|
.reduce((prev, curr) => {
|
||||||
return prev + curr.stargazers.totalCount;
|
return prev + curr.stargazers.totalCount;
|
||||||
}, 0);
|
}, 0);
|
||||||
|
|
||||||
stats.rank = calculateRank({
|
stats.rank = calculateRank({
|
||||||
all_commits: include_all_commits,
|
totalCommits: stats.totalCommits,
|
||||||
commits: stats.totalCommits,
|
totalRepos: user.repositories.totalCount,
|
||||||
|
followers: user.followers.totalCount,
|
||||||
|
contributions: stats.contributedTo,
|
||||||
|
stargazers: stats.totalStars,
|
||||||
prs: stats.totalPRs,
|
prs: stats.totalPRs,
|
||||||
issues: stats.totalIssues,
|
issues: stats.totalIssues,
|
||||||
repos: user.repositories.totalCount,
|
|
||||||
stars: stats.totalStars,
|
|
||||||
followers: user.followers.totalCount,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return stats;
|
return stats;
|
||||||
|
|||||||
+38
-7
@@ -12,18 +12,17 @@ const stats = {
|
|||||||
totalCommits: 200,
|
totalCommits: 200,
|
||||||
totalIssues: 300,
|
totalIssues: 300,
|
||||||
totalPRs: 400,
|
totalPRs: 400,
|
||||||
contributedTo: 50,
|
contributedTo: 500,
|
||||||
rank: null,
|
rank: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
stats.rank = calculateRank({
|
stats.rank = calculateRank({
|
||||||
all_commits: false,
|
totalCommits: stats.totalCommits,
|
||||||
commits: stats.totalCommits,
|
totalRepos: 1,
|
||||||
|
followers: 0,
|
||||||
|
contributions: stats.contributedTo,
|
||||||
|
stargazers: stats.totalStars,
|
||||||
prs: stats.totalPRs,
|
prs: stats.totalPRs,
|
||||||
issues: stats.totalIssues,
|
issues: stats.totalIssues,
|
||||||
repos: 1,
|
|
||||||
stars: stats.totalStars,
|
|
||||||
followers: 0,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const data_stats = {
|
const data_stats = {
|
||||||
@@ -230,6 +229,38 @@ describe("Test /api/", () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should add private contributions", async () => {
|
||||||
|
const { req, res } = faker(
|
||||||
|
{
|
||||||
|
username: "anuraghazra",
|
||||||
|
count_private: true,
|
||||||
|
},
|
||||||
|
data_stats,
|
||||||
|
);
|
||||||
|
|
||||||
|
await api(req, res);
|
||||||
|
|
||||||
|
expect(res.setHeader).toBeCalledWith("Content-Type", "image/svg+xml");
|
||||||
|
expect(res.send).toBeCalledWith(
|
||||||
|
renderStatsCard(
|
||||||
|
{
|
||||||
|
...stats,
|
||||||
|
totalCommits: stats.totalCommits + 100,
|
||||||
|
rank: calculateRank({
|
||||||
|
totalCommits: stats.totalCommits + 100,
|
||||||
|
totalRepos: 1,
|
||||||
|
followers: 0,
|
||||||
|
contributions: stats.contributedTo,
|
||||||
|
stargazers: stats.totalStars,
|
||||||
|
prs: stats.totalPRs,
|
||||||
|
issues: stats.totalIssues,
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it("should allow changing ring_color", async () => {
|
it("should allow changing ring_color", async () => {
|
||||||
const { req, res } = faker(
|
const { req, res } = faker(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,87 +2,17 @@ import "@testing-library/jest-dom";
|
|||||||
import { calculateRank } from "../src/calculateRank.js";
|
import { calculateRank } from "../src/calculateRank.js";
|
||||||
|
|
||||||
describe("Test calculateRank", () => {
|
describe("Test calculateRank", () => {
|
||||||
it("new user gets B rank", () => {
|
it("should calculate rank correctly", () => {
|
||||||
expect(
|
expect(
|
||||||
calculateRank({
|
calculateRank({
|
||||||
all_commits: false,
|
totalCommits: 100,
|
||||||
commits: 0,
|
totalRepos: 5,
|
||||||
prs: 0,
|
|
||||||
issues: 0,
|
|
||||||
repos: 0,
|
|
||||||
stars: 0,
|
|
||||||
followers: 0,
|
|
||||||
}),
|
|
||||||
).toStrictEqual({ level: "B", score: 100 });
|
|
||||||
});
|
|
||||||
|
|
||||||
it("average user gets A rank", () => {
|
|
||||||
expect(
|
|
||||||
calculateRank({
|
|
||||||
all_commits: false,
|
|
||||||
commits: 250,
|
|
||||||
prs: 50,
|
|
||||||
issues: 25,
|
|
||||||
repos: 0,
|
|
||||||
stars: 250,
|
|
||||||
followers: 25,
|
|
||||||
}),
|
|
||||||
).toStrictEqual({ level: "A", score: 50 });
|
|
||||||
});
|
|
||||||
|
|
||||||
it("average user gets A rank (include_all_commits)", () => {
|
|
||||||
expect(
|
|
||||||
calculateRank({
|
|
||||||
all_commits: true,
|
|
||||||
commits: 1000,
|
|
||||||
prs: 50,
|
|
||||||
issues: 25,
|
|
||||||
repos: 0,
|
|
||||||
stars: 250,
|
|
||||||
followers: 25,
|
|
||||||
}),
|
|
||||||
).toStrictEqual({ level: "A", score: 50 });
|
|
||||||
});
|
|
||||||
|
|
||||||
it("more than average user gets A+ rank", () => {
|
|
||||||
expect(
|
|
||||||
calculateRank({
|
|
||||||
all_commits: false,
|
|
||||||
commits: 500,
|
|
||||||
prs: 100,
|
|
||||||
issues: 50,
|
|
||||||
repos: 0,
|
|
||||||
stars: 500,
|
|
||||||
followers: 50,
|
|
||||||
}),
|
|
||||||
).toStrictEqual({ level: "A+", score: 25 });
|
|
||||||
});
|
|
||||||
|
|
||||||
it("expert user gets S rank", () => {
|
|
||||||
expect(
|
|
||||||
calculateRank({
|
|
||||||
all_commits: false,
|
|
||||||
commits: 1000,
|
|
||||||
prs: 200,
|
|
||||||
issues: 100,
|
|
||||||
repos: 0,
|
|
||||||
stars: 1000,
|
|
||||||
followers: 100,
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 400,
|
||||||
|
prs: 300,
|
||||||
|
issues: 200,
|
||||||
}),
|
}),
|
||||||
).toStrictEqual({ level: "S", score: 6.25 });
|
).toStrictEqual({ level: "A+", score: 49.25629684876535 });
|
||||||
});
|
|
||||||
|
|
||||||
it("ezyang gets S+ rank", () => {
|
|
||||||
expect(
|
|
||||||
calculateRank({
|
|
||||||
all_commits: false,
|
|
||||||
commits: 1000,
|
|
||||||
prs: 4000,
|
|
||||||
issues: 2000,
|
|
||||||
repos: 0,
|
|
||||||
stars: 5000,
|
|
||||||
followers: 2000,
|
|
||||||
}),
|
|
||||||
).toStrictEqual({ level: "S+", score: 1.1363983154296875 });
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,7 +20,10 @@ const STATS_DATA = {
|
|||||||
totalIssues: 1,
|
totalIssues: 1,
|
||||||
totalStars: 1,
|
totalStars: 1,
|
||||||
contributedTo: 1,
|
contributedTo: 1,
|
||||||
rank: { level: "B", score: 98.50610674501908 },
|
rank: {
|
||||||
|
level: "A+",
|
||||||
|
score: 50.88831151384285,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const LANGS_DATA = {
|
const LANGS_DATA = {
|
||||||
|
|||||||
+67
-44
@@ -102,13 +102,13 @@ describe("Test fetchStats", () => {
|
|||||||
it("should fetch correct stats", async () => {
|
it("should fetch correct stats", async () => {
|
||||||
let stats = await fetchStats("anuraghazra");
|
let stats = await fetchStats("anuraghazra");
|
||||||
const rank = calculateRank({
|
const rank = calculateRank({
|
||||||
all_commits: false,
|
totalCommits: 100,
|
||||||
commits: 100,
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 300,
|
||||||
prs: 300,
|
prs: 300,
|
||||||
issues: 200,
|
issues: 200,
|
||||||
repos: 5,
|
|
||||||
stars: 300,
|
|
||||||
followers: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(stats).toStrictEqual({
|
expect(stats).toStrictEqual({
|
||||||
@@ -132,13 +132,13 @@ describe("Test fetchStats", () => {
|
|||||||
|
|
||||||
let stats = await fetchStats("anuraghazra");
|
let stats = await fetchStats("anuraghazra");
|
||||||
const rank = calculateRank({
|
const rank = calculateRank({
|
||||||
all_commits: false,
|
totalCommits: 100,
|
||||||
commits: 100,
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 300,
|
||||||
prs: 300,
|
prs: 300,
|
||||||
issues: 200,
|
issues: 200,
|
||||||
repos: 5,
|
|
||||||
stars: 300,
|
|
||||||
followers: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(stats).toStrictEqual({
|
expect(stats).toStrictEqual({
|
||||||
@@ -161,26 +161,49 @@ describe("Test fetchStats", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should fetch total commits", async () => {
|
it("should fetch and add private contributions", async () => {
|
||||||
mock
|
let stats = await fetchStats("anuraghazra", true);
|
||||||
.onGet("https://api.github.com/search/commits?q=author:anuraghazra")
|
|
||||||
.reply(200, { total_count: 1000 });
|
|
||||||
|
|
||||||
let stats = await fetchStats("anuraghazra", false, true);
|
|
||||||
const rank = calculateRank({
|
const rank = calculateRank({
|
||||||
all_commits: true,
|
totalCommits: 150,
|
||||||
commits: 1000,
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 300,
|
||||||
prs: 300,
|
prs: 300,
|
||||||
issues: 200,
|
issues: 200,
|
||||||
repos: 5,
|
|
||||||
stars: 300,
|
|
||||||
followers: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(stats).toStrictEqual({
|
expect(stats).toStrictEqual({
|
||||||
contributedTo: 61,
|
contributedTo: 61,
|
||||||
name: "Anurag Hazra",
|
name: "Anurag Hazra",
|
||||||
totalCommits: 1000,
|
totalCommits: 150,
|
||||||
|
totalIssues: 200,
|
||||||
|
totalPRs: 300,
|
||||||
|
totalStars: 300,
|
||||||
|
rank,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should fetch total commits", async () => {
|
||||||
|
mock
|
||||||
|
.onGet("https://api.github.com/search/commits?q=author:anuraghazra")
|
||||||
|
.reply(200, { total_count: 1000 });
|
||||||
|
|
||||||
|
let stats = await fetchStats("anuraghazra", true, true);
|
||||||
|
const rank = calculateRank({
|
||||||
|
totalCommits: 1050,
|
||||||
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 300,
|
||||||
|
prs: 300,
|
||||||
|
issues: 200,
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(stats).toStrictEqual({
|
||||||
|
contributedTo: 61,
|
||||||
|
name: "Anurag Hazra",
|
||||||
|
totalCommits: 1050,
|
||||||
totalIssues: 200,
|
totalIssues: 200,
|
||||||
totalPRs: 300,
|
totalPRs: 300,
|
||||||
totalStars: 300,
|
totalStars: 300,
|
||||||
@@ -193,21 +216,21 @@ describe("Test fetchStats", () => {
|
|||||||
.onGet("https://api.github.com/search/commits?q=author:anuraghazra")
|
.onGet("https://api.github.com/search/commits?q=author:anuraghazra")
|
||||||
.reply(200, { total_count: 1000 });
|
.reply(200, { total_count: 1000 });
|
||||||
|
|
||||||
let stats = await fetchStats("anuraghazra", false, true, ["test-repo-1"]);
|
let stats = await fetchStats("anuraghazra", true, true, ["test-repo-1"]);
|
||||||
const rank = calculateRank({
|
const rank = calculateRank({
|
||||||
all_commits: true,
|
totalCommits: 1050,
|
||||||
commits: 1000,
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 200,
|
||||||
prs: 300,
|
prs: 300,
|
||||||
issues: 200,
|
issues: 200,
|
||||||
repos: 5,
|
|
||||||
stars: 200,
|
|
||||||
followers: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(stats).toStrictEqual({
|
expect(stats).toStrictEqual({
|
||||||
contributedTo: 61,
|
contributedTo: 61,
|
||||||
name: "Anurag Hazra",
|
name: "Anurag Hazra",
|
||||||
totalCommits: 1000,
|
totalCommits: 1050,
|
||||||
totalIssues: 200,
|
totalIssues: 200,
|
||||||
totalPRs: 300,
|
totalPRs: 300,
|
||||||
totalStars: 200,
|
totalStars: 200,
|
||||||
@@ -220,13 +243,13 @@ describe("Test fetchStats", () => {
|
|||||||
|
|
||||||
let stats = await fetchStats("anuraghazra");
|
let stats = await fetchStats("anuraghazra");
|
||||||
const rank = calculateRank({
|
const rank = calculateRank({
|
||||||
all_commits: false,
|
totalCommits: 100,
|
||||||
commits: 100,
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 400,
|
||||||
prs: 300,
|
prs: 300,
|
||||||
issues: 200,
|
issues: 200,
|
||||||
repos: 5,
|
|
||||||
stars: 400,
|
|
||||||
followers: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(stats).toStrictEqual({
|
expect(stats).toStrictEqual({
|
||||||
@@ -245,13 +268,13 @@ describe("Test fetchStats", () => {
|
|||||||
|
|
||||||
let stats = await fetchStats("anuraghazra");
|
let stats = await fetchStats("anuraghazra");
|
||||||
const rank = calculateRank({
|
const rank = calculateRank({
|
||||||
all_commits: false,
|
totalCommits: 100,
|
||||||
commits: 100,
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 300,
|
||||||
prs: 300,
|
prs: 300,
|
||||||
issues: 200,
|
issues: 200,
|
||||||
repos: 5,
|
|
||||||
stars: 300,
|
|
||||||
followers: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(stats).toStrictEqual({
|
expect(stats).toStrictEqual({
|
||||||
@@ -270,13 +293,13 @@ describe("Test fetchStats", () => {
|
|||||||
|
|
||||||
let stats = await fetchStats("anuraghazra");
|
let stats = await fetchStats("anuraghazra");
|
||||||
const rank = calculateRank({
|
const rank = calculateRank({
|
||||||
all_commits: false,
|
totalCommits: 100,
|
||||||
commits: 100,
|
totalRepos: 5,
|
||||||
|
followers: 100,
|
||||||
|
contributions: 61,
|
||||||
|
stargazers: 300,
|
||||||
prs: 300,
|
prs: 300,
|
||||||
issues: 200,
|
issues: 200,
|
||||||
repos: 5,
|
|
||||||
stars: 300,
|
|
||||||
followers: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(stats).toStrictEqual({
|
expect(stats).toStrictEqual({
|
||||||
|
|||||||
Reference in New Issue
Block a user