mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	test(etapi): port api-metrics
This commit is contained in:
		| @@ -1,12 +0,0 @@ | |||||||
| POST {{triliumHost}}/etapi/auth/login |  | ||||||
| Content-Type: application/json |  | ||||||
|  |  | ||||||
| { |  | ||||||
|   "password": "1234" |  | ||||||
| } |  | ||||||
|  |  | ||||||
| > {% |  | ||||||
|     client.assert(response.status === 201); |  | ||||||
|  |  | ||||||
|     client.global.set("authToken", response.body.authToken); |  | ||||||
| %} |  | ||||||
| @@ -1,43 +0,0 @@ | |||||||
| ### Test regular API metrics endpoint (requires session authentication) |  | ||||||
|  |  | ||||||
| ### Get metrics from regular API (default Prometheus format) |  | ||||||
| GET {{triliumHost}}/api/metrics |  | ||||||
|  |  | ||||||
| > {% |  | ||||||
| client.test("API metrics endpoint returns Prometheus format by default", function() { |  | ||||||
|     client.assert(response.status === 200, "Response status is not 200"); |  | ||||||
|     client.assert(response.headers["content-type"].includes("text/plain"), "Content-Type should be text/plain"); |  | ||||||
|     client.assert(response.body.includes("trilium_info"), "Should contain trilium_info metric"); |  | ||||||
|     client.assert(response.body.includes("trilium_notes_total"), "Should contain trilium_notes_total metric"); |  | ||||||
|     client.assert(response.body.includes("# HELP"), "Should contain HELP comments"); |  | ||||||
|     client.assert(response.body.includes("# TYPE"), "Should contain TYPE comments"); |  | ||||||
| }); |  | ||||||
| %} |  | ||||||
|  |  | ||||||
| ### Get metrics in JSON format |  | ||||||
| GET {{triliumHost}}/api/metrics?format=json |  | ||||||
|  |  | ||||||
| > {% |  | ||||||
| client.test("API metrics endpoint returns JSON when requested", function() { |  | ||||||
|     client.assert(response.status === 200, "Response status is not 200"); |  | ||||||
|     client.assert(response.headers["content-type"].includes("application/json"), "Content-Type should be application/json"); |  | ||||||
|     client.assert(response.body.version, "Version info not present"); |  | ||||||
|     client.assert(response.body.database, "Database info not present"); |  | ||||||
|     client.assert(response.body.timestamp, "Timestamp not present"); |  | ||||||
|     client.assert(typeof response.body.database.totalNotes === 'number', "Total notes should be a number"); |  | ||||||
|     client.assert(typeof response.body.database.activeNotes === 'number', "Active notes should be a number"); |  | ||||||
|     client.assert(response.body.noteTypes, "Note types breakdown not present"); |  | ||||||
|     client.assert(response.body.attachmentTypes, "Attachment types breakdown not present"); |  | ||||||
|     client.assert(response.body.statistics, "Statistics not present"); |  | ||||||
| }); |  | ||||||
| %} |  | ||||||
|  |  | ||||||
| ### Test invalid format parameter |  | ||||||
| GET {{triliumHost}}/api/metrics?format=xml |  | ||||||
|  |  | ||||||
| > {% |  | ||||||
| client.test("Invalid format parameter returns error", function() { |  | ||||||
|     client.assert(response.status === 500, "Response status should be 500"); |  | ||||||
|     client.assert(response.body.message.includes("prometheus"), "Error message should mention supported formats"); |  | ||||||
| }); |  | ||||||
| %}  |  | ||||||
							
								
								
									
										48
									
								
								apps/server/spec/etapi/api-metrics.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								apps/server/spec/etapi/api-metrics.spec.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | |||||||
|  | import { Application } from "express"; | ||||||
|  | import { beforeAll, describe, expect, it } from "vitest"; | ||||||
|  | import buildApp from "../../src/app.js"; | ||||||
|  | import supertest from "supertest"; | ||||||
|  |  | ||||||
|  | let app: Application; | ||||||
|  | let token: string; | ||||||
|  |  | ||||||
|  | // TODO: This is an API test, not ETAPI. | ||||||
|  |  | ||||||
|  | describe("api/metrics", () => { | ||||||
|  |     beforeAll(async () => { | ||||||
|  |         app = await buildApp(); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     it("returns Prometheus format by default", async () => { | ||||||
|  |         const response = await supertest(app) | ||||||
|  |             .get("/api/metrics") | ||||||
|  |             .expect(200); | ||||||
|  |         expect(response.headers["content-type"]).toContain("text/plain"); | ||||||
|  |         expect(response.text).toContain("trilium_info"); | ||||||
|  |         expect(response.text).toContain("trilium_notes_total"); | ||||||
|  |         expect(response.text).toContain("# HELP"); | ||||||
|  |         expect(response.text).toContain("# TYPE"); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     it("returns JSON when requested", async() => { | ||||||
|  |         const response = await supertest(app) | ||||||
|  |             .get("/api/metrics?format=json") | ||||||
|  |             .expect(200); | ||||||
|  |         expect(response.headers["content-type"]).toContain("application/json"); | ||||||
|  |         expect(response.body.version).toBeTruthy(); | ||||||
|  |         expect(response.body.database).toBeTruthy(); | ||||||
|  |         expect(response.body.timestamp).toBeTruthy(); | ||||||
|  |         expect(response.body.database.totalNotes).toBeTypeOf("number"); | ||||||
|  |         expect(response.body.database.activeNotes).toBeTypeOf("number"); | ||||||
|  |         expect(response.body.noteTypes).toBeTruthy(); | ||||||
|  |         expect(response.body.attachmentTypes).toBeTruthy(); | ||||||
|  |         expect(response.body.statistics).toBeTruthy(); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     it("returns error on invalid format", async() => { | ||||||
|  |         const response = await supertest(app) | ||||||
|  |             .get("/api/metrics?format=xml") | ||||||
|  |             .expect(500); | ||||||
|  |         expect(response.body.message).toContain("prometheus"); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
		Reference in New Issue
	
	Block a user