Skip to content

Commit 19cc4cf

Browse files
committed
added List models
1 parent eddd29c commit 19cc4cf

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

suggestionbox/suggestionbox_model.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,44 @@ type ModelOptions struct {
8181
Skipgrams int `json:"skipgrams,omitempty"`
8282
}
8383

84+
// ListModels gets a Model by its ID.
85+
func (c *Client) ListModels(ctx context.Context, modelID string) ([]Model, error) {
86+
u, err := url.Parse(c.addr + "/suggestionbox/models")
87+
if err != nil {
88+
return nil, err
89+
}
90+
if !u.IsAbs() {
91+
return nil, errors.New("box address must be absolute")
92+
}
93+
req, err := http.NewRequest(http.MethodGet, u.String(), nil)
94+
if err != nil {
95+
return nil, err
96+
}
97+
req = req.WithContext(ctx)
98+
req.Header.Set("Accept", "application/json; charset=utf-8")
99+
req.Header.Set("Content-Type", "application/json; charset=utf-8")
100+
resp, err := c.HTTPClient.Do(req)
101+
if err != nil {
102+
return nil, err
103+
}
104+
defer resp.Body.Close()
105+
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
106+
return nil, errors.New(resp.Status)
107+
}
108+
var response struct {
109+
Success bool
110+
Error string
111+
Models []Model
112+
}
113+
if err := json.NewDecoder(resp.Body).Decode(&response); err != nil {
114+
return nil, errors.Wrap(err, "decoding response")
115+
}
116+
if !response.Success {
117+
return nil, ErrSuggestionbox(response.Error)
118+
}
119+
return response.Models, nil
120+
}
121+
84122
// GetModel gets a Model by its ID.
85123
func (c *Client) GetModel(ctx context.Context, modelID string) (Model, error) {
86124
var model Model

suggestionbox/suggestionbox_model_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,33 @@ func TestGetModel(t *testing.T) {
7272
is.Equal(outModel.ID, "model1") // outModel.ID
7373
}
7474

75+
func TestListModels(t *testing.T) {
76+
is := is.New(t)
77+
var apiCalls int
78+
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
79+
apiCalls++
80+
is.Equal(r.Method, http.MethodGet)
81+
is.Equal(r.URL.Path, "/suggestionbox/models")
82+
is.Equal(r.Header.Get("Accept"), "application/json; charset=utf-8")
83+
model := suggestionbox.Model{
84+
ID: "model1",
85+
}
86+
is.NoErr(json.NewEncoder(w).Encode(struct {
87+
Success bool `json:"success"`
88+
Models []suggestionbox.Model
89+
}{
90+
Success: true,
91+
Models: []suggestionbox.Model{model, model, model},
92+
}))
93+
}))
94+
defer srv.Close()
95+
sb := suggestionbox.New(srv.URL)
96+
models, err := sb.ListModels(context.Background(), "model1")
97+
is.NoErr(err)
98+
is.Equal(apiCalls, 1) // apiCalls
99+
is.Equal(len(models), 3) // len(models)
100+
}
101+
75102
func TestDeleteModel(t *testing.T) {
76103
is := is.New(t)
77104
var apiCalls int

0 commit comments

Comments
 (0)