github.com/wit-ai/wit-go/v2@v2.0.2/trait_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  func TestGetTraits(t *testing.T) {
    13  	testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
    14  		w.Write([]byte(`[
    15  			{
    16  				"id": "2690212494559269",
    17  				"name": "wit$sentiment"
    18  			},
    19  			{
    20  				"id": "254954985556896",
    21  				"name": "faq"
    22  			}
    23  		]`))
    24  	}))
    25  	defer testServer.Close()
    26  
    27  	c := NewClient(unitTestToken)
    28  	c.APIBase = testServer.URL
    29  	traits, _ := c.GetTraits()
    30  
    31  	wantTraits := []Trait{
    32  		{ID: "2690212494559269", Name: "wit$sentiment"},
    33  		{ID: "254954985556896", Name: "faq"},
    34  	}
    35  
    36  	if !reflect.DeepEqual(traits, wantTraits) {
    37  		t.Fatalf("expected\n\ttraits: %v\n\tgot: %v", wantTraits, traits)
    38  	}
    39  }
    40  
    41  func TestCreateTrait(t *testing.T) {
    42  	testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
    43  		w.Write([]byte(`{
    44  			"id": "13989798788",
    45  			"name": "politeness",
    46  			"values": [
    47  				{
    48  					"id": "97873388",
    49  					"value": "polite"
    50  				},
    51  				{
    52  					"id": "54493392772",
    53  					"value": "rude"
    54  				} 
    55  			]
    56  		}`))
    57  	}))
    58  	defer testServer.Close()
    59  
    60  	c := NewClient(unitTestToken)
    61  	c.APIBase = testServer.URL
    62  	trait, err := c.CreateTrait("politeness", []string{"polite", "rude"})
    63  
    64  	wantTrait := &Trait{
    65  		ID:   "13989798788",
    66  		Name: "politeness",
    67  		Values: []TraitValue{
    68  			{ID: "97873388", Value: "polite"},
    69  			{ID: "54493392772", Value: "rude"},
    70  		},
    71  	}
    72  
    73  	if err != nil {
    74  		t.Fatalf("nil error expected, got %v", err)
    75  	}
    76  	if !reflect.DeepEqual(wantTrait, trait) {
    77  		t.Fatalf("expected\n\ttrait: %v\n\tgot: %v", wantTrait, trait)
    78  	}
    79  }
    80  
    81  func TestGetTrait(t *testing.T) {
    82  	testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
    83  		w.Write([]byte(`{
    84  			"id": "13989798788",
    85  			"name": "politeness",
    86  			"values": [
    87  				{
    88  					"id": "97873388",
    89  					"value": "polite"
    90  				},
    91  				{
    92  					"id": "54493392772",
    93  					"value": "rude"
    94  				} 
    95  			]
    96  		}`))
    97  	}))
    98  	defer testServer.Close()
    99  
   100  	c := NewClient(unitTestToken)
   101  	c.APIBase = testServer.URL
   102  	trait, err := c.GetTrait("politeness")
   103  
   104  	wantTrait := &Trait{
   105  		ID:   "13989798788",
   106  		Name: "politeness",
   107  		Values: []TraitValue{
   108  			{ID: "97873388", Value: "polite"},
   109  			{ID: "54493392772", Value: "rude"},
   110  		},
   111  	}
   112  
   113  	if err != nil {
   114  		t.Fatalf("nil error expected, got %v", err)
   115  	}
   116  	if !reflect.DeepEqual(wantTrait, trait) {
   117  		t.Fatalf("expected\n\ttrait: %v\n\tgot: %v", wantTrait, trait)
   118  	}
   119  }
   120  
   121  func TestDeleteTrait(t *testing.T) {
   122  	testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
   123  		res.Write([]byte(`{"deleted": "politeness"}`))
   124  	}))
   125  	defer func() { testServer.Close() }()
   126  
   127  	c := NewClient(unitTestToken)
   128  	c.APIBase = testServer.URL
   129  	if err := c.DeleteTrait("politeness"); err != nil {
   130  		t.Fatalf("expected nil error, got: %v", err)
   131  	}
   132  }
   133  
   134  func TestAddTraitValue(t *testing.T) {
   135  	testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
   136  		w.Write([]byte(`{
   137  			"id": "13989798788",
   138  			"name": "politeness",
   139  			"values": [
   140  				{
   141  					"id": "97873388",
   142  					"value": "polite"
   143  				},
   144  				{
   145  					"id": "54493392772",
   146  					"value": "rude"
   147  				},
   148  				{
   149  					"id": "828283932",
   150  					"value": "neutral"
   151  				}
   152  			]
   153  		}`))
   154  	}))
   155  	defer func() { testServer.Close() }()
   156  
   157  	c := NewClient(unitTestToken)
   158  	c.APIBase = testServer.URL
   159  	trait, err := c.AddTraitValue("politeness", "neutral")
   160  
   161  	wantTrait := &Trait{
   162  		ID:   "13989798788",
   163  		Name: "politeness",
   164  		Values: []TraitValue{
   165  			{ID: "97873388", Value: "polite"},
   166  			{ID: "54493392772", Value: "rude"},
   167  			{ID: "828283932", Value: "neutral"},
   168  		},
   169  	}
   170  
   171  	if err != nil {
   172  		t.Fatalf("nil error expected, got %v", err)
   173  	}
   174  
   175  	if !reflect.DeepEqual(wantTrait, trait) {
   176  		t.Fatalf("expected\n\ttrait: %v\n\tgot: %v", wantTrait, trait)
   177  	}
   178  }
   179  
   180  func TestDeleteTraitValue(t *testing.T) {
   181  	testServer := httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
   182  		res.Write([]byte(`{"deleted": "neutral"}`))
   183  	}))
   184  	defer func() { testServer.Close() }()
   185  
   186  	c := NewClient(unitTestToken)
   187  	c.APIBase = testServer.URL
   188  	if err := c.DeleteTraitValue("politeness", "neutral"); err != nil {
   189  		t.Fatalf("expected nil error, got: %v", err)
   190  	}
   191  }