-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgraph_test.go
More file actions
89 lines (77 loc) · 2.36 KB
/
graph_test.go
File metadata and controls
89 lines (77 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package main
import (
"os"
"path/filepath"
"reflect"
"testing"
)
func TestGraphManager_CRUD(t *testing.T) {
dir := t.TempDir()
p := filepath.Join(dir, "memory.db")
bolt := p + ".bolt"
m := NewGraphManager(p, bolt)
defer m.Close()
ents, err := m.CreateEntities([]Entity{{Name: "A", EntityType: "type1", Observations: []string{"o1"}}, {Name: "B", EntityType: "type2", Observations: nil}})
if err != nil {
t.Fatalf("CreateEntities: %v", err)
}
if len(ents) != 2 {
t.Fatalf("want 2 created, got %d", len(ents))
}
rels, err := m.CreateRelations([]Relation{{From: "A", To: "B", RelationType: "likes"}, {From: "B", To: "A", RelationType: "knows"}})
if err != nil {
t.Fatalf("CreateRelations: %v", err)
}
if len(rels) != 2 {
t.Fatalf("want 2 created relations, got %d", len(rels))
}
added, err := m.AddObservations([]struct {
EntityName string `json:"entityName"`
Contents []string `json:"contents"`
}{{EntityName: "A", Contents: []string{"o2", "o1"}}})
if err != nil {
t.Fatalf("AddObservations: %v", err)
}
if len(added) != 1 || !reflect.DeepEqual(added[0].AddedObservations, []string{"o2"}) {
t.Fatalf("unexpected added: %#v", added)
}
g, err := m.ReadGraph()
if err != nil {
t.Fatalf("ReadGraph: %v", err)
}
if len(g.Entities) != 2 || len(g.Relations) != 2 {
t.Fatalf("unexpected graph sizes: %#v", g)
}
sg, err := m.SearchNodes("type")
if err != nil {
t.Fatalf("SearchNodes: %v", err)
}
if len(sg.Entities) != 2 {
t.Fatalf("expected 2 entities in search, got %d", len(sg.Entities))
}
og, err := m.OpenNodes([]string{"A"})
if err != nil {
t.Fatalf("OpenNodes: %v", err)
}
if len(og.Entities) != 1 || og.Entities[0].Name != "A" {
t.Fatalf("unexpected open graph: %#v", og)
}
if err := m.DeleteObservations([]struct {
EntityName string `json:"entityName"`
Observations []string `json:"observations"`
}{{EntityName: "A", Observations: []string{"o2"}}}); err != nil {
t.Fatalf("DeleteObservations: %v", err)
}
if err := m.DeleteRelations([]Relation{{From: "A", To: "B", RelationType: "likes"}}); err != nil {
t.Fatalf("DeleteRelations: %v", err)
}
if err := m.DeleteEntities([]string{"B"}); err != nil {
t.Fatalf("DeleteEntities: %v", err)
}
if _, err := os.Stat(p); err != nil {
t.Fatalf("sqlite file missing: %v", err)
}
if _, err := os.Stat(bolt); err != nil {
t.Fatalf("bolt file missing: %v", err)
}
}