// 18.4.2. Create Node with properties func TestGetOrCreateNode(t *testing.T) { db := connectTest(t) defer cleanup(t, db) label, err := randutil.String(12, randutil.Alphabet) if err != nil { t.Fatal(err) } key, err := randutil.String(12, randutil.Alphabet) if err != nil { t.Fatal(err) } value, err := randutil.String(12, randutil.Alphabet) if err != nil { t.Fatal(err) } p0 := Props{key: value, "foo": "bar"} p1 := Props{key: value} p2 := Props{"foo": "bar"} // // Create unique node // n0, created, err := db.GetOrCreateNode(label, key, p0) if err != nil { t.Fatal(err) } if !created { t.Fatal("Failed to create unique node") } check0, err := n0.Properties() if err != nil { t.Fatal(err) } assert.Equal(t, p0, check0) // // Get unique node // n1, created, err := db.GetOrCreateNode(label, key, p1) if err != nil { t.Fatal(err) } if created { t.Fatal("Failed to retrieve unique node") } check1, err := n1.Properties() if err != nil { t.Fatal(err) } assert.Equal(t, p0, check1) // // No key in props // _, _, err = db.GetOrCreateNode(label, key, p2) assert.NotEqual(t, nil, err) // // Empty label // _, _, err = db.GetOrCreateNode("", key, p0) assert.NotEqual(t, nil, err) }
func rndStr(t *testing.T) string { // Neo4j doesn't like object names beginning with numerals. name, err := randutil.String(12, randutil.Alphabet) if err != nil { t.Fatal(err) } return name }