问题描述
我有一个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\",\"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\",\"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实现来使其工作,以接受map
并将日期用作其值。
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);
}