Skip to content

Commit 0d7022e

Browse files
committed
added changeset and updated test cases
1 parent 3dafa12 commit 0d7022e

3 files changed

Lines changed: 22 additions & 70 deletions

File tree

.changeset/smart-nails-mix.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@mermaidchart/sdk': patch
3+
---
4+
5+
Add a regenerate method to the SDK that complements our Mermaid Diagram Sync GitHub App functionality. This method should accept the existing Mermaid diagram content along with source file changes, and regenerate the diagram based on those updates while preserving the overall diagram structure and intent.

packages/sdk/src/index.e2e.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ describe('regenerateDiagram', () => {
276276
];
277277

278278
try {
279+
const creditsBefore = await client.getAICredits();
280+
279281
const result = await client.regenerateDiagram({
280282
code,
281283
sourceFiles,
@@ -285,6 +287,21 @@ describe('regenerateDiagram', () => {
285287
expect(result).toHaveProperty('result');
286288
expect(result).toHaveProperty('code');
287289
expect(['ok', 'fail']).toContain(result.result);
290+
291+
// When the AI successfully regenerates the diagram, creditUsage should be present
292+
// and credits should have been deducted
293+
if (result.result === 'ok' && result.solved === true) {
294+
expect(result.creditUsage).toMatchObject({
295+
creditsToDeduct: expect.any(Number),
296+
baseCost: expect.any(Number),
297+
reason: expect.any(String),
298+
});
299+
300+
const creditsAfter = await client.getAICredits();
301+
expect(creditsAfter.aiCredits.remaining).toBe(
302+
creditsBefore.aiCredits.remaining - result.creditUsage!.creditsToDeduct,
303+
);
304+
}
288305
} catch (error) {
289306
if (error instanceof AICreditsLimitExceededError) {
290307
return; // Credits exceeded is acceptable for E2E test

packages/sdk/src/index.test.ts

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -221,74 +221,4 @@ describe('MermaidChart', () => {
221221
});
222222
});
223223

224-
describe('#regenerateDiagram', () => {
225-
beforeEach(async () => {
226-
await client.setAccessToken('test-access-token');
227-
});
228-
229-
it('should POST to the regenerate endpoint with the request body and return response.data', async () => {
230-
const jsonResponse = {
231-
result: 'ok' as const,
232-
code: '```mermaid\nflowchart TD\n A --> B --> C\n```',
233-
solved: true,
234-
};
235-
236-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
237-
const postSpy = vi.spyOn((client as any).axios, 'post').mockResolvedValue({
238-
data: jsonResponse,
239-
});
240-
241-
const requestBody = {
242-
code: 'flowchart TD\n A --> B',
243-
sourceFiles: ['const x = 1;', 'function foo() {}'],
244-
};
245-
246-
const result = await client.regenerateDiagram(requestBody);
247-
248-
expect(postSpy).toHaveBeenCalledWith(URLS.rest.openai.regenerate, requestBody);
249-
expect(result).toEqual(jsonResponse);
250-
});
251-
252-
it('should include creditUsage in response when present', async () => {
253-
const jsonResponse = {
254-
result: 'ok' as const,
255-
code: '```mermaid\nflowchart TD\n A --> B\n```',
256-
solved: true,
257-
creditUsage: {
258-
creditsToDeduct: 1,
259-
baseCost: 1,
260-
reason: 'regeneration',
261-
},
262-
};
263-
264-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
265-
vi.spyOn((client as any).axios, 'post').mockResolvedValue({
266-
data: jsonResponse,
267-
});
268-
269-
const result = await client.regenerateDiagram({
270-
code: 'flowchart TD\n A --> B',
271-
sourceFiles: ['const x = 1;'],
272-
});
273-
274-
expect(result.creditUsage).toEqual(jsonResponse.creditUsage);
275-
});
276-
277-
it('should throw AICreditsLimitExceededError on 402', async () => {
278-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
279-
vi.spyOn((client as any).axios, 'post').mockRejectedValue({
280-
response: {
281-
status: 402,
282-
data: 'AI credits limit exceeded',
283-
},
284-
});
285-
286-
await expect(
287-
client.regenerateDiagram({
288-
code: 'flowchart TD\n A --> B',
289-
sourceFiles: [],
290-
}),
291-
).rejects.toThrow(AICreditsLimitExceededError);
292-
});
293-
});
294224
});

0 commit comments

Comments
 (0)