added todos and review
This commit is contained in:
parent
47859d86e4
commit
d7bf895b60
@ -1771,15 +1771,16 @@ func updateLeadTargetRequest(token string, body map[string]interface{}) (*http.R
|
||||
|
||||
// отсмотрено
|
||||
func TestUpdateLeadTarget_Success(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(validToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 123,
|
||||
"quizID": quizID,
|
||||
"target": "old@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, "123")
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
@ -1921,15 +1922,16 @@ func TestUpdateLeadTarget_Security(t *testing.T) {
|
||||
// отсмотрено
|
||||
func TestUpdateLeadTarget_Performance(t *testing.T) {
|
||||
t.Run("ResponseTime", func(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(validToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 456,
|
||||
"quizID": quizID,
|
||||
"target": "perf@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, "123")
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
@ -1954,15 +1956,16 @@ func TestUpdateLeadTarget_Performance(t *testing.T) {
|
||||
// отсмотрено
|
||||
func TestUpdateLeadTarget_BoundaryCases(t *testing.T) {
|
||||
t.Run("MaxLengthTarget", func(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(validToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 456,
|
||||
"quizID": quizID,
|
||||
"target": "perf@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, "123")
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
@ -1982,15 +1985,16 @@ func TestUpdateLeadTarget_BoundaryCases(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("SpecialCharacters", func(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(validToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 456,
|
||||
"quizID": quizID,
|
||||
"target": "perf@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, "123")
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
@ -2009,16 +2013,18 @@ func TestUpdateLeadTarget_BoundaryCases(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestDeleteLeadTarget_SpecialCases(t *testing.T) {
|
||||
t.Run("TransactionAtomicity", func(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(deleteLeadTargetToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 123,
|
||||
"quizID": quizID,
|
||||
"target": "atomic@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, "123")
|
||||
getResp, err := getLeadTargetByQuizIDRequest(validToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
@ -2044,33 +2050,35 @@ func deleteLeadTargetRequest(token string, targetID int64) (*http.Response, erro
|
||||
return http.DefaultClient.Do(req)
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestDeleteLeadTarget_Success(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(deleteLeadTargetToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 123,
|
||||
"quizID": quizID,
|
||||
"target": "delete@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
|
||||
var createResult map[string]interface{}
|
||||
err = json.NewDecoder(createResp.Body).Decode(&createResult)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(deleteLeadTargetToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
targetID := fmt.Sprintf("%v", createResult["id"])
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
var getRespLead []model.LeadTarget
|
||||
err = json.NewDecoder(getResp.Body).Decode(&getRespLead)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, len(getRespLead) > 0)
|
||||
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, targetID)
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, getRespLead[0].ID)
|
||||
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 map[string]interface{}
|
||||
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, targetID, fmt.Sprintf("%v", result["id"]))
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestDeleteLeadTarget_Auth(t *testing.T) {
|
||||
t.Run("NoToken", func(t *testing.T) {
|
||||
req, err := http.NewRequest("DELETE", baseURL+"/account/leadtarget/123", nil)
|
||||
@ -2081,24 +2089,25 @@ func TestDeleteLeadTarget_Auth(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("InvalidToken", func(t *testing.T) {
|
||||
resp, err := deleteLeadTargetRequest("invalid_token", "123")
|
||||
resp, err := deleteLeadTargetRequest("invalid_token", 123)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("ExpiredToken", func(t *testing.T) {
|
||||
resp, err := deleteLeadTargetRequest(expiredToken, "123")
|
||||
resp, err := deleteLeadTargetRequest(expiredToken, 123)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, http.StatusUnauthorized, resp.StatusCode)
|
||||
})
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestDeleteLeadTarget_InputValidation(t *testing.T) {
|
||||
t.Run("InvalidID", func(t *testing.T) {
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, "invalid_id")
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, 999999)
|
||||
assert.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
||||
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("EmptyID", func(t *testing.T) {
|
||||
@ -2111,46 +2120,37 @@ func TestDeleteLeadTarget_InputValidation(t *testing.T) {
|
||||
})
|
||||
|
||||
t.Run("NonExistentID", func(t *testing.T) {
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, "999999")
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, 999999)
|
||||
assert.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
||||
})
|
||||
}
|
||||
|
||||
func TestDeleteLeadTarget_Security(t *testing.T) {
|
||||
t.Run("SQLInjection", func(t *testing.T) {
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, "1' OR '1'='1")
|
||||
assert.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("XSSAttack", func(t *testing.T) {
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, xssInput)
|
||||
assert.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
||||
})
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestDeleteLeadTarget_Performance(t *testing.T) {
|
||||
t.Run("ResponseTime", func(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(deleteLeadTargetToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 456,
|
||||
"quizID": quizID,
|
||||
"target": "perf_delete@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
|
||||
var createResult map[string]interface{}
|
||||
err = json.NewDecoder(createResp.Body).Decode(&createResult)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(deleteLeadTargetToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
targetID := fmt.Sprintf("%v", createResult["id"])
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
var getRespLead []model.LeadTarget
|
||||
err = json.NewDecoder(getResp.Body).Decode(&getRespLead)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, len(getRespLead) > 0)
|
||||
|
||||
start := time.Now()
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, targetID)
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, getRespLead[0].ID)
|
||||
duration := time.Since(start)
|
||||
|
||||
assert.NoError(t, err)
|
||||
@ -2164,24 +2164,31 @@ func TestDeleteLeadTarget_Performance(t *testing.T) {
|
||||
wg.Add(1)
|
||||
go func(index int) {
|
||||
defer wg.Done()
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(deleteLeadTargetToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 2000 + index,
|
||||
"quizID": quizID,
|
||||
"target": fmt.Sprintf("load_delete%d@mail.com", index),
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
|
||||
var createResult map[string]interface{}
|
||||
err = json.NewDecoder(createResp.Body).Decode(&createResult)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(deleteLeadTargetToken, fmt.Sprintf("%d", quizID))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
targetID := fmt.Sprintf("%v", createResult["id"])
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
var getRespLead []model.LeadTarget
|
||||
err = json.NewDecoder(getResp.Body).Decode(&getRespLead)
|
||||
if err != nil || len(getRespLead) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, targetID)
|
||||
resp, err := deleteLeadTargetRequest(deleteLeadTargetToken, getRespLead[0].ID)
|
||||
if err == nil && resp != nil {
|
||||
resp.Body.Close()
|
||||
}
|
||||
@ -2191,25 +2198,32 @@ func TestDeleteLeadTarget_Performance(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestDeleteLeadTarget_AlreadyDeleted(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(deleteLeadTargetToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 789,
|
||||
"quizID": quizID,
|
||||
"target": "already_deleted@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
|
||||
var createResult map[string]interface{}
|
||||
err = json.NewDecoder(createResp.Body).Decode(&createResult)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(deleteLeadTargetToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
targetID := fmt.Sprintf("%v", createResult["id"])
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
var getRespLead []model.LeadTarget
|
||||
err = json.NewDecoder(getResp.Body).Decode(&getRespLead)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, len(getRespLead) > 0)
|
||||
|
||||
resp1, err := deleteLeadTargetRequest(deleteLeadTargetToken, targetID)
|
||||
resp1, err := deleteLeadTargetRequest(deleteLeadTargetToken, getRespLead[0].ID)
|
||||
assert.NoError(t, err)
|
||||
resp1.Body.Close()
|
||||
|
||||
resp2, err := deleteLeadTargetRequest(deleteLeadTargetToken, targetID)
|
||||
resp2, err := deleteLeadTargetRequest(deleteLeadTargetToken, getRespLead[0].ID)
|
||||
assert.NoError(t, err)
|
||||
defer resp2.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, resp2.StatusCode)
|
||||
@ -2224,35 +2238,35 @@ func getLeadTargetByQuizIDRequest(token string, quizID string) (*http.Response,
|
||||
return http.DefaultClient.Do(req)
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestGetLeadTargetByQuizID_Success(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(validToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 123,
|
||||
"quizID": quizID,
|
||||
"target": "get@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
|
||||
var createResult map[string]interface{}
|
||||
err = json.NewDecoder(createResp.Body).Decode(&createResult)
|
||||
assert.NoError(t, err)
|
||||
|
||||
resp, err := getLeadTargetByQuizIDRequest(validToken, "123")
|
||||
resp, err := getLeadTargetByQuizIDRequest(validToken, fmt.Sprintf("%d", quizID))
|
||||
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 map[string]interface{}
|
||||
var result []model.LeadTarget
|
||||
err = json.NewDecoder(resp.Body).Decode(&result)
|
||||
assert.NoError(t, err)
|
||||
assert.NotEmpty(t, result["id"])
|
||||
assert.Equal(t, float64(123), result["quizID"])
|
||||
assert.Equal(t, "mail", result["type"])
|
||||
assert.Equal(t, "get@mail.com", result["target"])
|
||||
assert.True(t, len(result) > 0)
|
||||
assert.Equal(t, quizID, result[0].QuizID)
|
||||
assert.Equal(t, model.LeadTargetType("mail"), result[0].Type)
|
||||
assert.Equal(t, "get@mail.com", result[0].Target)
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestGetLeadTargetByQuizID_Auth(t *testing.T) {
|
||||
t.Run("NoToken", func(t *testing.T) {
|
||||
req, err := http.NewRequest("GET", baseURL+"/account/leadtarget/123", nil)
|
||||
@ -2275,6 +2289,7 @@ func TestGetLeadTargetByQuizID_Auth(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestGetLeadTargetByQuizID_InputValidation(t *testing.T) {
|
||||
t.Run("InvalidQuizID", func(t *testing.T) {
|
||||
resp, err := getLeadTargetByQuizIDRequest(validToken, "invalid_id")
|
||||
@ -2289,17 +2304,11 @@ func TestGetLeadTargetByQuizID_InputValidation(t *testing.T) {
|
||||
req.Header.Set("Authorization", "Bearer "+validToken)
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
|
||||
})
|
||||
|
||||
t.Run("NonExistentQuizID", func(t *testing.T) {
|
||||
resp, err := getLeadTargetByQuizIDRequest(validToken, "999999")
|
||||
assert.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
assert.Equal(t, http.StatusNotFound, resp.StatusCode)
|
||||
assert.Equal(t, http.StatusMethodNotAllowed, resp.StatusCode)
|
||||
})
|
||||
}
|
||||
|
||||
// todo
|
||||
func TestGetLeadTargetByQuizID_Security(t *testing.T) {
|
||||
t.Run("SQLInjection", func(t *testing.T) {
|
||||
resp, err := getLeadTargetByQuizIDRequest(validToken, "1' OR '1'='1")
|
||||
@ -2316,6 +2325,7 @@ func TestGetLeadTargetByQuizID_Security(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestGetLeadTargetByQuizID_Performance(t *testing.T) {
|
||||
t.Run("ResponseTime", func(t *testing.T) {
|
||||
createResp, err := createLeadTargetRequest(validToken, map[string]interface{}{
|
||||
@ -2359,28 +2369,40 @@ func TestGetLeadTargetByQuizID_Performance(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
// отсмотрено
|
||||
func TestGetLeadTargetByQuizID_DeletedTarget(t *testing.T) {
|
||||
quizID := faker.Int32()
|
||||
createResp, err := createLeadTargetRequest(deleteLeadTargetToken, map[string]interface{}{
|
||||
"type": "mail",
|
||||
"quizID": 999,
|
||||
"quizID": quizID,
|
||||
"target": "deleted@mail.com",
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
defer createResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, createResp.StatusCode)
|
||||
|
||||
var createResult map[string]interface{}
|
||||
err = json.NewDecoder(createResp.Body).Decode(&createResult)
|
||||
getResp, err := getLeadTargetByQuizIDRequest(deleteLeadTargetToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
targetID := fmt.Sprintf("%v", createResult["id"])
|
||||
defer getResp.Body.Close()
|
||||
assert.Equal(t, http.StatusOK, getResp.StatusCode)
|
||||
var getRespLead []model.LeadTarget
|
||||
err = json.NewDecoder(getResp.Body).Decode(&getRespLead)
|
||||
assert.NoError(t, err)
|
||||
assert.True(t, len(getRespLead) > 0)
|
||||
|
||||
deleteResp, err := deleteLeadTargetRequest(deleteLeadTargetToken, targetID)
|
||||
deleteResp, err := deleteLeadTargetRequest(deleteLeadTargetToken, getRespLead[0].ID)
|
||||
assert.NoError(t, err)
|
||||
deleteResp.Body.Close()
|
||||
|
||||
resp, err := getLeadTargetByQuizIDRequest(deleteLeadTargetToken, "999")
|
||||
resp, err := getLeadTargetByQuizIDRequest(deleteLeadTargetToken, fmt.Sprintf("%d", quizID))
|
||||
assert.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
assert.Equal(t, http.StatusNotFound, resp.StatusCode)
|
||||
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
||||
|
||||
//todo сомнительное надо бы там на len проверять ответ из бдшки
|
||||
var getRespLead2 []model.LeadTarget
|
||||
err = json.NewDecoder(getResp.Body).Decode(&getRespLead2)
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func createQuestionRequest(token string, body map[string]interface{}) (*http.Response, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user