Skip to content

Commit 9e38f90

Browse files
committed
feat: add mockserver module
1 parent ba73759 commit 9e38f90

File tree

8 files changed

+709
-29
lines changed

8 files changed

+709
-29
lines changed

package-lock.json

Lines changed: 566 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import type { Config } from "jest";
2+
import * as path from "path";
3+
4+
const config: Config = {
5+
preset: "ts-jest",
6+
moduleNameMapper: {
7+
"^testcontainers$": path.resolve(__dirname, "../../testcontainers/src"),
8+
},
9+
};
10+
11+
export default config;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"name": "@testcontainers/mockserver",
3+
"version": "10.16.0",
4+
"description": "Mockserver module for Testcontainers",
5+
"main": "build/index.js",
6+
"devDependencies": {
7+
"@types/superagent": "^8.1.9",
8+
"mockserver-client": "^5.15.0",
9+
"superagent": "^10.1.1"
10+
},
11+
"scripts": {
12+
"prepack": "shx cp ../../../README.md . && shx cp ../../../LICENSE .",
13+
"build": "tsc --project tsconfig.build.json"
14+
},
15+
"repository": {
16+
"type": "git",
17+
"url": "git+https://github.com/testcontainers/testcontainers-node.git"
18+
},
19+
"files": [
20+
"build"
21+
],
22+
"keywords": [
23+
"mockserver",
24+
"testing",
25+
"docker",
26+
"testcontainers"
27+
],
28+
"license": "MIT",
29+
"bugs": {
30+
"url": "https://github.com/testcontainers/testcontainers-node/issues"
31+
},
32+
"homepage": "https://github.com/testcontainers/testcontainers-node#readme",
33+
"publishConfig": {
34+
"access": "public"
35+
},
36+
"dependencies": {
37+
"testcontainers": "^10.16.0"
38+
}
39+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { MockserverContainer, StartedMockserverContainer } from "./mockserver-container";
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { mockServerClient } from "mockserver-client";
2+
import superagent from "superagent";
3+
import { MockserverContainer } from "./mockserver-container";
4+
5+
describe.only("MockserverContainer", () => {
6+
jest.setTimeout(240_000);
7+
8+
it("should start and accept mocks", async () => {
9+
const container = await new MockserverContainer().start();
10+
const client = mockServerClient(container.getHost(), container.getMockserverPort());
11+
const url = container.getUrl();
12+
13+
await client.mockAnyResponse({
14+
httpRequest: {
15+
method: "GET",
16+
path: "/foo",
17+
},
18+
httpResponse: {
19+
body: {
20+
string: "bar",
21+
},
22+
statusCode: 200,
23+
},
24+
});
25+
26+
const response = await superagent.get(`${url}/foo`);
27+
28+
expect(response.statusCode).toBe(200);
29+
expect(response.text).toBe("bar");
30+
});
31+
});
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { AbstractStartedContainer, GenericContainer, Wait } from "testcontainers";
2+
3+
export class StartedMockserverContainer extends AbstractStartedContainer {
4+
getMockserverPort(): number {
5+
return this.getFirstMappedPort();
6+
}
7+
8+
getUrl(): string {
9+
return `http://${this.getHost()}:${this.getFirstMappedPort()}`;
10+
}
11+
}
12+
13+
const MOCKSERVER_PORT = 1080;
14+
15+
export class MockserverContainer extends GenericContainer {
16+
constructor(image = "mockserver/mockserver:5.15.0") {
17+
super(image);
18+
19+
this.withWaitStrategy(Wait.forAll([Wait.forLogMessage(/started on port: 1080/)])).withStartupTimeout(120_000);
20+
}
21+
22+
override async start(): Promise<StartedMockserverContainer> {
23+
this.withExposedPorts(MOCKSERVER_PORT);
24+
25+
return new StartedMockserverContainer(await super.start());
26+
}
27+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"extends": "./tsconfig.json",
3+
"exclude": [
4+
"build",
5+
"jest.config.ts",
6+
"src/**/*.test.ts"
7+
],
8+
"references": [
9+
{
10+
"path": "../../testcontainers"
11+
}
12+
]
13+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"extends": "../../../tsconfig.base.json",
3+
"compilerOptions": {
4+
"rootDir": "src",
5+
"outDir": "build",
6+
"paths": {
7+
"testcontainers": [
8+
"../../testcontainers/src"
9+
]
10+
}
11+
},
12+
"exclude": [
13+
"build",
14+
"jest.config.ts"
15+
],
16+
"references": [
17+
{
18+
"path": "../../testcontainers"
19+
}
20+
]
21+
}

0 commit comments

Comments
 (0)