From 8ed3c5e68fe6f554bd181e97c9854df06a7431b2 Mon Sep 17 00:00:00 2001 From: Danielle Date: Fri, 18 Nov 2022 10:57:27 -0500 Subject: [PATCH] TopicDetail and TopicDelete definitions (#63) --- pkg/tenant/api/v1/api.go | 2 ++ pkg/tenant/api/v1/client.go | 37 ++++++++++++++++++++++++ pkg/tenant/api/v1/client_test.go | 48 ++++++++++++++++++++++++++++++++ pkg/tenant/api/v1/errors.go | 1 + 4 files changed, 88 insertions(+) diff --git a/pkg/tenant/api/v1/api.go b/pkg/tenant/api/v1/api.go index 16c9dceb9..d290ceab9 100644 --- a/pkg/tenant/api/v1/api.go +++ b/pkg/tenant/api/v1/api.go @@ -37,6 +37,8 @@ type TenantClient interface { TopicList(context.Context, *PageQuery) (*TopicPage, error) TopicCreate(context.Context, *Topic) (*Topic, error) + TopicDetail(ctx context.Context, id string) (*Topic, error) + TopicDelete(ctx context.Context, id string) error ProjectAPIKeyList(ctx context.Context, id string, in *PageQuery) (*ProjectAPIKeyPage, error) ProjectAPIKeyCreate(ctx context.Context, id string, in *APIKey) (*APIKey, error) diff --git a/pkg/tenant/api/v1/client.go b/pkg/tenant/api/v1/client.go index 5a8f6be31..cecec5c1e 100644 --- a/pkg/tenant/api/v1/client.go +++ b/pkg/tenant/api/v1/client.go @@ -551,6 +551,43 @@ func (s *APIv1) TopicCreate(ctx context.Context, in *Topic) (out *Topic, err err return out, err } +func (s *APIv1) TopicDetail(ctx context.Context, id string) (out *Topic, err error) { + if id == "" { + return nil, ErrTopicIDRequired + } + + path := fmt.Sprintf("/v1/topics/%s", id) + + // Make the HTTP request + var req *http.Request + if req, err = s.NewRequest(ctx, http.MethodGet, path, nil, nil); err != nil { + return nil, err + } + + if _, err = s.Do(req, &out, true); err != nil { + return nil, err + } + return out, nil +} + +func (s *APIv1) TopicDelete(ctx context.Context, id string) (err error) { + if id == "" { + return ErrTopicIDRequired + } + + path := fmt.Sprintf("/v1/topics/%s", id) + + // Make the HTTP request + var req *http.Request + if req, err = s.NewRequest(ctx, http.MethodDelete, path, nil, nil); err != nil { + return err + } + if _, err = s.Do(req, nil, true); err != nil { + return err + } + return nil +} + func (s *APIv1) ProjectAPIKeyList(ctx context.Context, id string, in *PageQuery) (out *ProjectAPIKeyPage, err error) { if id == "" { return nil, ErrProjectIDRequired diff --git a/pkg/tenant/api/v1/client_test.go b/pkg/tenant/api/v1/client_test.go index b02d3fc65..25f2f663b 100644 --- a/pkg/tenant/api/v1/client_test.go +++ b/pkg/tenant/api/v1/client_test.go @@ -827,6 +827,54 @@ func TestTopicCreate(t *testing.T) { require.Equal(t, fixture, out, "unexpected response returned") } +func TestTopicDetail(t *testing.T) { + fixture := &api.Topic{ + ID: "001", + Name: "topic01", + } + + // Creates a test server + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodGet, r.Method) + require.Equal(t, "/v1/topics/topic001", r.URL.Path) + + w.Header().Add("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(fixture) + })) + defer ts.Close() + + // Creates a client to execute tests against the test server + client, err := api.New(ts.URL) + require.NoError(t, err, "could not create api client") + + out, err := client.TopicDetail(context.Background(), "topic001") + require.NoError(t, err, "could not execute api request") + require.Equal(t, fixture, out, "unexpected response error") +} + +func TestTopicDelete(t *testing.T) { + fixture := &api.Reply{} + + // Creates a test server + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, http.MethodDelete, r.Method) + require.Equal(t, "/v1/topics/topic001", r.URL.Path) + + w.Header().Add("Content-Type", "application/json; charset=utf-8") + w.WriteHeader(http.StatusOK) + json.NewEncoder(w).Encode(fixture) + })) + defer ts.Close() + + // Creates a client to execute tests against the test server + client, err := api.New(ts.URL) + require.NoError(t, err, "could not create api client") + + err = client.TopicDelete(context.TODO(), "topic001") + require.NoError(t, err, "could not execute api request") +} + func TestProjectAPIKeyList(t *testing.T) { fixture := &api.ProjectAPIKeyPage{ ProjectID: "001", diff --git a/pkg/tenant/api/v1/errors.go b/pkg/tenant/api/v1/errors.go index f62987e17..27842419d 100644 --- a/pkg/tenant/api/v1/errors.go +++ b/pkg/tenant/api/v1/errors.go @@ -16,6 +16,7 @@ var ( ErrTenantIDRequired = errors.New("tenant id is required for this endpoint") ErrMemberIDRequired = errors.New("member id is required for this endpoint") ErrProjectIDRequired = errors.New("project id is required for this endpoint") + ErrTopicIDRequired = errors.New("topic id is required for this endpoint") ) // Constructs a new response for an error or returns unsuccessful.