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 }