added test for GET /accounts
This commit is contained in:
parent
c53d26abf7
commit
f5839b30c8
@ -16,6 +16,7 @@ var baseURL = os.Getenv("API_BASE_URL")
|
|||||||
var validToken = os.Getenv("VALID_JWT_TOKEN")
|
var validToken = os.Getenv("VALID_JWT_TOKEN")
|
||||||
var expiredToken = os.Getenv("EXPIRED_JWT_TOKEN")
|
var expiredToken = os.Getenv("EXPIRED_JWT_TOKEN")
|
||||||
var validTokenForDelete = os.Getenv("VALID_JWT_TOKEN_FOR_DELETE")
|
var validTokenForDelete = os.Getenv("VALID_JWT_TOKEN_FOR_DELETE")
|
||||||
|
var validAdminToken = os.Getenv("VALID_ADMIN_JWT_TOKEN")
|
||||||
|
|
||||||
var existingUserID = os.Getenv("EXISTING_USER_ID")
|
var existingUserID = os.Getenv("EXISTING_USER_ID")
|
||||||
var testUserID = os.Getenv("TEST_USER_ID")
|
var testUserID = os.Getenv("TEST_USER_ID")
|
||||||
@ -339,3 +340,185 @@ func TestDeleteAccount_Load(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// todo 3.3.7 3.3.8 3.4
|
// todo 3.3.7 3.3.8 3.4
|
||||||
|
|
||||||
|
func TestGetAccounts_Success(t *testing.T) {
|
||||||
|
body := map[string]interface{}{
|
||||||
|
"limit": 10,
|
||||||
|
"page": 1,
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(body)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req.Header.Set("Authorization", "Bearer "+validAdminToken)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
||||||
|
assert.Equal(t, "application/json", resp.Header.Get("Content-Type"))
|
||||||
|
|
||||||
|
var result struct {
|
||||||
|
Count uint64 `json:"count"`
|
||||||
|
Items []model.Account `json:"items"`
|
||||||
|
}
|
||||||
|
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.LessOrEqual(t, len(result.Items), 2)
|
||||||
|
for _, acc := range result.Items {
|
||||||
|
assert.NotEmpty(t, acc.ID)
|
||||||
|
assert.NotEmpty(t, acc.UserID)
|
||||||
|
assert.NotEmpty(t, acc.CreatedAt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetAccounts_Auth(t *testing.T) {
|
||||||
|
t.Run("NoToken", func(t *testing.T) {
|
||||||
|
body := map[string]interface{}{
|
||||||
|
"limit": 10,
|
||||||
|
"page": 1,
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(body)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("InvalidToken", func(t *testing.T) {
|
||||||
|
body := map[string]interface{}{
|
||||||
|
"limit": 10,
|
||||||
|
"page": 1,
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(body)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req.Header.Set("Authorization", "Bearer invalid_token")
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("ExpiredToken", func(t *testing.T) {
|
||||||
|
body := map[string]interface{}{
|
||||||
|
"limit": 10,
|
||||||
|
"page": 1,
|
||||||
|
}
|
||||||
|
b, err := json.Marshal(body)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req.Header.Set("Authorization", "Bearer "+expiredToken)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetAccounts_Pagination(t *testing.T) {
|
||||||
|
t.Run("ValidPagination", func(t *testing.T) {
|
||||||
|
body := map[string]interface{}{"limit": 5, "page": 1}
|
||||||
|
b, err := json.Marshal(body)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req.Header.Set("Authorization", "Bearer "+validAdminToken)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
||||||
|
})
|
||||||
|
// todo
|
||||||
|
//t.Run("ZeroPagination", func(t *testing.T) {
|
||||||
|
// body := map[string]interface{}{"limit": 0, "page": 0}
|
||||||
|
// b, err := json.Marshal(body)
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
// req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
// req.Header.Set("Authorization", "Bearer "+validAdminToken)
|
||||||
|
// req.Header.Set("Content-Type", "application/json")
|
||||||
|
//
|
||||||
|
// resp, err := http.DefaultClient.Do(req)
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
// defer resp.Body.Close()
|
||||||
|
// assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
||||||
|
//})
|
||||||
|
|
||||||
|
// todo
|
||||||
|
//t.Run("TooHighLimit", func(t *testing.T) {
|
||||||
|
// body := map[string]interface{}{"limit": 1000}
|
||||||
|
// b, err := json.Marshal(body)
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
// req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
// req.Header.Set("Authorization", "Bearer "+validAdminToken)
|
||||||
|
// req.Header.Set("Content-Type", "application/json")
|
||||||
|
//
|
||||||
|
// resp, err := http.DefaultClient.Do(req)
|
||||||
|
// assert.NoError(t, err)
|
||||||
|
// defer resp.Body.Close()
|
||||||
|
// assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
||||||
|
//})
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo 4.3.4 4.3.5
|
||||||
|
|
||||||
|
func TestGetAccounts_Performance(t *testing.T) {
|
||||||
|
t.Run("ResponseTimeUnder500ms", func(t *testing.T) {
|
||||||
|
body := map[string]interface{}{"limit": 10, "page": 1}
|
||||||
|
b, err := json.Marshal(body)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req.Header.Set("Authorization", "Bearer "+validAdminToken)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
start := time.Now()
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
duration := time.Since(start)
|
||||||
|
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
assert.Less(t, duration.Milliseconds(), int64(500))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("LoadTest100Requests", func(t *testing.T) {
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
for i := 0; i < 100; i++ {
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
body := map[string]interface{}{"limit": 10, "page": 1}
|
||||||
|
b, err := json.Marshal(body)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req, err := http.NewRequest("GET", baseURL+"/accounts", bytes.NewReader(b))
|
||||||
|
assert.NoError(t, err)
|
||||||
|
req.Header.Set("Authorization", "Bearer "+validAdminToken)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
if err == nil {
|
||||||
|
resp.Body.Close()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo 4.3.7 4.3.8 4.4
|
||||||
|
Loading…
Reference in New Issue
Block a user