// Simple test to demonstrate backend caching const axios = require('axios'); const API_BASE = 'http://localhost:3001/api'; async function testCaching() { console.log('๐Ÿงช Testing backend caching behavior...\n'); console.log('๐Ÿ“Š Getting initial rate limit:'); try { const initialRateLimit = await axios.get(`${API_BASE}/rate-limit`); console.log(`๐Ÿ”„ Initial rate limit: ${initialRateLimit.data.remaining}/${initialRateLimit.data.limit} remaining\n`); } catch (error) { console.log(`โŒ Initial rate limit error: ${error.message}\n`); } console.log('๐Ÿ“Š First request - should hit GitHub API:'); const start1 = Date.now(); try { const response1 = await axios.get(`${API_BASE}/workflow-runs`); console.log(`โœ… Response 1: ${response1.data.length} workflow runs (${Date.now() - start1}ms)`); } catch (error) { console.log(`โŒ Error 1: ${error.message}`); } console.log('๐Ÿ“Š Rate limit after first request:'); try { const rateLimit1 = await axios.get(`${API_BASE}/rate-limit`); console.log(`๐Ÿ”„ Rate limit: ${rateLimit1.data.remaining}/${rateLimit1.data.limit} remaining\n`); } catch (error) { console.log(`โŒ Rate limit error: ${error.message}\n`); } console.log('๐Ÿ“Š Second request - should hit cache:'); const start2 = Date.now(); try { const response2 = await axios.get(`${API_BASE}/workflow-runs`); console.log(`โœ… Response 2: ${response2.data.length} workflow runs (${Date.now() - start2}ms)`); } catch (error) { console.log(`โŒ Error 2: ${error.message}`); } console.log('๐Ÿ“Š Rate limit after second request:'); try { const rateLimit2 = await axios.get(`${API_BASE}/rate-limit`); console.log(`๐Ÿ”„ Rate limit: ${rateLimit2.data.remaining}/${rateLimit2.data.limit} remaining\n`); } catch (error) { console.log(`โŒ Rate limit error: ${error.message}\n`); } console.log('๐Ÿ“Š Third request - should also hit cache:'); const start3 = Date.now(); try { const response3 = await axios.get(`${API_BASE}/workflow-runs`); console.log(`โœ… Response 3: ${response3.data.length} workflow runs (${Date.now() - start3}ms)`); } catch (error) { console.log(`โŒ Error 3: ${error.message}`); } console.log('๐Ÿ“Š Final rate limit:'); try { const finalRateLimit = await axios.get(`${API_BASE}/rate-limit`); console.log(`๐Ÿ”„ Final rate limit: ${finalRateLimit.data.remaining}/${finalRateLimit.data.limit} remaining\n`); } catch (error) { console.log(`โŒ Final rate limit error: ${error.message}\n`); } console.log('๐Ÿ“Š Getting cache stats:'); try { const cacheStats = await axios.get(`${API_BASE}/cache/stats`); console.log(`๐Ÿ’พ Cache size: ${cacheStats.data.size} entries`); console.log(`๐Ÿ’พ Cache keys: ${cacheStats.data.entries.slice(0, 3).join(', ')}${cacheStats.data.entries.length > 3 ? '...' : ''}\n`); } catch (error) { console.log(`โŒ Cache stats error: ${error.message}\n`); } console.log('๐Ÿ“Š Getting rate limit info:'); try { const rateLimitInfo = await axios.get(`${API_BASE}/rate-limit`); console.log(`๐Ÿ”„ Rate limit: ${rateLimitInfo.data.remaining}/${rateLimitInfo.data.limit} remaining`); console.log(`๐Ÿ”„ Reset in: ${Math.round(rateLimitInfo.data.timeUntilReset / 1000)}s`); } catch (error) { console.log(`โŒ Rate limit error: ${error.message}`); } } testCaching().catch(console.error);