Skip to main content
Glama

Redmine MCP Server

by yonaka15
delete.test.ts3.92 kB
import { jest, /*expect,*/ describe, it, beforeEach } from '@jest/globals'; import type { Mock } from 'jest-mock'; import { UsersClient } from '../../../client/users.js'; // import { mockResponse, mockErrorResponse } from '../../helpers/mocks.js'; // Unused // import * as fixtures from '../../helpers/fixtures.js'; // Unused // import config from '../../../config.js'; // Unused // import { RedmineApiError } from '../../../client/base.js'; // Unused // import { parseUrl } from '../../helpers/url.js'; // Unused describe("Users API (DELETE)", () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars let client: UsersClient; // client is assigned but never used in the current skipped test let mockFetch: Mock; // const userId = fixtures.singleUserResponse.user.id; // Unused beforeEach(() => { client = new UsersClient(); // Assigning client here for consistency mockFetch = jest.spyOn(global, "fetch") as Mock; mockFetch.mockReset(); }); describe("DELETE /users/:id.json (deleteUser)", () => { // DELETE操作のテストは安全のためスキップ it.skip("all DELETE operation tests are skipped for safety", () => { // DELETE操作のテストは、実際のAPIへの影響を避けるため、通常はモックサーバーを使用するか、 // または特定のテスト環境でのみ実行するように制御します。 // Redmine APIの仕様では、DELETEリクエストは成功すると204 No Contentを返します。 // // ユーザー削除の挙動: // - ユーザーは匿名化 (anonymous user) されるか、完全に削除されるか(Redmineの設定による) // - ユーザーが作成したチケットや時間はどうなるか // - プロジェクトメンバーシップからの削除 // - カスタムフィールド値の扱い // - グループメンバーシップからの削除 // // 権限の検証: // - 管理者権限が必要 // - 自分自身を削除しようとした場合の挙動 // - アクティブなユーザー、ロックされたユーザー、未登録ユーザーの削除 // // 下記にテストのスケルトンを示します。 // 実際にテストを行う場合は、これらの点を考慮したモック戦略とアサーションが必要です。 // // 注意:ユーザー削除は重大な操作であり、元に戻せない可能性があるため、テストは慎重に。 }); }); }); // Example of how a test might look if it were enabled: /* import config from '../../../config.js'; import { RedmineApiError } from '../../../client/base.js'; import { mockErrorResponse } from '../../helpers/mocks.js'; import * as fixtures from '../../helpers/fixtures.js'; it("deletes a user successfully", async () => { // Arrange const userIdToDelete = fixtures.singleUserResponse.user.id; // Assuming you have a fixture for a user to delete mockFetch.mockImplementationOnce(() => Promise.resolve(new Response(null, { status: 204 })) ); // Act await client.deleteUser(userIdToDelete); // Assert expect(mockFetch).toHaveBeenCalledWith( `${config.redmineUrl}/users/${userIdToDelete}.json`, expect.objectContaining({ method: "DELETE", headers: expect.objectContaining({ "X-Redmine-API-Key": config.apiKey, }), }) ); }); it("handles error when trying to delete a non-existent user", async () => { // Arrange const userIdToDelete = 99999; // Non-existent ID mockFetch.mockImplementationOnce(() => Promise.resolve(mockErrorResponse(404, ["User not found"])) ); // Act & Assert await expect(client.deleteUser(userIdToDelete)).rejects.toThrow(RedmineApiError); }); // Add tests for trying to delete self, deleting users with assigned issues (if behavior is specific), etc. */

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yonaka15/mcp-server-redmine'

If you have feedback or need assistance with the MCP directory API, please join our Discord server