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  }