/* * Copyright 2017 HugeGraph Authors * * 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 com.baidu.hugegraph.api; import java.io.IOException; import javax.ws.rs.core.Response; import org.junit.Before; import org.junit.Test; import com.baidu.hugegraph.testutil.Assert; import com.google.common.collect.ImmutableMap; public class EdgeApiTest extends BaseApiTest { private static String path = "/graphs/hugegraph/graph/edges/"; @Before public void prepareSchema() { BaseApiTest.initPropertyKey(); BaseApiTest.initVertexLabel(); BaseApiTest.initEdgeLabel(); BaseApiTest.initVertex(); } @Test public void testCreate() throws IOException { String outVId = getVertexId("person", "name", "peter"); String inVId = getVertexId("software", "name", "lop"); String edge = String.format("{" + "\"label\": \"created\"," + "\"outVLabel\": \"person\"," + "\"inVLabel\": \"software\"," + "\"outV\": \"%s\"," + "\"inV\": \"%s\"," + "\"properties\":{" + "\"date\": \"20170324\"," + "\"weight\": 0.5}" + "}", outVId, inVId); Response r = client().post(path, edge); assertResponseStatus(201, r); } @Test public void testBatchUpdate() throws IOException { String outVId = getVertexId("person", "name", "marko"); String inVId = getVertexId("person", "name", "josh"); // Create String edge = String.format("{" + "\"label\": \"knows\"," + "\"outVLabel\": \"person\"," + "\"inVLabel\": \"person\"," + "\"outV\": \"%s\"," + "\"inV\": \"%s\"," + "\"properties\":{" + "\"date\": \"2013-02-20\"," + "\"weight\": 1.0}" + "}", outVId, inVId); Response r = client().post(path, edge); // The edge id is 'S1:marko>1>7JooBil0>S1:josh' String content = assertResponseStatus(201, r); String edgeId = parseId(content); // Update edge with edgeId edge = String.format("{" + "\"edges\":[" + "{" + "\"id\":\"%s\"," + "\"label\":\"knows\"," + "\"outV\":\"%s\"," + "\"outVLabel\":\"person\"," + "\"inV\":\"%s\"," + "\"inVLabel\":\"person\"," + "\"properties\":{" + "\"weight\":0.2," + "\"date\":\"2014-02-20\"" + "}" + "}" + "]," + "\"update_strategies\":{" + "\"weight\":\"SUM\"," + "\"date\":\"BIGGER\"" + "}," + "\"check_vertex\":false," + "\"create_if_not_exist\":true" + "}", edgeId, outVId, inVId); r = client().put(path, "batch", edge, ImmutableMap.of()); // Now allowed to modify sortkey values, the property 'date' has changed content = assertResponseStatus(400, r); Assert.assertTrue(content.contains( "either be null or equal to origin when " + "specified edge id")); // Update edge without edgeId edge = String.format("{" + "\"edges\":[" + "{" + "\"label\":\"knows\"," + "\"outV\":\"%s\"," + "\"outVLabel\":\"person\"," + "\"inV\":\"%s\"," + "\"inVLabel\":\"person\"," + "\"properties\":{" + "\"weight\":0.2," + "\"date\":\"2014-02-20\"" + "}" + "}" + "]," + "\"update_strategies\":{" + "\"weight\":\"SUM\"," + "\"date\":\"BIGGER\"" + "}," + "\"check_vertex\":false," + "\"create_if_not_exist\":true" + "}", outVId, inVId); r = client().put(path, "batch", edge, ImmutableMap.of()); // Add a new edge when sortkey value has changed content = assertResponseStatus(200, r); String newEdgeId = parseId(content); Assert.assertNotEquals(newEdgeId, edgeId); } @Test public void testGet() throws IOException { String outVId = getVertexId("person", "name", "peter"); String inVId = getVertexId("software", "name", "lop"); String edge = String.format("{" + "\"label\": \"created\"," + "\"outVLabel\": \"person\"," + "\"inVLabel\": \"software\"," + "\"outV\": \"%s\"," + "\"inV\": \"%s\"," + "\"properties\":{" + "\"date\": \"20170324\"," + "\"weight\": 0.5}" + "}", outVId, inVId); Response r = client().post(path, edge); String content = assertResponseStatus(201, r); String id = parseId(content); r = client().get(path, id); assertResponseStatus(200, r); } @Test public void testList() throws IOException { String outVId = getVertexId("person", "name", "peter"); String inVId = getVertexId("software", "name", "lop"); String edge = String.format("{" + "\"label\": \"created\"," + "\"outVLabel\": \"person\"," + "\"inVLabel\": \"software\"," + "\"outV\": \"%s\"," + "\"inV\": \"%s\"," + "\"properties\":{" + "\"date\": \"20170324\"," + "\"weight\": 0.5}" + "}", outVId, inVId); Response r = client().post(path, edge); assertResponseStatus(201, r); r = client().get(path); assertResponseStatus(200, r); } @Test public void testDelete() throws IOException { String outVId = getVertexId("person", "name", "peter"); String inVId = getVertexId("software", "name", "lop"); String edge = String.format("{" + "\"label\": \"created\"," + "\"outVLabel\": \"person\"," + "\"inVLabel\": \"software\"," + "\"outV\": \"%s\"," + "\"inV\": \"%s\"," + "\"properties\":{" + "\"date\": \"20170324\"," + "\"weight\": 0.5}" + "}", outVId, inVId); Response r = client().post(path, edge); String content = assertResponseStatus(201, r); String id = parseId(content); r = client().delete(path, id); assertResponseStatus(204, r); } }