Для серверной части моего приложения Angular я использую REST-assured и JUnit для написания моего первого интеграционного теста для моей страницы входа.
Каждый раз, когда я запускаю тест, он возвращает код состояния «401» вместо «200». У меня уже есть файл json, содержащий мои данные для входа, которые я использовал с WireMock для общения с моим приложением Angular.
Я думаю, что это не так, потому что я неправильно преобразовал json в REST-гарантированный. Я пробовал несколько решений, которые я нашел на inte rnet, но у него есть еще не работает ..
Редактировать: Код состояния опечатки был '403', правильный - '401'.
Успешный вход. json:
{
"request": {
"method": "POST",
"url": "/api/login",
"bodyPatterns": [
{
"matchesJsonPath": "[?(@.username=='john@test.com')]"
},
{
"matchesJsonPath": "[?(@.password=='test1234')]"
}
]
},
"response": {
"status": 200,
"jsonBody": {
"token": "fD0wUDRdJOFIoUlAAAAaS2XStSvewARajwx7lTE"
}
}
}
LoginTestDataService. java:
final User user = User.builder()
.firstName("John")
.lastName("Doe")
.email("john@test.com")
.mobileNumber("+31642424345")
.gender(Gender.MALE)
.dateOfBirth(new Date())
.city("Den Haag")
.country("NL")
.street("Hogestraat")
.houseNumber(115L)
.zipCode("1725TA")
.password("asdf;laksjf")
.singleUseAccount(Boolean.FALSE)
.created(new Date())
.createdBy("John Doe")
.build();
userRepository.saveAndFlush(user);
LoginResourceIntegrationTest. java:
@Test
public void loginResource() {
given()
.when()
.log()
.all()
.basePath("/api/company")
.header("X-Token", "TOKEN")
.header("X-Username", "john@test.com")
.post("/login")
.then()
.log()
.all()
.assertThat()
.statusCode(200);
}
MemberLoginResource:
@POST
public Response login(@FormParam("username") final String username, @FormParam("password") final String password) {
final Authentication authentication = apiLoginManager.loginMember(username, password);
final Member member = authentication.getMember();
String email = null;
final String originalEmail = member.getEmail();
if (StringUtils.isNotBlank(originalEmail)) {
email = originalEmail.toLowerCase();
}
final ClientMember clientMember = ClientMember.builder()
.id(member.getId())
.firstName(member.getFirstName())
.lastName(member.getLastName())
.usualName(member.getUsualName())
.gender(member.getGender())
.initials(member.getInitials())
.dateOfBirth(member.getDateOfBirth())
.street(member.getStreet())
.houseNumber(member.getHouseNumber())
.houseNumberExt(member.getHouseNumberExtension())
.zipCode(member.getZipCode())
.city(member.getCity())
.phoneNumber(member.getPhoneNumber())
.country(member.getCountry())
.mobileNumber(member.getMobileNumber())
.pictureDate(member.getPictureDate())
.email(email)
.build();
final ApiAuthentication apiAuthentication = new ApiAuthenticationBuilder()
.withToken(authentication.getApiToken().getToken())
.withMember(clientMember)
.build();
return Response.ok(apiAuthentication).build();
}
Вывод в консоль:
Request method: POST
Request URI: http://localhost:51525/api/company/login
Proxy: <none>
Request params: <none>
Query params: <none>
Form params: <none>
Path params: <none>
Headers: X-Token=TOKEN
X-Username=john@test.com
Accept=*/*
Content-Type=application/x-www-form-urlencoded; charset=ISO-8859-1
Cookies: <none>
Multiparts: <none>
Body: <none>
Пожалуйста, дайте мне знать, если вам нужно увидеть больше журналов.
Как я уже упоминал выше, с помощью интеграционного теста я хочу войти в систему и ожидать возврата statusCode '200', который в этот случай означает, что логин сработал.