v1.12.29 접속자 요약과 회원 작성 이력 및 댓글 표시 정리
This commit is contained in:
@@ -401,6 +401,33 @@ test('CSP 수집은 IP 해시 기준 분당 요청 상한을 적용한다', asyn
|
||||
expect(Number(limitedResponse.headers()['retry-after'])).toBeGreaterThan(0)
|
||||
})
|
||||
|
||||
test('실시간 접속 요약은 표시 제한 밖의 활성 탭까지 집계하고 만료 탭을 제외한다', async ({ request: anonymousApi }) => {
|
||||
expect((await anonymousApi.get('/admin/api/analytics/realtime')).status()).toBe(401)
|
||||
try {
|
||||
await database`
|
||||
INSERT INTO analytics_active_sessions (session_hash, path, ip_address)
|
||||
SELECT 'realtime-api-test-' || value, '/post/shared', '198.51.100.' || value
|
||||
FROM generate_series(1, 21) AS value
|
||||
`
|
||||
await database`
|
||||
INSERT INTO analytics_active_sessions (session_hash, path, ip_address, last_seen_at)
|
||||
VALUES
|
||||
('realtime-api-test-extra-1', '/post/shared', '198.51.100.1', now()),
|
||||
('realtime-api-test-extra-2', '/post/another', '198.51.100.1', now()),
|
||||
('realtime-api-test-expired', '/post/expired', '198.51.100.99', now() - interval '2 minutes')
|
||||
`
|
||||
const response = await adminApi.get('/admin/api/analytics/realtime?limit=20')
|
||||
expect(response.status()).toBe(200)
|
||||
const result = await response.json()
|
||||
expect(result.summary).toMatchObject({ onlineNow: 21, anonymousNow: 21, loggedInNow: 0, openPageCount: 23 })
|
||||
expect(result.sessions).toHaveLength(20)
|
||||
expect(result.sessions.find((session) => session.ipAddress === '198.51.100.1')).toMatchObject({ pageCount: 3 })
|
||||
expect(result.sessions.some((session) => session.ipAddress === '198.51.100.99')).toBe(false)
|
||||
} finally {
|
||||
await database`DELETE FROM analytics_active_sessions WHERE session_hash LIKE 'realtime-api-test-%'`
|
||||
}
|
||||
})
|
||||
|
||||
test('미디어 카탈로그 reconcile과 DB 목록 계약 및 fallback을 유지한다', async () => {
|
||||
const uploadRoot = process.env.SORI_TEST_UPLOAD_ROOT
|
||||
const mediaDirectory = join(uploadRoot, 'posts', 'catalog-api-test')
|
||||
|
||||
Reference in New Issue
Block a user