From d4a4c36e7fee2de6358218bce675c6c9457e3d45 Mon Sep 17 00:00:00 2001 From: mamad Date: Tue, 1 Oct 2024 19:24:48 +0330 Subject: [PATCH] test: adding more scenario for each test --- .../http_server/end2end/agent_kindbox_test.go | 102 ++++++++++++++---- .../setup/seed_data/1_create-admins.sql | 15 ++- 2 files changed, 97 insertions(+), 20 deletions(-) diff --git a/delivery/http_server/end2end/agent_kindbox_test.go b/delivery/http_server/end2end/agent_kindbox_test.go index 2deebd0b..68781bda 100644 --- a/delivery/http_server/end2end/agent_kindbox_test.go +++ b/delivery/http_server/end2end/agent_kindbox_test.go @@ -23,16 +23,24 @@ import ( ) const ( - agentPhoneNumber = "09384664403" - agentPassword = "Abc123456" - agentID uint = 4 + agent1PhoneNumber = "09384664403" + agent1Password = "Abc123456" + agent1ID uint = 4 + agent2PhoneNumber = "09384664404" + agent2Password = "Abc123456" + agent2ID uint = 5 ) func TestAgent_KindBox_Get(t *testing.T) { + t.Run("basic", Agent_KindBox_Get_Basic) + t.Run("no token", Agent_KindBox_Get_NoToken) +} + +func Agent_KindBox_Get_Basic(t *testing.T) { kindBox := entity.KindBox{ ID: 2, SerialNumber: "serial-2", - ReceiverAgentID: agentID, + ReceiverAgentID: agent1ID, Status: entity.KindBoxAssignedReceiverAgentStatus, } url := fmt.Sprintf("/agents/kindboxes/%d", kindBox.ID) @@ -40,7 +48,7 @@ func TestAgent_KindBox_Get(t *testing.T) { teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) t.Cleanup(teardown) - token, err := getToken() + token, err := getToken(agent1PhoneNumber, agent1Password) if err != nil { t.Fatalf("could not login: %s", err) } @@ -57,19 +65,33 @@ 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 Agent_KindBox_Get_NoToken(t *testing.T) { + const kindBoxID = 2 + url := fmt.Sprintf("/agents/kindboxes/%d", kindBoxID) + + teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) + t.Cleanup(teardown) + + resRecord := createRequest(http.MethodGet, url, "", nil) + + assert.Equal(t, http.StatusUnauthorized, resRecord.Code) +} + func TestAgent_KindBox_Return(t *testing.T) { + t.Run("basic", Agent_KindBox_Return_Basic) + t.Run("no token", Agent_KindBox_Return_NoToken) + t.Run("wrong agent", Agent_KindBox_Return_WrongAgent) +} + +func Agent_KindBox_Return_Basic(t *testing.T) { kindBoxReqBody := agentParam.ReturnKindBoxRequest{SerialNumber: "new-serial"} - var kindBoxID uint = 2 + const kindBoxID uint = 2 url := fmt.Sprintf("/agents/kindboxes/return/%d", kindBoxID) teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) t.Cleanup(teardown) - token, err := getToken() + token, err := getToken(agent1PhoneNumber, agent1Password) if err != nil { t.Fatalf("could not login: %s", err) } @@ -82,16 +104,45 @@ func TestAgent_KindBox_Return(t *testing.T) { assert.Equal(t, http.StatusNoContent, resRecord.Code) assert.Equal(t, kindBoxReqBody.SerialNumber, updatedKindBox.SerialNumber) - assert.Equal(t, agentID, updatedKindBox.ReceiverAgentID) + assert.Equal(t, agent1ID, updatedKindBox.ReceiverAgentID) assert.Equal(t, entity.KindBoxReturnedStatus, updatedKindBox.Status) } -func getToken() (string, error) { +func Agent_KindBox_Return_NoToken(t *testing.T) { + const kindBoxID = 2 + url := fmt.Sprintf("/agents/kindboxes/return/%d", kindBoxID) + + teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) + t.Cleanup(teardown) + + resRecord := createRequest(http.MethodGet, url, "", nil) + + assert.Equal(t, http.StatusUnauthorized, resRecord.Code) +} + +func Agent_KindBox_Return_WrongAgent(t *testing.T) { + kindBoxReqBody := agentParam.ReturnKindBoxRequest{SerialNumber: "new-serial"} + const kindBoxID uint = 2 + url := fmt.Sprintf("/agents/kindboxes/return/%d", kindBoxID) + + teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) + t.Cleanup(teardown) + + token, err := getToken(agent2PhoneNumber, agent2Password) + if err != nil { + t.Fatalf("could not login: %s", err) + } + + resRecord := createRequest(http.MethodPatch, url, token, kindBoxReqBody) + assert.Equal(t, http.StatusUnprocessableEntity, resRecord.Code) +} + +func getToken(phoneNumber, password string) (string, error) { res, err := services.AdminSvc.LoginWithPhoneNumber( context.Background(), adminserviceparam.LoginWithPhoneNumberRequest{ - PhoneNumber: agentPhoneNumber, - Password: agentPassword, + PhoneNumber: phoneNumber, + Password: password, }, ) if err != nil { @@ -100,10 +151,12 @@ func getToken() (string, error) { return res.Tokens.AccessToken, nil } -// TODO: if anyone add a new kindbox for this agent, then this test will fail because count will change. -// somehow we should link seed data with test data. -// maybe not use sql seed data and create data in each test func TestAgent_KindBox_Get_All(t *testing.T) { + t.Run("basic", Agent_kindBox_Get_All_Basic) + t.Run("no token", Agent_kindBox_Get_All_NoToken) +} + +func Agent_kindBox_Get_All_Basic(t *testing.T) { kindBoxesCount := 1 url := "/agents/kindboxes" @@ -111,7 +164,7 @@ func TestAgent_KindBox_Get_All(t *testing.T) { teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) t.Cleanup(teardown) - token, err := getToken() + token, err := getToken(agent1PhoneNumber, agent1Password) if err != nil { t.Fatalf("could not login: %s", err) } @@ -125,6 +178,17 @@ func TestAgent_KindBox_Get_All(t *testing.T) { assert.Equal(t, kindBoxesCount, len(res.AllKindBoxes)) } +func Agent_kindBox_Get_All_NoToken(t *testing.T) { + url := "/agents/kindboxes" + + teardown := setup.SeedMariaDB(testContainer.GetMariaDBConfig()) + t.Cleanup(teardown) + + resRecord := createRequest(http.MethodGet, url, "", nil) + + assert.Equal(t, http.StatusUnauthorized, resRecord.Code) +} + func createRequest( method string, url string, diff --git a/delivery/http_server/end2end/setup/seed_data/1_create-admins.sql b/delivery/http_server/end2end/setup/seed_data/1_create-admins.sql index ec0cefca..11aff6a4 100644 --- a/delivery/http_server/end2end/setup/seed_data/1_create-admins.sql +++ b/delivery/http_server/end2end/setup/seed_data/1_create-admins.sql @@ -42,7 +42,20 @@ VALUES 'admin.agent.01@gmail.com', 'male', 'active' + ), + ( + 5, + 'ruhi', + 'hosseini', + -- password is: Abc123456 + '$2a$10$A4qiAep9OGYe2aFT3Tn1cuJfj99Xp6WA2F0SN9I7zAS01JGFU7XAO', + '09384664404', + 'agent', + 'testing', + 'admin.agent.02@gmail.com', + 'male', + 'active' ); -- +migrate Down -DELETE FROM `admins` WHERE id != 1; \ No newline at end of file +DELETE FROM `admins` WHERE id != 1;