wiremock / wiremock-graphql-extension

GraphQL extension for WireMock
MIT License
22 stars 3 forks source link

Added wiremock extension for remote servers #1

Closed yyYank closed 1 year ago

yyYank commented 1 year ago

Added wiremock extension for remote servers.

Motivation

When using the wiremock Docker image, wiremock is started as a remote server. The current implementation of extensions in this repository only supports local invocation of wiremock (eg within a test runner). We want to use this extension on our wiremock remote server as well.

What changes did you make?

About what we tested

fun registerGraphQLWiremock(endpoint: String, token: String, request: Request, responseJson: String) { post(urlPathEqualTo(endPoint)) .withQueryParam("access_token", matching(token)) .andMatching("graphql-body-matcher", Parameters.one("expectedQuery", Json.encodeToString(request))) .willReturn( aResponse() .withStatus(200) .withBody(responseJson) .withHeader("Content-Type", "application/json; charset=utf-8") ).let(mock::register) }

- run test

powered by Google Translate

------

# [日本語] リモートサーバー用のワイヤーモック拡張機能を追加

## モチベーション

wiremockのDockerイメージを使う場合、wiremockはリモートサーバーとして起動します。
現在のこのリポジトリのエクステンション実装はwiremockのローカル起動(例テストランナー内での起動)の場合のみしかサポートしていません。我々はwiremockのリモートサーバーでもこのエクステンションを使用したいです。

## どのような変更をあなたは加えました?

- GraphqlBodyMatcherのmatchメソッドで`parameters: Parameter` をチェックするようにしました(これにより、リモートサーバーはParameterを介してローカルのクライアントとコミュニケーション出来ます)
- jvmTargetを1.8にしました。これは、wiremockのimageがjre8を前提としているため実行環境での互換性のためです :)
- maven-assembly-pluginを追加しました。これにより、`mvn package`実行時に依存関係を全て含んだjarを作成します。これの理由は、remoteのwiremockサーバーに認識させるのに都合が良いためです
- ユニットテストがPASSしたかったので、変更をしました(`mockk<Parameter>`)

## テストした内容について

- `maven package`
- docker上で、wiremockにjarを含めてコンテナ起動
```bash
FROM wiremock/wiremock:latest-alpine
COPY ./wiremock-graphql-extension-0.3.0-jar-with-dependencies.jar /var/wiremock/extensions/wiremock-graphql-extension-0.3.0-jar-with-dependencies.jar
CMD ["--verbose", "--enable-stub-cors", "--extensions", "io.github.nilwurtz.GraphqlBodyMatcher"]

fun registerGraphQLWiremock(endpoint: String, token: String, request: Request, responseJson: String) { post(urlPathEqualTo(endPoint)) .withQueryParam("access_token", matching(token)) .andMatching("graphql-body-matcher", Parameters.one("expectedQuery", Json.encodeToString(request))) .willReturn( aResponse() .withStatus(200) .withBody(responseJson) .withHeader("Content-Type", "application/json; charset=utf-8") ).let(mock::register) }


- テストを実行してPASS
nilwurtz commented 1 year ago

Thanks ;)