Compare commits

..
Author SHA1 Message Date
Alexandr 9591a81f1b tests(wakatime card): add percent display format test 2023-11-25 20:55:32 +02:00
30 changed files with 1586 additions and 680 deletions
+2 -2
View File
@@ -19,7 +19,7 @@ updates:
interval: weekly
open-pull-requests-limit: 10
commit-message:
prefix: "ci(deps)"
prefix-development: "ci(deps-dev)"
prefix: "build(deps)"
prefix-development: "build(deps-dev)"
reviewers:
- "qwerty541"
+44 -86
View File
@@ -1,95 +1,53 @@
themes:
- changed-files:
- any-glob-to-any-file:
- themes/index.js
doc-translation:
- changed-files:
- any-glob-to-any-file:
- docs/*
themes: themes/index.js
doc-translation: docs/*
card-i18n:
- changed-files:
- any-glob-to-any-file:
- src/translations.js
- src/common/I18n.js
- src/translations.js
- src/common/I18n.js
documentation:
- changed-files:
- any-glob-to-any-file:
- readme.md
- CONTRIBUTING.md
- CODE_OF_CONDUCT.md
- SECURITY.md
- readme.md
- CONTRIBUTING.md
- CODE_OF_CONDUCT.md
- SECURITY.md
dependencies:
- changed-files:
- any-glob-to-any-file:
- package.json
- package-lock.json
- package.json
- package-lock.json
lang-card:
- changed-files:
- any-glob-to-any-file:
- api/top-langs.js
- src/cards/top-languages-card.js
- src/fetchers/top-languages-fetcher.js
- tests/fetchTopLanguages.test.js
- tests/renderTopLanguagesCard.test.js
- tests/top-langs.test.js
- api/top-langs.js
- src/cards/top-languages-card.js
- src/fetchers/top-languages-fetcher.js
- tests/fetchTopLanguages.test.js
- tests/renderTopLanguagesCard.test.js
- tests/top-langs.test.js
repo-card:
- changed-files:
- any-glob-to-any-file:
- api/pin.js
- src/cards/repo-card.js
- src/fetchers/repo-fetcher.js
- tests/fetchRepo.test.js
- tests/renderRepoCard.test.js
- tests/pin.test.js
- api/pin.js
- src/cards/repo-card.js
- src/fetchers/repo-fetcher.js
- tests/fetchRepo.test.js
- tests/renderRepoCard.test.js
- tests/pin.test.js
stats-card:
- changed-files:
- any-glob-to-any-file:
- api/index.js
- src/cards/stats-card.js
- src/fetchers/stats-fetcher.js
- tests/fetchStats.test.js
- tests/renderStatsCard.test.js
- tests/api.test.js
- api/index.js
- src/cards/stats-card.js
- src/fetchers/stats-fetcher.js
- tests/fetchStats.test.js
- tests/renderStatsCard.test.js
- tests/api.test.js
wakatime-card:
- changed-files:
- any-glob-to-any-file:
- api/wakatime.js
- src/cards/wakatime-card.js
- src/fetchers/wakatime-fetcher.js
- tests/fetchWakatime.test.js
- tests/renderWakatimeCard.test.js
- tests/wakatime.test.js
- api/wakatime.js
- src/cards/wakatime-card.js
- src/fetchers/wakatime-fetcher.js
- tests/fetchWakatime.test.js
- tests/renderWakatimeCard.test.js
- tests/wakatime.test.js
gist-card:
- changed-files:
- any-glob-to-any-file:
- api/gist.js
- src/cards/gist-card.js
- src/fetchers/gist-fetcher.js
- tests/fetchGist.test.js
- tests/renderGistCard.test.js
- tests/gist.test.js
ranks:
- changed-files:
- any-glob-to-any-file:
- src/calculateRank.js
- api/gist.js
- src/cards/gist-card.js
- src/fetchers/gist-fetcher.js
- tests/fetchGist.test.js
- tests/renderGistCard.test.js
- tests/gist.test.js
ranks: src/calculateRank.js
ci:
- changed-files:
- any-glob-to-any-file:
- .github/workflows/*
- scripts/*
infrastructure:
- changed-files:
- any-glob-to-any-file:
- .eslintrc.json
- .github/workflows/*
- scripts/*
infrastructure: .eslintrc.json
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
+2 -2
View File
@@ -10,10 +10,10 @@ jobs:
if: github.repository == 'anuraghazra/github-readme-stats'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Deployment Prep
run: python ./.github/workflows/deploy-prep.py
- uses: stefanzweifel/git-auto-commit-action@8621497c8c39c72f3e2a999a26b4ca1b5058a842 # v5.0.1
- uses: stefanzweifel/git-auto-commit-action@8756aa072ef5b4a080af5dc8fef36c5d586e521d # v5.0.0
with:
branch: vercel
create_branch: true
+2 -2
View File
@@ -17,10 +17,10 @@ jobs:
node-version: [18.x]
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
@@ -27,10 +27,10 @@ jobs:
runs-on: ubuntu-latest
steps:
# NOTE: Retrieve issue templates.
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Run empty issues closer action
uses: rickstaa/empty-issues-closer-action@e96914613221511279ca25f50fd4acc85e331d99 # v1.1.74
uses: rickstaa/empty-issues-closer-action@096c761b38032baf0e9e6bb65c17abf0615a6e41 # v1.1.47
env:
github_token: ${{ secrets.GITHUB_TOKEN }}
with:
+2 -2
View File
@@ -29,10 +29,10 @@ jobs:
node-version: [18.x]
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
+1 -2
View File
@@ -21,7 +21,6 @@ jobs:
if: github.repository == 'anuraghazra/github-readme-stats'
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
- uses: actions/labeler@ac9175f8a1f3625fd0d4fb234536d26811351594 # v4.3.0
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true
+3 -4
View File
@@ -11,7 +11,6 @@ permissions: read-all
jobs:
analysis:
if: github.repository == 'anuraghazra/github-readme-stats'
name: Scorecard analysis
runs-on: ubuntu-latest
permissions:
@@ -22,12 +21,12 @@ jobs:
steps:
- name: "Checkout code"
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3
uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
with:
results_file: results.sarif
results_format: sarif
@@ -36,7 +35,7 @@ jobs:
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
with:
name: SARIF file
path: results.sarif
+3 -3
View File
@@ -30,15 +30,15 @@ jobs:
node-version: [18.x]
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
- uses: bahmutov/npm-install@e5c7e14408aa6089501de32bd16123b41738047e # v1.10.2
- uses: bahmutov/npm-install@2509f13e8485d88340a789a3f7ca11aaac47c9fc # v1.8.36
with:
useLockFile: false
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Cleanup
run: |
@@ -36,15 +36,15 @@ jobs:
node-version: [18.x]
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
- uses: bahmutov/npm-install@e5c7e14408aa6089501de32bd16123b41738047e # v1.10.2
- uses: bahmutov/npm-install@2509f13e8485d88340a789a3f7ca11aaac47c9fc # v1.8.36
with:
useLockFile: false
+3 -3
View File
@@ -18,10 +18,10 @@ jobs:
node-version: [18.x]
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
@@ -44,4 +44,4 @@ jobs:
npm run format:check
- name: Code Coverage
uses: codecov/codecov-action@4fe8c5f003fae66aa5ebb77cfd3e7bfbbda0b6b0 # v3.1.5
uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4
+1 -1
View File
@@ -34,7 +34,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Run top issues action
uses: rickstaa/top-issues-action@7e8dda5d5ae3087670f9094b9724a9a091fc3ba1 # v1.3.101
uses: rickstaa/top-issues-action@ba0b5f329a1a85074e84b1944a7154202248b630 # v1.3.71
env:
github_token: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -36,10 +36,10 @@ jobs:
node-version: [18.x]
steps:
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Node
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
@@ -53,7 +53,7 @@ jobs:
run: npm run generate-langs-json
- name: Create Pull Request if upstream language file is changed
uses: peter-evans/create-pull-request@6d6857d36972b65feb161a90e484f2984215f83e # v6.0.5
uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 # v5.0.2
with:
commit-message: "refactor: update languages JSON"
branch: "update_langs/patch"
+3
View File
@@ -1,3 +1,6 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm test
npm run lint
npx lint-staged
+1309 -401
View File
File diff suppressed because it is too large Load Diff
+11 -11
View File
@@ -29,7 +29,7 @@
"generate-langs-json": "node scripts/generate-langs-json",
"format": "prettier --write .",
"format:check": "prettier --check .",
"prepare": "husky",
"prepare": "husky install",
"lint": "npx eslint --max-warnings 0 \"./src/**/*.js\" \"./scripts/**/*.js\" \"./tests/**/*.js\" \"./api/**/*.js\" \"./themes/**/*.js\"",
"bench": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.bench.config.js"
},
@@ -38,27 +38,27 @@
"devDependencies": {
"@actions/core": "^1.10.1",
"@actions/github": "^6.0.0",
"@testing-library/dom": "^10.1.0",
"@testing-library/jest-dom": "^6.4.5",
"@testing-library/dom": "^9.3.3",
"@testing-library/jest-dom": "^6.1.4",
"@uppercod/css-to-object": "^1.1.1",
"axios-mock-adapter": "^1.22.0",
"color-contrast-checker": "^2.1.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint": "^8.54.0",
"eslint-config-prettier": "^9.0.0",
"hjson": "^3.2.2",
"husky": "^9.0.11",
"husky": "^8.0.3",
"jest": "^29.7.0",
"jest-bench": "^29.7.1",
"jest-bench": "^29.4.1",
"jest-environment-jsdom": "^29.7.0",
"js-yaml": "^4.1.0",
"lint-staged": "^15.2.2",
"lint-staged": "^15.1.0",
"lodash.snakecase": "^4.1.1",
"parse-diff": "^0.11.1",
"prettier": "^3.2.5"
"prettier": "^3.1.0"
},
"dependencies": {
"axios": "^1.7.1",
"dotenv": "^16.4.5",
"axios": "^1.6.2",
"dotenv": "^16.3.1",
"emoji-name-map": "^1.2.8",
"github-username-regex": "^1.0.0",
"upgrade": "^1.1.0",
+2 -2
View File
@@ -297,7 +297,7 @@ You can customize the appearance of all your cards however you wish with URL par
| `bg_color` | Card's background color. | string (hex color or a gradient in the form of *angle,start,end*) | `fffefe` |
| `hide_border` | Hides the card's border. | boolean | `false` |
| `theme` | Name of the theme, choose from [all available themes](themes/README.md). | enum | `default` |
| `cache_seconds` | Sets the cache header manually (min: 21600, max: 86400). | integer | `21600` |
| `cache_seconds` | Sets the cache header manually (min: 21600, max: 86400). | integer | `1800` |
| `locale` | Sets the language in the card, you can check full list of available locales [here](#available-locales). | enum | `en` |
| `border_radius` | Corner rounding on the card. | number | `4.5` |
@@ -432,7 +432,7 @@ If we don't support your language, please consider contributing! You can find mo
| `custom_title` | Sets a custom title for the card. | string | `WakaTime Stats` |
| `layout` | Switches between two available layouts `default` & `compact`. | enum | `default` |
| `langs_count` | Limits the number of languages on the card, defaults to all reported languages. | integer | `null` |
| `api_domain` | Sets a custom API domain for the card, e.g. to use services like [Hakatime](https://github.com/mujx/hakatime) or [Wakapi](https://github.com/muety/wakapi) | string | `wakatime.com` |
| `api_domain` | Sets a custom API domain for the card, e.g. to use services like [Hakatime](https://github.com/mujx/hakatime) or [Wakapi](https://github.com/muety/wakapi) | string | `Waka API` |
| `display_format` | Sets the WakaTime stats display format. Choose `time` to display time-based stats or `percent` to show percentages. | enum | `time` |
| `disable_animations` | Disables all animations in the card. | boolean | `false` |
+1 -1
View File
@@ -518,7 +518,7 @@ const renderStatsCard = (stats, options = {}) => {
if (key === "commits") {
return `${i18n.t("statcard.commits")} ${
include_all_commits ? "" : `in ${new Date().getFullYear()}`
} : ${STATS[key].value}`;
} : ${totalStars}`;
}
return `${STATS[key].label}: ${STATS[key].value}`;
})
+1 -1
View File
@@ -46,7 +46,7 @@ export type TopLangOptions = CommonOptions & {
hide_progress: boolean;
};
export type WakaTimeOptions = CommonOptions & {
type WakaTimeOptions = CommonOptions & {
hide_title: boolean;
hide: string[];
line_height: string;
+8 -16
View File
@@ -39,20 +39,6 @@ const noCodingActivityNode = ({ color, text }) => {
* @typedef {import('../fetchers/types').WakaTimeLang} WakaTimeLang
*/
/**
* Format language value.
*
* @param {Object} args The function arguments.
* @param {WakaTimeLang} args.lang The language object.
* @param {"time" | "percent"} args.display_format The display format of the language node.
* @returns {string} The formatted language value.
*/
const formatLanguageValue = ({ display_format, lang }) => {
return display_format === "percent"
? `${lang.percent.toFixed(2).toString()} %`
: lang.text;
};
/**
* Create compact WakaTime layout.
*
@@ -65,7 +51,10 @@ const formatLanguageValue = ({ display_format, lang }) => {
*/
const createCompactLangNode = ({ lang, x, y, display_format }) => {
const color = languageColors[lang.name] || "#858585";
const value = formatLanguageValue({ display_format, lang });
const value =
display_format === "percent"
? `${lang.percent.toFixed(2).toString()} %`
: lang.text;
return `
<g transform="translate(${x}, ${y})">
@@ -352,7 +341,10 @@ const renderWakatimeCard = (stats = {}, options = { hide: [] }) => {
return createTextNode({
id: language.name,
label: language.name,
value: formatLanguageValue({ display_format, lang: language }),
value:
display_format === "percent"
? `${language.percent.toFixed(2).toString()} %`
: language.text,
index,
percent: language.percent,
// @ts-ignore
+3 -15
View File
@@ -130,8 +130,6 @@
"Easybuild": "#069406",
"Ecere Projects": "#913960",
"Ecmarkup": "#eb8131",
"Edge": "#0dffe0",
"EdgeQL": "#31A7FF",
"EditorConfig": "#fff1f2",
"Eiffel": "#4d6977",
"Elixir": "#6e4a7e",
@@ -172,8 +170,8 @@
"Game Maker Language": "#71b417",
"Gemfile.lock": "#701516",
"Gemini": "#ff6900",
"Genero 4gl": "#63408e",
"Genero per": "#d8df39",
"Genero": "#63408e",
"Genero Forms": "#d8df39",
"Genie": "#fb855d",
"Genshi": "#951531",
"Gentoo Ebuild": "#9400ff",
@@ -184,8 +182,6 @@
"Git Config": "#F44D27",
"Git Revision List": "#F44D27",
"Gleam": "#ffaff3",
"Glimmer JS": "#F5835F",
"Glimmer TS": "#3178c6",
"Glyph": "#c1ac7f",
"Gnuplot": "#f0a9f0",
"Go": "#00ADD8",
@@ -316,7 +312,6 @@
"Modelica": "#de1d31",
"Modula-2": "#10253f",
"Modula-3": "#223388",
"Mojo": "#ff4c1f",
"Monkey C": "#8D6747",
"MoonScript": "#ff4585",
"Motoko": "#fbb03b",
@@ -383,7 +378,6 @@
"PicoLisp": "#6067af",
"PigLatin": "#fcd7de",
"Pike": "#005390",
"Pip Requirements": "#FFD343",
"PlantUML": "#fbbd16",
"PogoScript": "#d80074",
"Polar": "#ae81ff",
@@ -392,7 +386,6 @@
"PostScript": "#da291c",
"PowerBuilder": "#8f0f8d",
"PowerShell": "#012456",
"Praat": "#c8506d",
"Prisma": "#0c344b",
"Processing": "#0096D8",
"Procfile": "#3B2F63",
@@ -435,7 +428,6 @@
"Ring": "#2D54CB",
"Riot": "#A71E49",
"RobotFramework": "#00c0b5",
"Roc": "#7c38f5",
"Roff": "#ecdebe",
"Roff Manpage": "#ecdebe",
"Rouge": "#cc0088",
@@ -468,7 +460,6 @@
"Slash": "#007eff",
"Slice": "#003fa2",
"Slim": "#2b2b2b",
"Slint": "#2379F4",
"SmPL": "#c94949",
"Smalltalk": "#596706",
"Smarty": "#f0c040",
@@ -487,7 +478,7 @@
"SugarSS": "#2fcc9f",
"SuperCollider": "#46390b",
"Svelte": "#ff3e00",
"Sway": "#00F58C",
"Sway": "#dea584",
"Sweave": "#198ce7",
"Swift": "#F05138",
"SystemVerilog": "#DAE1C2",
@@ -503,12 +494,9 @@
"Tcl": "#e4cc98",
"TeX": "#3D6117",
"Terra": "#00004c",
"Terraform Template": "#7b42bb",
"TextGrid": "#c8506d",
"TextMate Properties": "#df66e4",
"Textile": "#ffe7ac",
"Thrift": "#D12127",
"Toit": "#c2c9fb",
"Turing": "#cf142b",
"Twig": "#c1d026",
"TypeScript": "#3178c6",
@@ -305,3 +305,161 @@ exports[`Test Render WakaTime Card should render correctly with compact layout w
</svg>
"
`;
exports[`Test Render WakaTime Card should render correctly with percent display format 1`] = `
"
<svg
width="495"
height="150"
viewBox="0 0 495 150"
fill="none"
xmlns="http://www.w3.org/2000/svg"
role="img"
aria-labelledby="descId"
>
<title id="titleId"></title>
<desc id="descId"></desc>
<style>
.header {
font: 600 18px 'Segoe UI', Ubuntu, Sans-Serif;
fill: #2f80ed;
animation: fadeInAnimation 0.8s ease-in-out forwards;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.header { font-size: 15.5px; }
}
.stat {
font: 600 14px 'Segoe UI', Ubuntu, "Helvetica Neue", Sans-Serif; fill: #434d58;
}
@supports(-moz-appearance: auto) {
/* Selector detects Firefox */
.stat { font-size:12px; }
}
.stagger {
opacity: 0;
animation: fadeInAnimation 0.3s ease-in-out forwards;
}
.not_bold { font-weight: 400 }
.bold { font-weight: 700 }
@keyframes slideInAnimation {
from {
width: 0;
}
to {
width: calc(100%-100px);
}
}
@keyframes growWidthAnimation {
from {
width: 0;
}
to {
width: 100%;
}
}
.lang-name { font: 400 11px 'Segoe UI', Ubuntu, Sans-Serif; fill: #434d58 }
#rect-mask rect{
animation: slideInAnimation 1s ease-in-out forwards;
}
.lang-progress{
animation: growWidthAnimation 0.6s ease-in-out forwards;
}
</style>
<rect
data-testid="card-bg"
x="0.5"
y="0.5"
rx="4.5"
height="99%"
stroke="#e4e2e2"
width="494"
fill="#fffefe"
stroke-opacity="1"
/>
<g
data-testid="card-title"
transform="translate(25, 35)"
>
<g transform="translate(0, 0)">
<text
x="0"
y="0"
class="header"
data-testid="header"
>WakaTime Stats (last 7 days)</text>
</g>
</g>
<g
data-testid="main-card-body"
transform="translate(0, 55)"
>
<svg x="0" y="0" width="100%">
<g transform="translate(0, 0)">
<g class="stagger" style="animation-delay: 450ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5" data-testid="Other">Other:</text>
<text
class="stat"
x="350"
y="12.5"
>47.39 %</text>
<svg width="220" x="110" y="4">
<rect rx="5" ry="5" x="0" y="0" width="220" height="8" fill="#434d58"></rect>
<svg data-testid="lang-progress" width="47.39%">
<rect
height="8"
fill="#2f80ed"
rx="5" ry="5" x="0" y="0"
class="lang-progress"
style="animation-delay: 750ms;"
/>
</svg>
</svg>
</g>
</g><g transform="translate(0, 25)">
<g class="stagger" style="animation-delay: 600ms" transform="translate(25, 0)">
<text class="stat bold" y="12.5" data-testid="TypeScript">TypeScript:</text>
<text
class="stat"
x="350"
y="12.5"
>50.48 %</text>
<svg width="220" x="110" y="4">
<rect rx="5" ry="5" x="0" y="0" width="220" height="8" fill="#434d58"></rect>
<svg data-testid="lang-progress" width="50.48%">
<rect
height="8"
fill="#2f80ed"
rx="5" ry="5" x="0" y="0"
class="lang-progress"
style="animation-delay: 900ms;"
/>
</svg>
</svg>
</g>
</g>
</svg>
</g>
</svg>
"
`;
-51
View File
@@ -1,51 +0,0 @@
import { benchmarkSuite } from "jest-bench";
import gist from "../../api/gist.js";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import { jest } from "@jest/globals";
const 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,
},
],
},
},
},
};
const mock = new MockAdapter(axios);
mock.onPost("https://api.github.com/graphql").reply(200, gist_data);
benchmarkSuite("test /api/gist", {
["simple request"]: async () => {
const req = {
query: {
id: "bbfce31e0217a3689c8d961a356cb10d",
},
};
const res = {
setHeader: jest.fn(),
send: jest.fn(),
};
await gist(req, res);
},
});
-50
View File
@@ -1,50 +0,0 @@
import { benchmarkSuite } from "jest-bench";
import pin from "../../api/pin.js";
import axios from "axios";
import MockAdapter from "axios-mock-adapter";
import { jest } from "@jest/globals";
const data_repo = {
repository: {
username: "anuraghazra",
name: "convoychat",
stargazers: {
totalCount: 38000,
},
description: "Help us take over the world! React + TS + GraphQL Chat App",
primaryLanguage: {
color: "#2b7489",
id: "MDg6TGFuZ3VhZ2UyODc=",
name: "TypeScript",
},
forkCount: 100,
isTemplate: false,
},
};
const data_user = {
data: {
user: { repository: data_repo.repository },
organization: null,
},
};
const mock = new MockAdapter(axios);
mock.onPost("https://api.github.com/graphql").reply(200, data_user);
benchmarkSuite("test /api/pin", {
["simple request"]: async () => {
const req = {
query: {
username: "anuraghazra",
repo: "convoychat",
},
};
const res = {
setHeader: jest.fn(),
send: jest.fn(),
};
await pin(req, res);
},
});
+8 -11
View File
@@ -14,20 +14,19 @@ import { expect, describe, beforeAll, test } from "@jest/globals";
const REPO = "curly-fiesta";
const USER = "catelinemnemosyne";
const STATS_CARD_USER = "e2eninja";
const GIST_ID = "372cef55fd897b31909fdeb3a7262758";
const STATS_DATA = {
name: "E2ENinja",
totalPRs: 1,
name: "Cateline Mnemosyne",
totalPRs: 2,
totalReviews: 0,
totalCommits: 3,
totalCommits: 8,
totalIssues: 1,
totalStars: 1,
contributedTo: 0,
contributedTo: 1,
rank: {
level: "C",
percentile: 98.73972605284538,
percentile: 98.06929469995667,
},
};
@@ -117,17 +116,15 @@ describe("Fetch Cards", () => {
// Check if the Vercel preview instance stats card function is up and running.
await expect(
axios.get(`${VERCEL_PREVIEW_URL}/api?username=${STATS_CARD_USER}`),
axios.get(`${VERCEL_PREVIEW_URL}/api?username=${USER}`),
).resolves.not.toThrow();
// Get local stats card.
const localStatsCardSVG = renderStatsCard(STATS_DATA, {
include_all_commits: true,
});
const localStatsCardSVG = renderStatsCard(STATS_DATA);
// Get the Vercel preview stats card response.
const serverStatsSvg = await axios.get(
`${VERCEL_PREVIEW_URL}/api?username=${STATS_CARD_USER}&include_all_commits=true&${CACHE_BURST_STRING}`,
`${VERCEL_PREVIEW_URL}/api?username=${USER}&${CACHE_BURST_STRING}`,
);
// Check if stats card from deployment matches the stats card from local.
+1 -3
View File
@@ -387,9 +387,7 @@ describe("Test renderStatsCard", () => {
document.querySelector(
'g[transform="translate(0, 25)"]>.stagger>.stat.bold',
).textContent,
).toMatchInlineSnapshot(
`"累计提交数(commit (${new Date().getFullYear()}):"`,
);
).toMatchInlineSnapshot(`"累计提交数(commit (2023):"`);
expect(
document.querySelector(
'g[transform="translate(0, 50)"]>.stagger>.stat.bold',
+7
View File
@@ -83,4 +83,11 @@ describe("Test Render WakaTime Card", () => {
"No coding activity this week",
);
});
it("should render correctly with percent display format", () => {
const card = renderWakatimeCard(wakaTimeData.data, {
display_format: "percent",
});
expect(card).toMatchSnapshot();
});
});
+1 -1
View File
@@ -2,7 +2,7 @@
"functions": {
"api/*.js": {
"memory": 128,
"maxDuration": 30
"maxDuration": 10
}
},
"redirects": [