- Same as #143 - Resolves https://github.com/stats-organization/github-stats-extended/pull/143#discussion_r3105155487 - Closes #141
300 lines
7.4 KiB
JavaScript
300 lines
7.4 KiB
JavaScript
// @ts-check
|
|
|
|
import { vi } from "vitest";
|
|
|
|
export const data_stats = {
|
|
data: {
|
|
user: {
|
|
name: "Anurag Hazra",
|
|
login: "anuraghazra",
|
|
repositoriesContributedTo: { totalCount: 51 },
|
|
commits: {
|
|
totalCommitContributions: 200,
|
|
},
|
|
reviews: {
|
|
totalPullRequestReviewContributions: 1234,
|
|
},
|
|
pullRequests: { totalCount: 4000 },
|
|
mergedPullRequests: { totalCount: 3200 },
|
|
openIssues: { totalCount: 300 },
|
|
closedIssues: { totalCount: 40 },
|
|
followers: { totalCount: 150 },
|
|
repositoryDiscussions: { totalCount: 222 },
|
|
repositoryDiscussionComments: {
|
|
totalCount: 111,
|
|
},
|
|
repositories: {
|
|
totalCount: 3,
|
|
nodes: [
|
|
{ name: "repo-keep-1", stargazers: { totalCount: 1500 } },
|
|
{ name: "repo-exclude-me", stargazers: { totalCount: 9999 } },
|
|
{ name: "repo-keep-2", stargazers: { totalCount: 2600 } },
|
|
],
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
endCursor: "cursor",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
export const happy_path_gist_data = {
|
|
data: {
|
|
viewer: {
|
|
gist: {
|
|
description:
|
|
"List of countries and territories in English and Spanish: name, continent, capital, dial code, country codes, TLD, and area in sq km. Lista de países y territorios en Inglés y Español: nombre, continente, capital, código de teléfono, códigos de país, dominio y área en km cuadrados. Updated 2023",
|
|
owner: {
|
|
login: "Yizack",
|
|
},
|
|
stargazerCount: 33,
|
|
forks: {
|
|
totalCount: 11,
|
|
},
|
|
files: [
|
|
{
|
|
name: "countries.json",
|
|
language: {
|
|
name: "JSON",
|
|
},
|
|
size: 85858,
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
export const data_user = {
|
|
data: {
|
|
user: {
|
|
repository: {
|
|
username: "anuraghazra",
|
|
name: "convoychat",
|
|
nameWithOwner: "anuraghazra/convoychat",
|
|
stargazers: {
|
|
totalCount: 38000,
|
|
},
|
|
description:
|
|
"Help us take over the world with a deeply customizable React, TypeScript and GraphQL chat app that has enough text to wrap across multiple lines in the repository card.",
|
|
primaryLanguage: {
|
|
color: "#2b7489",
|
|
id: "MDg6TGFuZ3VhZ2UyODc=",
|
|
name: "TypeScript",
|
|
},
|
|
forkCount: 100,
|
|
isTemplate: false,
|
|
isArchived: false,
|
|
},
|
|
},
|
|
organization: null,
|
|
},
|
|
};
|
|
|
|
export const data_langs = {
|
|
data: {
|
|
user: {
|
|
repositories: {
|
|
nodes: [
|
|
{
|
|
name: "repo-html",
|
|
languages: {
|
|
edges: [{ size: 180, node: { color: "#0f0", name: "HTML" } }],
|
|
},
|
|
},
|
|
{
|
|
name: "repo-javascript",
|
|
languages: {
|
|
edges: [
|
|
{ size: 120, node: { color: "#0ff", name: "JavaScript" } },
|
|
],
|
|
},
|
|
},
|
|
{
|
|
name: "repo-ts-1",
|
|
languages: {
|
|
edges: [
|
|
{ size: 45, node: { color: "#3178c6", name: "TypeScript" } },
|
|
],
|
|
},
|
|
},
|
|
{
|
|
name: "repo-ts-2",
|
|
languages: {
|
|
edges: [
|
|
{ size: 45, node: { color: "#3178c6", name: "TypeScript" } },
|
|
],
|
|
},
|
|
},
|
|
{
|
|
name: "repo-other-langs",
|
|
languages: {
|
|
edges: [
|
|
{ size: 20, node: { color: "#f00", name: "Java" } },
|
|
{ size: 10, node: { color: "#0f0", name: "Cobol" } },
|
|
{ size: 15, node: { color: "#00f", name: "Python" } },
|
|
],
|
|
},
|
|
},
|
|
{
|
|
name: "repo-hidden",
|
|
languages: {
|
|
edges: [{ size: 1000, node: { color: "#dea584", name: "Rust" } }],
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
export const wakaTimeData = {
|
|
data: {
|
|
categories: [
|
|
{
|
|
digital: "22:40",
|
|
hours: 22,
|
|
minutes: 40,
|
|
name: "Coding",
|
|
percent: 100,
|
|
text: "22 hrs 40 mins",
|
|
total_seconds: 81643.570077,
|
|
},
|
|
],
|
|
daily_average: 16095,
|
|
daily_average_including_other_language: 16329,
|
|
days_including_holidays: 7,
|
|
days_minus_holidays: 5,
|
|
editors: [
|
|
{
|
|
digital: "22:40",
|
|
hours: 22,
|
|
minutes: 40,
|
|
name: "VS Code",
|
|
percent: 100,
|
|
text: "22 hrs 40 mins",
|
|
total_seconds: 81643.570077,
|
|
},
|
|
],
|
|
holidays: 2,
|
|
human_readable_daily_average: "4 hrs 28 mins",
|
|
human_readable_daily_average_including_other_language: "4 hrs 32 mins",
|
|
human_readable_total: "22 hrs 21 mins",
|
|
human_readable_total_including_other_language: "22 hrs 40 mins",
|
|
id: "random hash",
|
|
is_already_updating: false,
|
|
is_coding_activity_visible: true,
|
|
is_including_today: false,
|
|
is_other_usage_visible: true,
|
|
is_stuck: false,
|
|
is_up_to_date: true,
|
|
languages: [
|
|
{
|
|
digital: "12:00",
|
|
hours: 12,
|
|
minutes: 0,
|
|
name: "TypeScript",
|
|
percent: 52,
|
|
text: "12 hrs",
|
|
total_seconds: 43200,
|
|
},
|
|
{
|
|
digital: "6:30",
|
|
hours: 6,
|
|
minutes: 30,
|
|
name: "JavaScript",
|
|
percent: 28,
|
|
text: "6 hrs 30 mins",
|
|
total_seconds: 23400,
|
|
},
|
|
{
|
|
digital: "3:00",
|
|
hours: 3,
|
|
minutes: 0,
|
|
name: "Other",
|
|
percent: 13,
|
|
text: "3 hrs",
|
|
total_seconds: 10800,
|
|
},
|
|
{
|
|
digital: "1:00",
|
|
hours: 1,
|
|
minutes: 0,
|
|
name: "YAML",
|
|
percent: 4,
|
|
text: "1 hr",
|
|
total_seconds: 3600,
|
|
},
|
|
{
|
|
digital: "0:30",
|
|
hours: 0,
|
|
minutes: 30,
|
|
name: "JSON",
|
|
percent: 3,
|
|
text: "30 mins",
|
|
total_seconds: 1800,
|
|
},
|
|
],
|
|
operating_systems: [
|
|
{
|
|
digital: "22:40",
|
|
hours: 22,
|
|
minutes: 40,
|
|
name: "Mac",
|
|
percent: 100,
|
|
text: "22 hrs 40 mins",
|
|
total_seconds: 81643.570077,
|
|
},
|
|
],
|
|
percent_calculated: 100,
|
|
range: "last_7_days",
|
|
status: "ok",
|
|
timeout: 15,
|
|
total_seconds: 80473.135716,
|
|
total_seconds_including_other_language: 81643.570077,
|
|
user_id: "random hash",
|
|
username: "anuraghazra",
|
|
writes_only: false,
|
|
},
|
|
};
|
|
|
|
/** @typedef {import('@stats-organization/github-readme-stats-core')} CoreModule */
|
|
|
|
/**
|
|
* Creates a mock module for @stats-organization/github-readme-stats-core.
|
|
* @returns {CoreModule} Mocked core module.
|
|
*/
|
|
export function mockCore() {
|
|
return {
|
|
// @ts-expect-error no need to mock themes at the moment
|
|
themes: {},
|
|
request: vi.fn(),
|
|
fetchWakatimeStats: vi.fn(),
|
|
retryer: vi.fn(),
|
|
dateDiff: vi.fn(),
|
|
api: vi.fn(),
|
|
gist: vi.fn(),
|
|
pin: vi.fn(),
|
|
topLangs: vi.fn(),
|
|
wakatime: vi.fn(),
|
|
getConfig: vi.fn().mockReturnValue({}),
|
|
renderError: ({ message }) => `render-error:${message}`,
|
|
clampValue: (value, min, max) => Math.min(Math.max(value, min), max),
|
|
logger: {
|
|
log: vi.fn(),
|
|
error: vi.fn(),
|
|
},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Normalizes SVG code for stable test comparisons.
|
|
* @param {string} svg SVG code to normalize.
|
|
* @returns {string} Normalized SVG code.
|
|
*/
|
|
export function normalizeSvg(svg) {
|
|
const document = new DOMParser().parseFromString(svg, "image/svg+xml");
|
|
return new XMLSerializer().serializeToString(document);
|
|
}
|