chore: add arg validation test coverage #83
code-health.yml
on: pull_request
Matrix: Run MongoDB tests
Run Atlas tests
2m 10s
Report Coverage
47s
Annotations
8 errors and 7 warnings
|
Run Atlas tests
Process completed with exit code 1.
|
|
tests/integration/tools/atlas/clusters.test.ts > clusters > with project > atlas-connect-cluster:
src/common/atlas/apiClientError.ts#L31
ApiClientError: [404 Not Found] error calling Atlas API: Not Found; No cluster named ClusterTest-68e6c871fdc1e4920d58dc4d exists in group 68e6c8726c3035253f427369.
❯ Function.fromError src/common/atlas/apiClientError.ts:31:16
❯ ApiClient.getCluster src/common/atlas/apiClient.ts:427:34
❯ waitCluster tests/integration/tools/atlas/clusters.test.ts:58:25
❯ tests/integration/tools/atlas/clusters.test.ts:195:17
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { response: { size: +0, constructor: 'Function<Response>', type: 'default', url: 'https://cloud-dev.mongodb.com/api/atlas/v2/groups/68e6c8726c3035253f427369/clusters/ClusterTest-68e6c871fdc1e4920d58dc4d', status: 404, ok: false, redirected: false, statusText: 'Not Found', headers: { constructor: 'Function<Headers>', toString: 'Function<toString>', get: 'Function<get>', forEach: 'Function<forEach>', values: 'Function<values>', entries: 'Function<entries>', raw: 'Function<raw>', size: '<unserializable>: Value of "this" must be of type URLSearchParams', append: 'Function<anonymous>', delete: 'Function<anonymous>', getAll: 'Function<anonymous>', has: 'Function<anonymous>', set: 'Function<anonymous>', sort: 'Function<sort>', keys: 'Function<anonymous>' }, highWaterMark: 16384, clone: 'Function<clone>', body: { _events: { close: [ 'Function<anonymous>', 'Function<anonymous>', 'Function<onclose>' ], error: [ 'Function<anonymous>', 'Function<onerror>' ], prefinish: 'Function<prefinish>', finish: 'Function<onfinish>', drain: undefined, data: undefined, end: 'Function<onend>', readable: 'Function<next>', unpipe: undefined }, _readableState: { highWaterMark: 65536, buffer: [], bufferIndex: +0, length: +0, pipes: [], awaitDrainWriters: null, constructor: 'Function<ReadableState>', objectMode: false, ended: true, endEmitted: true, reading: false, constructed: true, sync: false, needReadable: false, emittedReadable: false, readableListening: true, resumeScheduled: false, errorEmitted: false, emitClose: true, autoDestroy: true, destroyed: true, closed: true, closeEmitted: true, multiAwaitDrain: false, readingMore: false, dataEmitted: true, errored: null, defaultEncoding: 'utf8', decoder: null, encoding: null, flowing: false, pipesCount: +0, paused: false }, _writableState: { highWaterMark: 65536, length: +0, corked: +0, onwrite: 'Function<bound onwrite>', writelen: +0, bufferedIndex: +0, pendingcb: +0, constructor: 'Function<WritableState>', objectMode: false, finalCalled: true, needDrain: false, ending: true, ended: true, finished: true, destroyed: true, decodeStrings: true, writing: false, sync: false, bufferProcessing: false, constructed: true, prefinished: true, errorEmitted: false, emitClose: true, autoDestroy: true, closed: true, closeEmitted: true, allBuffers: true, allNoop: true, errored: null, writable: undefined, defaultEncoding: 'utf8', writecb: 'Function<nop>', afterWriteTickInfo: null, buffered: [], getBuffer: 'Function<getBuffer>', bufferedRequestCount: +0 }, allowHalfOpen: true, _maxListeners: undefined, _eventsCount: 6, constructor: 'Function<PassThrough>', _transform: 'Function<anonymous>', _final: 'Function<final>', _write: 'Function<anonymous>', _read: 'Function<anonymous>', write: 'Function<anonymous>', cork: 'Function<anonymous>', uncork: 'Function<anonymous>', setDefaultEncoding: 'Function<setDefaultEncoding>', _writev: null, end: 'Function<anonymous>', destroy: 'Function<anonymous>', writable: false, writableHighWaterMark: 65536, writableObjectMode: false, writableBuffer: [], writableLength: +0, writableFinished: true, writableCorked: +0, writableEnded: true, writableNeedDrain: false, destroyed: true, _undestroy: 'Function<undestroy>', _destroy: 'Function<anonymous>', push: 'Function<anonymous>', unshift: 'Function<anonymous>', isPaused: 'Function<anonymous>', setEncoding: 'Function<anonymous>', read: 'Function<anonymous>', pipe: 'Function<anonymous>', unpipe: 'Function<anonymous>', on: 'Function<anonymous>', addListener: 'Function<anonymous>', removeListener: 'Function<anonymous>', off: 'Function<anonymous>', removeAllListeners: 'Function<anonymous>', resume
|
|
tests/integration/tools/atlas/clusters.test.ts > clusters > with project > atlas-list-clusters > returns clusters by project:
tests/integration/tools/atlas/clusters.test.ts#L181
AssertionError: expected [ { type: 'text', …(1) } ] to have a length of 2 but got 1
- Expected
+ Received
- 2
+ 1
❯ tests/integration/tools/atlas/clusters.test.ts:181:34
|
|
tests/integration/tools/atlas/clusters.test.ts > clusters > with project > atlas-inspect-cluster > returns cluster data:
tests/integration/tools/atlas/clusters.test.ts#L156
AssertionError: expected [ { type: 'text', …(1) } ] to have a length of 2 but got 1
- Expected
+ Received
- 2
+ 1
❯ tests/integration/tools/atlas/clusters.test.ts:156:34
|
|
tests/integration/tools/atlas/clusters.test.ts > clusters > with project > atlas-create-free-cluster > should create a free cluster and add current IP to access list:
tests/integration/inMemoryTransport.ts#L24
McpError: MCP error -32602: MCP error -32602: Invalid arguments for tool atlas-create-free-cluster: [
{
"code": "invalid_type",
"expected": "string",
"received": "undefined",
"path": [
"clusterName"
],
"message": "Required"
}
]
❯ Client._onresponse node_modules/@modelcontextprotocol/sdk/src/shared/protocol.ts:450:27
❯ InMemoryTransport._transport.onmessage node_modules/@modelcontextprotocol/sdk/src/shared/protocol.ts:295:22
❯ Object.write tests/integration/inMemoryTransport.ts:24:44
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: -32602, data: undefined }
|
|
tests/integration/tools/atlas/clusters.test.ts > clusters > with project > atlas-create-free-cluster > should have correct metadata:
tests/integration/tools/atlas/clusters.test.ts#L107
AssertionError: expected { projectId: { …(5) }, …(2) } to have property "name"
❯ tests/integration/tools/atlas/clusters.test.ts:107:66
|
|
tests/integration/tools/atlas/clusters.test.ts > clusters > with project:
src/common/atlas/apiClientError.ts#L31
ApiClientError: [404 Not Found] error calling Atlas API: Not Found; No cluster named ClusterTest-68e6c871fdc1e4920d58dc4d exists in group 68e6c8726c3035253f427369.
❯ Function.fromError src/common/atlas/apiClientError.ts:31:16
❯ ApiClient.deleteCluster src/common/atlas/apiClient.ts:416:34
❯ deleteCluster tests/integration/tools/atlas/clusters.test.ts:21:5
❯ tests/integration/tools/atlas/clusters.test.ts:94:17
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { response: { size: +0, constructor: 'Function<Response>', type: 'default', url: 'https://cloud-dev.mongodb.com/api/atlas/v2/groups/68e6c8726c3035253f427369/clusters/ClusterTest-68e6c871fdc1e4920d58dc4d', status: 404, ok: false, redirected: false, statusText: 'Not Found', headers: { constructor: 'Function<Headers>', toString: 'Function<toString>', get: 'Function<get>', forEach: 'Function<forEach>', values: 'Function<values>', entries: 'Function<entries>', raw: 'Function<raw>', size: '<unserializable>: Value of "this" must be of type URLSearchParams', append: 'Function<anonymous>', delete: 'Function<anonymous>', getAll: 'Function<anonymous>', has: 'Function<anonymous>', set: 'Function<anonymous>', sort: 'Function<sort>', keys: 'Function<anonymous>' }, highWaterMark: 16384, clone: 'Function<clone>', body: { _events: { close: [ 'Function<anonymous>', 'Function<anonymous>', 'Function<onclose>' ], error: [ 'Function<anonymous>', 'Function<onerror>' ], prefinish: 'Function<prefinish>', finish: 'Function<onfinish>', drain: undefined, data: undefined, end: 'Function<onend>', readable: 'Function<next>', unpipe: undefined }, _readableState: { highWaterMark: 65536, buffer: [], bufferIndex: +0, length: +0, pipes: [], awaitDrainWriters: null, constructor: 'Function<ReadableState>', objectMode: false, ended: true, endEmitted: true, reading: false, constructed: true, sync: false, needReadable: false, emittedReadable: false, readableListening: true, resumeScheduled: false, errorEmitted: false, emitClose: true, autoDestroy: true, destroyed: true, closed: true, closeEmitted: true, multiAwaitDrain: false, readingMore: false, dataEmitted: true, errored: null, defaultEncoding: 'utf8', decoder: null, encoding: null, flowing: false, pipesCount: +0, paused: false }, _writableState: { highWaterMark: 65536, length: +0, corked: +0, onwrite: 'Function<bound onwrite>', writelen: +0, bufferedIndex: +0, pendingcb: +0, constructor: 'Function<WritableState>', objectMode: false, finalCalled: true, needDrain: false, ending: true, ended: true, finished: true, destroyed: true, decodeStrings: true, writing: false, sync: false, bufferProcessing: false, constructed: true, prefinished: true, errorEmitted: false, emitClose: true, autoDestroy: true, closed: true, closeEmitted: true, allBuffers: true, allNoop: true, errored: null, writable: undefined, defaultEncoding: 'utf8', writecb: 'Function<nop>', afterWriteTickInfo: null, buffered: [], getBuffer: 'Function<getBuffer>', bufferedRequestCount: +0 }, allowHalfOpen: true, _maxListeners: undefined, _eventsCount: 6, constructor: 'Function<PassThrough>', _transform: 'Function<anonymous>', _final: 'Function<final>', _write: 'Function<anonymous>', _read: 'Function<anonymous>', write: 'Function<anonymous>', cork: 'Function<anonymous>', uncork: 'Function<anonymous>', setDefaultEncoding: 'Function<setDefaultEncoding>', _writev: null, end: 'Function<anonymous>', destroy: 'Function<anonymous>', writable: false, writableHighWaterMark: 65536, writableObjectMode: false, writableBuffer: [], writableLength: +0, writableFinished: true, writableCorked: +0, writableEnded: true, writableNeedDrain: false, destroyed: true, _undestroy: 'Function<undestroy>', _destroy: 'Function<anonymous>', push: 'Function<anonymous>', unshift: 'Function<anonymous>', isPaused: 'Function<anonymous>', setEncoding: 'Function<anonymous>', read: 'Function<anonymous>', pipe: 'Function<anonymous>', unpipe: 'Function<anonymous>', on: 'Function<anonymous>', addListener: 'Function<anonymous>', removeListener: 'Function<anonymous>', off: 'Function<anonymous>', removeAllListeners: 'Function<anonymous>', res
|
|
Report Coverage
Unable to download artifact(s): Artifact not found for name: atlas-test-results
Please ensure that your artifact is not expired and the artifact was uploaded using a compatible version of toolkit/upload-artifact.
For more information, visit the GitHub Artifacts FAQ: https://github.com/actions/toolkit/blob/main/packages/artifact/docs/faq.md
|
|
Run Atlas tests
No files were found with the provided path: coverage/lcov.info. No artifacts will be uploaded.
|
|
Run Atlas tests
1 added, 0 removed; done.
|
|
Run Atlas tests
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
|
|
Run Atlas tests
Updating certificates in /etc/ssl/certs...
|
|
Run MongoDB tests (ubuntu-latest)
1 added, 0 removed; done.
|
|
Run MongoDB tests (ubuntu-latest)
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
|
|
Run MongoDB tests (ubuntu-latest)
Updating certificates in /etc/ssl/certs...
|
Artifacts
Produced during runtime
| Name | Size | Digest | |
|---|---|---|---|
|
run-atlas-tests-permissions-ac32b021175a0c02b7e593e5e50c397a
|
140 Bytes |
sha256:0f4581f509e08b12bcd83dca1936c6aea9f93501d72210c35347c834626c69d2
|
|
|
run-tests-permissions-987dac772d40d62caa6a7158db2f8694
|
140 Bytes |
sha256:7574807cf51aa21fc6642fc8b22ebe4a554d9ef0d5f51b48a86d7fb839f3c75c
|
|
|
test-results
|
23.9 KB |
sha256:87359e5b9142239f3a787207441b815a024a0042dc5f47ad81fd4e15b8ee675f
|
|