blob: e2759b6368dc78d07be6dfdaa5d2f96eed737e5c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package org.apache.hugegraph.api;
import java.util.List;
import java.util.Map;
import jakarta.ws.rs.core.Response;
import org.apache.tinkerpop.shaded.jackson.core.type.TypeReference;
import org.hamcrest.CoreMatchers;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.apache.hugegraph.util.JsonUtil;
import com.google.common.collect.ImmutableMap;
public class UserApiTest extends BaseApiTest {
private static final String PATH = "graphs/hugegraph/auth/users";
private static final int NO_LIMIT = -1;
@Override
@After
public void teardown() throws Exception {
super.teardown();
Response r = this.client().get(PATH,
ImmutableMap.of("limit", NO_LIMIT));
String result = r.readEntity(String.class);
Map<String, List<Map<String, Object>>> resultMap =
JsonUtil.fromJson(result,
new TypeReference<Map<String,
List<Map<String, Object>>>>() {});
List<Map<String, Object>> users = resultMap.get("users");
for (Map<String, Object> user : users) {
if (user.get("user_name").equals("admin")) {
continue;
}
this.client().delete(PATH, (String) user.get("id"));
}
}
@Test
public void testCreate() {
String user1 = "{\"user_name\":\"user1\",\"user_password\":\"p1\"," +
"\"user_email\":\"user1@baidu.com\",\"user_phone\":" +
"\"123456789\",\"user_avatar\":\"image1.jpg\"}";
String user2 = "{\"user_name\":\"user2\",\"user_password\":\"p2\"," +
"\"user_email\":\"user2@baidu.com\"," +
"\"user_phone\":\"1357924680\"," +
"\"user_avatar\":\"image2.jpg\"}";
Response r = client().post(PATH, user1);
String result = assertResponseStatus(201, r);
Response r2 = client().post(PATH, user2);
String result2 = assertResponseStatus(201, r2);
assertJsonContains(result, "user_name");
assertJsonContains(result, "user_password");
assertJsonContains(result, "user_email");
assertJsonContains(result, "user_phone");
assertJsonContains(result, "user_avatar");
assertJsonContains(result2, "user_name");
assertJsonContains(result2, "user_password");
assertJsonContains(result2, "user_email");
assertJsonContains(result2, "user_phone");
assertJsonContains(result2, "user_avatar");
Response r3 = client().post(PATH, "{}");
assertResponseStatus(400, r3);
String user3 = "{\"user_name\":\"user1\",\"user_password\":\"p1\"," +
"\"user_email\":\"user1@baidu.com\"," +
"\"user_phone\":\"123456789\",\"user_avatar\":\"image1" +
".jpg\"}";
Response r4 = client().post(PATH, user3);
String result4 = assertResponseStatus(400, r4);
String message = assertJsonContains(result4, "message");
Assert.assertThat(message,
CoreMatchers.containsString("that already exists"));
}
@Test
public void testList() {
createUser("test1");
createUser("test2");
createUser("test3");
List<Map<String, Object>> users = listUsers();
Assert.assertEquals(4, users.size());
}
@Test
public void testGetUser() {
createUser("test1");
createUser("test2");
List<Map<String, Object>> users = listUsers();
for (Map<String, Object> user : users) {
Response r = client().get(PATH, (String) user.get("id"));
String result = assertResponseStatus(200, r);
assertJsonContains(result, "user_name");
}
}
@Test
public void testUpdate() {
createUser("test1");
createUser("test2");
List<Map<String, Object>> users = listUsers();
for (Map<String, Object> user : users) {
if (user.get("user_name").equals("admin")) {
continue;
}
String user1 = "{\"user_password\":\"p1\"," +
"\"user_email\":\"user1@baidu.com\"," +
"\"user_phone\":\"111111\"," +
"\"user_avatar\":\"image1" +
".jpg\"}";
Response r = client().put(PATH, (String) user.get("id"), user1,
ImmutableMap.of());
assertResponseStatus(200, r);
}
}
@Test
public void testDelete() {
createUser("test1");
createUser("test2");
createUser("test3");
List<Map<String, Object>> users = listUsers();
for (Map<String, Object> user : users) {
if (user.get("user_name").equals("admin")) {
continue;
}
Response r = client().delete(PATH, (String) user.get("id"));
assertResponseStatus(204, r);
}
Response r = client().delete(PATH, "test1");
String result = assertResponseStatus(400, r);
String message = assertJsonContains(result, "message");
Assert.assertThat(message,
CoreMatchers.containsString("Invalid user id:"));
}
protected void createUser(String name) {
String user = "{\"user_name\":\"" + name + "\",\"user_password\":\"p1" +
"\", \"user_email\":\"user1@baidu.com\"," +
"\"user_phone\":\"123456789\",\"user_avatar\":\"image1" +
".jpg\"}";
Response r = this.client().post(PATH, user);
assertResponseStatus(201, r);
}
protected List<Map<String, Object>> listUsers() {
Response r = this.client().get(PATH, ImmutableMap.of("limit",
NO_LIMIT));
String result = assertResponseStatus(200, r);
Map<String, List<Map<String, Object>>> resultMap =
JsonUtil.fromJson(result, new TypeReference<Map<String,
List<Map<String, Object>>>>() {});
return resultMap.get("users");
}
}