diff --git a/package.json b/package.json
index c4f9acb..56521ff 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"main": "index.js",
"scripts": {
"start": "node src/index.js",
- "test": "jest --coverage"
+ "test": "NODE_ENV=test jest --coverage"
},
"repository": {
"type": "git",
diff --git a/src/api/badge.js b/src/api/badge.js
index ac12604..978314a 100644
--- a/src/api/badge.js
+++ b/src/api/badge.js
@@ -47,6 +47,9 @@ router.get('/badge', async (req, res) => {
const textPadding = Math.round(iconSize * 0.4);
const radius = style === 'flat' ? 3 : 0;
const textWidth = estimateTextWidth(effectiveLabel, fontSize);
+
+ // Kinyerjük az ikon SVG-ből a width és height attribútumokat (ha vannak)
+ let iconViewBoxWidth = iconSize;
let iconViewBoxHeight = iconSize;
const widthMatch = iconSVG.match(/width="(\d+\.?\d*)"/);
const heightMatch = iconSVG.match(/height="(\d+\.?\d*)"/);
diff --git a/src/lib/logger.js b/src/lib/logger.js
index fb548c1..ce6c541 100644
--- a/src/lib/logger.js
+++ b/src/lib/logger.js
@@ -2,10 +2,12 @@
const pino = require('pino');
+const isTest = process.env.NODE_ENV === 'test';
+
const logger = pino({
- level: process.env.LOG_LEVEL || 'info',
+ level: isTest ? 'silent' : (process.env.LOG_LEVEL || 'info'),
transport:
- process.env.NODE_ENV !== 'production'
+ !isTest && process.env.NODE_ENV !== 'production'
? { target: 'pino-pretty', options: { colorize: true } }
: undefined,
});
diff --git a/test/badge.api.test.js b/test/badge.api.test.js
index 0ef12ff..a902a2e 100644
--- a/test/badge.api.test.js
+++ b/test/badge.api.test.js
@@ -1,94 +1,257 @@
const request = require('supertest');
const express = require('express');
const helmet = require('helmet');
-const badgeRouter = require('../src/api/badge');
-const app = express();
-app.use(helmet({ crossOriginResourcePolicy: false }));
-app.use(badgeRouter);
+// --- Mock axios before requiring the router ---
+jest.mock('axios');
+const axios = require('axios');
+
+const MOCK_SVG = ``;
+
+beforeEach(() => {
+ axios.get.mockResolvedValue({ status: 200, data: MOCK_SVG });
+});
+
+afterEach(() => {
+ jest.restoreAllMocks();
+});
+
+// Fresh app for each test to avoid middleware leakage
+function createApp() {
+ const badgeRouter = require('../src/api/badge');
+ const app = express();
+ app.use(helmet({ crossOriginResourcePolicy: false }));
+ app.use(badgeRouter);
+ return app;
+}
describe('GET /badge', () => {
+
+ // --- Basic happy-path tests ---
+
it('should return SVG with default params', async () => {
- const res = await request(app).get('/badge');
- const resBody = Buffer.from(res.body).toString();
+ const res = await request(createApp()).get('/badge');
+ const body = Buffer.from(res.body).toString();
expect(res.statusCode).toBe(200);
expect(res.headers['content-type']).toMatch(/image\/svg\+xml/);
- expect(resBody).toContain('