diff --git a/delivery/http_server/end2end/agent_kindbox_test.go b/delivery/http_server/end2end/agent_kindbox_test.go index 6a9d12d..a9dd9df 100644 --- a/delivery/http_server/end2end/agent_kindbox_test.go +++ b/delivery/http_server/end2end/agent_kindbox_test.go @@ -4,9 +4,11 @@ package end2end import ( + "bytes" "context" "encoding/json" "fmt" + "log" "net/http" "net/http/httptest" "testing" @@ -14,21 +16,23 @@ import ( "git.gocasts.ir/ebhomengo/niki/delivery/http_server/end2end/setup" "git.gocasts.ir/ebhomengo/niki/entity" adminserviceparam "git.gocasts.ir/ebhomengo/niki/param/admin/admin" - param "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box" + adminParam "git.gocasts.ir/ebhomengo/niki/param/admin/kind_box" + agentParam "git.gocasts.ir/ebhomengo/niki/param/agent/kind_box" "github.com/labstack/echo/v4" "github.com/stretchr/testify/assert" ) const ( - agentPhoneNumber = "09384664403" - agentPassword = "Abc123456" + agentPhoneNumber = "09384664403" + agentPassword = "Abc123456" + agentID uint = 4 ) func TestAgent_KindBox_Get(t *testing.T) { kindBox := entity.KindBox{ ID: 2, SerialNumber: "serial-2", - ReceiverAgentID: 4, + ReceiverAgentID: agentID, Status: entity.KindBoxAssignedReceiverAgentStatus, } url := fmt.Sprintf("/agents/kindboxes/%d", kindBox.ID) @@ -41,8 +45,8 @@ func TestAgent_KindBox_Get(t *testing.T) { t.Fatalf("could not login: %s", err) } - resRecord := createRequest(http.MethodGet, url, token) - var res param.GetKindBoxResponse + resRecord := createRequest(http.MethodGet, url, token, nil) + var res agentParam.GetKindBoxResponse err = json.NewDecoder(resRecord.Body).Decode(&res) assert.NoError(t, err, "could not decode response body") @@ -53,6 +57,35 @@ func TestAgent_KindBox_Get(t *testing.T) { assert.Equal(t, kindBox.Status, res.Status) } +// TODO: we can add more tests for return. +// we can get check if the data is updated in db as expects +// or api should return error if the kindbox is not for this agent +// CHECK: is the flow correct? agent can change kindbox status to return no matter what was the previous status? +func TestAgent_KindBox_Return(t *testing.T) { + kindBoxReqBody := agentParam.ReturnKindBoxRequest{SerialNumber: "new-serial"} + var kindBoxID uint = 2 + url := fmt.Sprintf("/agents/kindboxes/return/%d", kindBoxID) + + teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) + t.Cleanup(teardown) + + token, err := getToken() + if err != nil { + t.Fatalf("could not login: %s", err) + } + + resRecord := createRequest(http.MethodPatch, url, token, kindBoxReqBody) + updatedKindBox, err := services.AdminKindBoxSvc.Get( + context.Background(), + adminParam.KindBoxGetRequest{KindBoxID: kindBoxID}, + ) + + assert.Equal(t, http.StatusNoContent, resRecord.Code) + assert.Equal(t, kindBoxReqBody.SerialNumber, updatedKindBox.SerialNumber) + assert.Equal(t, agentID, updatedKindBox.ReceiverAgentID) + assert.Equal(t, entity.KindBoxReturnedStatus, updatedKindBox.Status) +} + func getToken() (string, error) { res, err := services.AdminSvc.LoginWithPhoneNumber( context.Background(), @@ -67,8 +100,21 @@ func getToken() (string, error) { return res.Tokens.AccessToken, nil } -func createRequest(method string, url string, token string) *httptest.ResponseRecorder { - req := httptest.NewRequest(method, url, nil) +func createRequest( + method string, + url string, + token string, + body any, +) *httptest.ResponseRecorder { + var buf bytes.Buffer + if body != nil { + err := json.NewEncoder(&buf).Encode(body) + if err != nil { + log.Fatalf("could not encode body: %v", err) + } + } + + req := httptest.NewRequest(method, url, &buf) req.Header.Set(echo.HeaderContentType, echo.MIMEApplicationJSON) req.Header.Set(echo.HeaderAuthorization, fmt.Sprintf("Bearer %s", token)) res := httptest.NewRecorder()