github.com/wit-ai/wit-go/v2@v2.0.2/entity_test.go (about) 1 // Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. 2 3 package witai 4 5 import ( 6 "net/http" 7 "net/http/httptest" 8 "reflect" 9 "testing" 10 ) 11 12 var unitTestToken = "unit_test_invalid_token" 13 14 func TestGetEntities(t *testing.T) { 15 testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { 16 w.Write([]byte(`[ 17 { 18 "id": "2690212494559269", 19 "name": "car" 20 }, { 21 "id": "254954985556896", 22 "name": "color" 23 } 24 ]`)) 25 })) 26 defer func() { testServer.Close() }() 27 28 c := NewClient(unitTestToken) 29 c.APIBase = testServer.URL 30 entities, _ := c.GetEntities() 31 32 wantEntities := []Entity{ 33 {ID: "2690212494559269", Name: "car"}, 34 {ID: "254954985556896", Name: "color"}, 35 } 36 37 if !reflect.DeepEqual(entities, wantEntities) { 38 t.Fatalf("expected\n\tentities: %v\n\tgot: %v", wantEntities, entities) 39 } 40 } 41 42 func TestCreateEntity(t *testing.T) { 43 testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { 44 w.Write([]byte(`{ 45 "id": "5418abc7-cc68-4073-ae9e-3a5c3c81d965", 46 "name": "favorite_city", 47 "roles": ["favorite_city"], 48 "lookups": ["free-text", "keywords"], 49 "keywords": [] 50 }`)) 51 })) 52 defer func() { testServer.Close() }() 53 54 c := NewClient(unitTestToken) 55 c.APIBase = testServer.URL 56 e, err := c.CreateEntity(Entity{ 57 Name: "favorite_city", 58 Roles: []string{}, 59 }) 60 61 wantEntity := &Entity{ 62 ID: "5418abc7-cc68-4073-ae9e-3a5c3c81d965", 63 Name: "favorite_city", 64 Roles: []string{"favorite_city"}, 65 Lookups: []string{"free-text", "keywords"}, 66 Keywords: []EntityKeyword{}, 67 } 68 69 if err != nil { 70 t.Fatalf("nil error expected, got %v", err) 71 } 72 if !reflect.DeepEqual(wantEntity, e) { 73 t.Fatalf("expected\n\tentity: %v\n\tgot: %v", wantEntity, e) 74 } 75 } 76 77 func TestGetEntity(t *testing.T) { 78 testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { 79 w.Write([]byte(`{ 80 "id": "571979db-f6ac-4820-bc28-a1e0787b98fc", 81 "name": "first_name", 82 "lookups": ["free-text", "keywords"], 83 "roles": ["first_name"], 84 "keywords": [ { 85 "keyword": "Willy", 86 "synonyms": ["Willy"] 87 }, { 88 "keyword": "Laurent", 89 "synonyms": ["Laurent"] 90 }, { 91 "keyword": "Julien", 92 "synonyms": ["Julien"] 93 } ] 94 }`)) 95 })) 96 defer func() { testServer.Close() }() 97 98 c := NewClient(unitTestToken) 99 c.APIBase = testServer.URL 100 entity, err := c.GetEntity("first_name") 101 102 wantEntity := &Entity{ 103 ID: "571979db-f6ac-4820-bc28-a1e0787b98fc", 104 Name: "first_name", 105 Roles: []string{"first_name"}, 106 Lookups: []string{"free-text", "keywords"}, 107 Keywords: []EntityKeyword{ 108 {Keyword: "Willy", Synonyms: []string{"Willy"}}, 109 {Keyword: "Laurent", Synonyms: []string{"Laurent"}}, 110 {Keyword: "Julien", Synonyms: []string{"Julien"}}, 111 }, 112 } 113 114 if err != nil { 115 t.Fatalf("nil error expected, got %v", err) 116 } 117 if !reflect.DeepEqual(wantEntity, entity) { 118 t.Fatalf("expected\n\tentity: %v\n\tgot: %v", wantEntity, entity) 119 } 120 } 121 122 func TestUpdateEntity(t *testing.T) { 123 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 124 res.Write([]byte(`{ 125 "id": "5418abc7-cc68-4073-ae9e-3a5c3c81d965", 126 "name": "favorite_city", 127 "roles": ["favorite_city"], 128 "lookups": ["free-text", "keywords"], 129 "keywords": [ 130 { 131 "keyword": "Paris", 132 "synonyms": ["Paris", "City of Light", "Capital of France"] 133 }, 134 { 135 "keyword": "Seoul", 136 "synonyms": ["Seoul", "서울", "Kimchi paradise"] 137 } 138 ] 139 }`)) 140 })) 141 defer func() { testServer.Close() }() 142 143 c := NewClient(unitTestToken) 144 c.APIBase = testServer.URL 145 146 if err := c.UpdateEntity("favorite_city", Entity{ 147 Name: "favorite_city", 148 Roles: []string{"favorite_city"}, 149 Lookups: []string{"free-text", "keywords"}, 150 Keywords: []EntityKeyword{ 151 {Keyword: "Paris", Synonyms: []string{"Paris", "City of Light", "Capital of France"}}, 152 {Keyword: "Seoul", Synonyms: []string{"Seoul", "서울", "Kimchi paradise"}}, 153 }, 154 }); err != nil { 155 t.Fatalf("err=nil expected, got: %v", err) 156 } 157 } 158 159 func TestDeleteEntity(t *testing.T) { 160 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 161 res.Write([]byte(`{"deleted": "favorite_city"}`)) 162 })) 163 defer func() { testServer.Close() }() 164 165 c := NewClient(unitTestToken) 166 c.APIBase = testServer.URL 167 if err := c.DeleteEntity("favorite_city"); err != nil { 168 t.Fatalf("expected nil error, got: %v", err) 169 } 170 } 171 172 func TestDeleteEntityRole(t *testing.T) { 173 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 174 res.Write([]byte(`{"deleted": "flight:destination"}`)) 175 })) 176 defer func() { testServer.Close() }() 177 178 c := NewClient(unitTestToken) 179 c.APIBase = testServer.URL 180 if err := c.DeleteEntityRole("flight", "destination"); err != nil { 181 t.Fatalf("expected nil error, got: %v", err) 182 } 183 } 184 185 func TestAddEntityKeyword(t *testing.T) { 186 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 187 res.Write([]byte(`{ 188 "id": "5418abc7-cc68-4073-ae9e-3a5c3c81d965", 189 "name": "favorite_city", 190 "roles": ["favorite_city"], 191 "lookups": ["free-text", "keywords"], 192 "keywords": [ 193 { 194 "keyword": "Brussels", 195 "synonyms": ["Brussels", "Capital of Belgium"] 196 }, 197 { 198 "keyword": "Paris", 199 "synonyms": ["Paris", "City of Light", "Capital of France"] 200 }, 201 { 202 "keyword": "Seoul", 203 "synonyms": ["Seoul", "서울", "Kimchi paradise"] 204 } 205 ] 206 }`)) 207 })) 208 defer func() { testServer.Close() }() 209 210 c := NewClient(unitTestToken) 211 c.APIBase = testServer.URL 212 entity, err := c.AddEntityKeyword("favorite_city", EntityKeyword{ 213 Keyword: "Brussels", 214 Synonyms: []string{"Brussels", "Capital of Belgium"}, 215 }) 216 217 wantEntity := &Entity{ 218 ID: "5418abc7-cc68-4073-ae9e-3a5c3c81d965", 219 Name: "favorite_city", 220 Roles: []string{"favorite_city"}, 221 Lookups: []string{"free-text", "keywords"}, 222 Keywords: []EntityKeyword{ 223 {Keyword: "Brussels", Synonyms: []string{"Brussels", "Capital of Belgium"}}, 224 {Keyword: "Paris", Synonyms: []string{"Paris", "City of Light", "Capital of France"}}, 225 {Keyword: "Seoul", Synonyms: []string{"Seoul", "서울", "Kimchi paradise"}}, 226 }, 227 } 228 229 if err != nil { 230 t.Fatalf("nil error expected, got %v", err) 231 } 232 233 if !reflect.DeepEqual(wantEntity, entity) { 234 t.Fatalf("expected\n\tentity: %v\n\tgot: %v", wantEntity, entity) 235 } 236 } 237 238 func TestDeleteEntityKeyword(t *testing.T) { 239 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 240 res.Write([]byte(`{"deleted": "Paris"}`)) 241 })) 242 defer func() { testServer.Close() }() 243 244 c := NewClient(unitTestToken) 245 c.APIBase = testServer.URL 246 if err := c.DeleteEntityKeyword("favorite_city", "Paris"); err != nil { 247 t.Fatalf("expected nil error, got: %v", err) 248 } 249 } 250 251 func TestAddEntityKeywordSynonym(t *testing.T) { 252 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 253 res.Write([]byte(`{ 254 "id": "5418abc7-cc68-4073-ae9e-3a5c3c81d965", 255 "name": "favorite_city", 256 "roles": ["favorite_city"], 257 "lookups": ["free-text", "keywords"], 258 "keywords": [ 259 { 260 "keyword": "Brussels", 261 "synonyms": ["Brussels", "Capital of Belgium"] 262 }, 263 { 264 "keyword": "Paris", 265 "synonyms": ["Paris", "City of Light", "Capital of France", "Camembert city"] 266 }, 267 { 268 "keyword": "Seoul", 269 "synonyms": ["Seoul", "서울", "Kimchi paradise"] 270 } 271 ] 272 }`)) 273 })) 274 defer func() { testServer.Close() }() 275 276 c := NewClient(unitTestToken) 277 c.APIBase = testServer.URL 278 entity, err := c.AddEntityKeywordSynonym("favorite_city", "Paris", "Camembert city") 279 280 wantEntity := &Entity{ 281 ID: "5418abc7-cc68-4073-ae9e-3a5c3c81d965", 282 Name: "favorite_city", 283 Roles: []string{"favorite_city"}, 284 Lookups: []string{"free-text", "keywords"}, 285 Keywords: []EntityKeyword{ 286 {Keyword: "Brussels", Synonyms: []string{"Brussels", "Capital of Belgium"}}, 287 {Keyword: "Paris", Synonyms: []string{"Paris", "City of Light", "Capital of France", "Camembert city"}}, 288 {Keyword: "Seoul", Synonyms: []string{"Seoul", "서울", "Kimchi paradise"}}, 289 }, 290 } 291 292 if err != nil { 293 t.Fatalf("nil error expected, got %v", err) 294 } 295 296 if !reflect.DeepEqual(wantEntity, entity) { 297 t.Fatalf("expected\n\tentity: %v\n\tgot: %v", wantEntity, entity) 298 } 299 } 300 301 func TestDeleteEntityKeywordSynonym(t *testing.T) { 302 testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) { 303 res.Write([]byte(`{"deleted": "Camembert City"}`)) 304 })) 305 defer func() { testServer.Close() }() 306 307 c := NewClient(unitTestToken) 308 c.APIBase = testServer.URL 309 if err := c.DeleteEntityKeywordSynonym("favorite_city", "Paris", "Camembert City"); err != nil { 310 t.Fatalf("expected nil error, got: %v", err) 311 } 312 }