From 993da108cb0ae33be8960d8fb413f1f8d1c6ec88 Mon Sep 17 00:00:00 2001 From: Balazs Nadasdi Date: Mon, 21 Mar 2022 17:26:31 +0100 Subject: [PATCH] feat: Implement Admin/Moderators (#87) Closes #64 --- services/admin/moderators/add.go | 34 ++++++++++++++++ services/admin/moderators/add_test.go | 50 ++++++++++++++++++++++++ services/admin/moderators/fixtures/empty | 0 services/admin/moderators/remove.go | 34 ++++++++++++++++ services/admin/moderators/remove_test.go | 50 ++++++++++++++++++++++++ services/admin/moderators/service.go | 15 +++++++ services/admin/service.go | 6 +++ 7 files changed, 189 insertions(+) create mode 100644 services/admin/moderators/add.go create mode 100644 services/admin/moderators/add_test.go create mode 100644 services/admin/moderators/fixtures/empty create mode 100644 services/admin/moderators/remove.go create mode 100644 services/admin/moderators/remove_test.go create mode 100644 services/admin/moderators/service.go diff --git a/services/admin/moderators/add.go b/services/admin/moderators/add.go new file mode 100644 index 0000000..3aa7871 --- /dev/null +++ b/services/admin/moderators/add.go @@ -0,0 +1,34 @@ +package moderators + +import ( + "github.com/yitsushi/go-misskey/core" +) + +// AddRequest represents an Add moderator request. +type AddRequest struct { + UserID string `json:"userId"` +} + +// Validate the request. +func (r AddRequest) Validate() error { + if r.UserID == "" { + return core.RequestValidationError{ + Request: r, + Message: core.UndefinedRequiredField, + Field: "UserID", + } + } + + return nil +} + +// Add a moderator. +func (s *Service) Add(userID string) error { + request := AddRequest{UserID: userID} + err := s.Call( + &core.JSONRequest{Request: &request, Path: "/admin/moderators/add"}, + &core.EmptyResponse{}, + ) + + return err +} diff --git a/services/admin/moderators/add_test.go b/services/admin/moderators/add_test.go new file mode 100644 index 0000000..aafa914 --- /dev/null +++ b/services/admin/moderators/add_test.go @@ -0,0 +1,50 @@ +package moderators_test + +import ( + "log" + "net/http" + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/yitsushi/go-misskey" + "github.com/yitsushi/go-misskey/core" + "github.com/yitsushi/go-misskey/services/admin/moderators" + "github.com/yitsushi/go-misskey/test" +) + +func TestService_Add(t *testing.T) { + client := test.MakeMockClient(test.SimpleMockOptions{ + Endpoint: "/api/admin/moderators/add", + RequestData: &moderators.AddRequest{}, + ResponseFile: "empty", + StatusCode: http.StatusNoContent, + }) + + err := client.Admin().Moderators().Add("88v9vu5nbu") + + assert.NoError(t, err) +} + +func TestAddRequest_Validate(t *testing.T) { + test.ValidateRequests( + t, + []core.BaseRequest{ + moderators.AddRequest{}, + }, + []core.BaseRequest{ + moderators.AddRequest{UserID: "asd"}, + }, + ) +} + +func ExampleService_Add() { + client := misskey.NewClient("https://slippy.xyz", os.Getenv("MISSKEY_TOKEN")) + + err := client.Admin().Moderators().Add("88v9vu5nbu") + if err != nil { + log.Printf("[Admin/Moderators/Add] %s", err) + + return + } +} diff --git a/services/admin/moderators/fixtures/empty b/services/admin/moderators/fixtures/empty new file mode 100644 index 0000000..e69de29 diff --git a/services/admin/moderators/remove.go b/services/admin/moderators/remove.go new file mode 100644 index 0000000..f269845 --- /dev/null +++ b/services/admin/moderators/remove.go @@ -0,0 +1,34 @@ +package moderators + +import ( + "github.com/yitsushi/go-misskey/core" +) + +// RemoveRequest represents an Remove moderator request. +type RemoveRequest struct { + UserID string `json:"userId"` +} + +// Validate the request. +func (r RemoveRequest) Validate() error { + if r.UserID == "" { + return core.RequestValidationError{ + Request: r, + Message: core.UndefinedRequiredField, + Field: "UserID", + } + } + + return nil +} + +// Remove a moderator. +func (s *Service) Remove(userID string) error { + request := RemoveRequest{UserID: userID} + err := s.Call( + &core.JSONRequest{Request: &request, Path: "/admin/moderators/remove"}, + &core.EmptyResponse{}, + ) + + return err +} diff --git a/services/admin/moderators/remove_test.go b/services/admin/moderators/remove_test.go new file mode 100644 index 0000000..56bf4ca --- /dev/null +++ b/services/admin/moderators/remove_test.go @@ -0,0 +1,50 @@ +package moderators_test + +import ( + "log" + "net/http" + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/yitsushi/go-misskey" + "github.com/yitsushi/go-misskey/core" + "github.com/yitsushi/go-misskey/services/admin/moderators" + "github.com/yitsushi/go-misskey/test" +) + +func TestService_Remove(t *testing.T) { + client := test.MakeMockClient(test.SimpleMockOptions{ + Endpoint: "/api/admin/moderators/remove", + RequestData: &moderators.RemoveRequest{}, + ResponseFile: "empty", + StatusCode: http.StatusNoContent, + }) + + err := client.Admin().Moderators().Remove("88v9vu5nbu") + + assert.NoError(t, err) +} + +func TestRemoveRequest_Validate(t *testing.T) { + test.ValidateRequests( + t, + []core.BaseRequest{ + moderators.RemoveRequest{}, + }, + []core.BaseRequest{ + moderators.RemoveRequest{UserID: "asd"}, + }, + ) +} + +func ExampleService_Remove() { + client := misskey.NewClient("https://slippy.xyz", os.Getenv("MISSKEY_TOKEN")) + + err := client.Admin().Moderators().Remove("88v9vu5nbu") + if err != nil { + log.Printf("[Admin/Moderators/Remove] %s", err) + + return + } +} diff --git a/services/admin/moderators/service.go b/services/admin/moderators/service.go new file mode 100644 index 0000000..9163df4 --- /dev/null +++ b/services/admin/moderators/service.go @@ -0,0 +1,15 @@ +package moderators + +import ( + "github.com/yitsushi/go-misskey/core" +) + +// Service is the base for all the endpoints on this service. +type Service struct { + Call core.RequestHandlerFunc +} + +// NewService creates a new Service instance. +func NewService(requestHandler core.RequestHandlerFunc) *Service { + return &Service{Call: requestHandler} +} diff --git a/services/admin/service.go b/services/admin/service.go index 5cd9fae..40037c9 100644 --- a/services/admin/service.go +++ b/services/admin/service.go @@ -8,6 +8,7 @@ import ( "github.com/yitsushi/go-misskey/services/admin/federation" "github.com/yitsushi/go-misskey/services/admin/logs" "github.com/yitsushi/go-misskey/services/admin/moderation" + "github.com/yitsushi/go-misskey/services/admin/moderators" "github.com/yitsushi/go-misskey/services/admin/queue" "github.com/yitsushi/go-misskey/services/admin/users" ) @@ -61,3 +62,8 @@ func (s *Service) Federation() *federation.Service { func (s *Service) Drive() *drive.Service { return drive.NewService(s.Call) } + +// Moderators contains all endpoints for moderators. +func (s *Service) Moderators() *moderators.Service { + return moderators.NewService(s.Call) +}