Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions api/ping.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// api/ping.js
module.exports = (req, res) => {
console.log("✅ /api/ping");
res.status(200).json({ message: "pong", status: "ok", timestamp: new Date().toISOString() });
};
73 changes: 73 additions & 0 deletions api/ping.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/**
* Test for the /api/ping endpoint
* Verifies deployment verification functionality
*/

describe('/api/ping endpoint', () => {
let pingHandler;
let mockReq;
let mockRes;

beforeEach(() => {
// Import the ping handler
pingHandler = require('../api/ping.js');

// Mock request object
mockReq = {};

// Mock response object
mockRes = {
statusCode: null,
responseData: null,
status: function(code) {
this.statusCode = code;
return this;
},
json: function(data) {
this.responseData = data;
return this;
}
};
});

it('should return 200 status code', () => {
pingHandler(mockReq, mockRes);
expect(mockRes.statusCode).toBe(200);
});

it('should return JSON response with required fields', () => {
pingHandler(mockReq, mockRes);

expect(mockRes.responseData).toBeDefined();
expect(typeof mockRes.responseData).toBe('object');
expect(mockRes.responseData.message).toBeDefined();
expect(mockRes.responseData.status).toBe('ok');
expect(mockRes.responseData.timestamp).toBeDefined();
});

it('should return valid timestamp', () => {
pingHandler(mockReq, mockRes);

const timestamp = mockRes.responseData.timestamp;
expect(timestamp).toBeDefined();

// Should be a valid ISO string
const date = new Date(timestamp);
expect(date.toISOString()).toBe(timestamp);

// Should be recent (within last minute)
const now = new Date();
const timeDiff = Math.abs(now.getTime() - date.getTime());
expect(timeDiff).toBeLessThan(60000); // Less than 1 minute
});

it('should be suitable for deployment verification', () => {
pingHandler(mockReq, mockRes);

// Verify all requirements for deployment verification
expect(mockRes.statusCode).toBe(200);
expect(mockRes.responseData.message).toBe('pong');
expect(mockRes.responseData.status).toBe('ok');
expect(mockRes.responseData.timestamp).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/);
});
});