java - 如何更新 JVM PACT 合同中帖子参数的动态日期?
问题描述
我有一个 POST 请求,它将日期作为我的合同文件中的参数进行 PACT 测试。
return builder
.uponReceiving("A request to create a Zoom meeting")
.path(createMeeting)
.method("POST")
.headers(headers)
.body("{\"title\":\"My title\",\"start_time\":\"2020-08-28T14:30:00Z+01:00\",\"duration\":30,\"provider\":\"ZOOM\"}")
.willRespondWith()
.body(body)
.toPact();
但我希望这是动态的,可能有今天或明天的日期,否则它会有一个过期的日期。你能否就如何做到这一点提出建议,如果可能的话,不要让消费者看到它。
这些都是我要求的消费者和提供者样本。
消费者
@ExtendWith(PactConsumerTestExt.class)
public class PACTConsumerEdUiVcTest {
Map<String, String> headers = new HashMap<>();
String createMeeting = "/manage/create-meeting";
@Pact(provider = VC, consumer = ED_UI)
public RequestResponsePact createPact(PactDslWithProvider builder) {
headers.put("Content-Type", "application/json");
DslPart body = new PactDslJsonBody()
.date("start_time", "yyyy-MM-dd'T'HH:mm:ss.000'Z'", new Date());
return builder
.uponReceiving("A request to create a Zoom meeting")
.path(createMeeting)
.method("POST")
.headers(headers)
.body("{\"title\":\"My title\",\"start_time\":\"2020-08-28T14:30:00Z+01:00\",\"duration\":30,\"provider\":\"ZOOM\"}")
.willRespondWith()
.body(body)
.toPact();
}
@Test
@PactTestFor(providerName = VC, port = "8080")
public void runTest() {
//Mock url
RestAssured.baseURI = "http://localhost:8080";
Response response = RestAssured //todo: dynamic start time that won't expire. 27/08/2020
.given()
.headers(headers)
.when()
.body("{\"title\":\"My title\",\"start_time\":\"2020-08-28T14:30:00Z+01:00\",\"duration\":30,\"provider\":\"ZOOM\"}")
.post(createMeeting);
assert (response.getStatusCode() == 200);
}
}
提供者
@Provider(VC)
@PactFolder("target/pacts")
public class PactProviderEdUiVcTest {
@TestTemplate
@ExtendWith(PactVerificationInvocationContextProvider.class)
void pactTestTemplate(PactVerificationContext context, HttpRequest request) {
request.addHeader("Authorization", AUTHORIZATION_TOKEN);
context.verifyInteraction();
}
@BeforeEach
void before(PactVerificationContext context) {
context.setTarget(new HttpsTestTarget(BASE_PACT_VC_URL, 443, "/"));
getAuthorizationToken(UserType.TEACHER);
}
@State("A request to create a Zoom meeting")
public void sampleState() {
}
}
非常感谢。
解决方案
能够使其工作更改 RestAssured 实现以接受 amap
并将日期用作其值。
map.put("start_time", new Date().toString());
这里是完整的部分。
@Test
@PactTestFor(providerName = VC, port = "8080")
public void runTest() {
//Mock url
RestAssured.baseURI = "http://localhost:8080";
Map<String, Object> map = new HashMap<>();
map.put("title", "MyTitle");
map.put("start_time", new Date().toString());
map.put("duration", 30);
map.put("provider", "ZOOM");
Response response = RestAssured //todo: dynamic start time that won't expire. 27/08/2020
.given()
.headers(headers)
.when()
.body(map)
.post(createMeeting);
assert (response.getStatusCode() == 200);
}
推荐阅读
- xml - 在 .NET 中将子 XML 元素反序列化为 XML 字符串
- reactjs - React-add-msal getAccessToken 无法从缓存中加载
- sql-server - 从一列分配到另一列的拣货数量
- eclipse - Jitsi VideoBridge 使用 eclipse 调试
- regex - ORACLE 正则表达式 匹配具有两个或多个字符的电子邮件域
- python - 将列表转移到困难的分层字典
- c# - 将 Visual Studio 调试器与在 Kubernetes 中运行的 ASP.NET Core Web 应用程序一起使用?
- html - 如何将一个 div 粘贴到右上角?
- wpf - 帐户仅限于 google Classroom API
- typescript - Nest 无法解析 crudServices 的依赖