diff --git a/backend/app/rest/api/rest_private_test.go b/backend/app/rest/api/rest_private_test.go index f075b4ec..ccb26f2a 100644 --- a/backend/app/rest/api/rest_private_test.go +++ b/backend/app/rest/api/rest_private_test.go @@ -353,7 +353,6 @@ func TestRest_Vote(t *testing.T) { fmt.Sprintf("%s/api/v1/vote/%s?site=radio-t&url=https://radio-t.com/blah&vote=%d", ts.URL, id1, val), nil) assert.Nil(t, err) req.Header.Add("X-JWT", devToken) - //req.SetBasicAuth("admin", "password") resp, err := client.Do(req) assert.Nil(t, err) return resp.StatusCode @@ -370,15 +369,6 @@ func TestRest_Vote(t *testing.T) { assert.Equal(t, 1, cr.Vote) assert.Equal(t, map[string]bool(nil), cr.Votes) - body, code = get(t, fmt.Sprintf("%s/api/v1/id/%s?site=radio-t&url=https://radio-t.com/blah", ts.URL, id1)) - assert.Equal(t, 200, code) - cr = store.Comment{} - err = json.Unmarshal([]byte(body), &cr) - assert.Nil(t, err) - assert.Equal(t, 1, cr.Score) - assert.Equal(t, 0, cr.Vote, "no vote info for not authed user") - assert.Equal(t, map[string]bool(nil), cr.Votes) - assert.Equal(t, 200, vote(-1), "opposite vote allowed") body, code = getWithDevAuth(t, fmt.Sprintf("%s/api/v1/id/%s?site=radio-t&url=https://radio-t.com/blah", ts.URL, id1)) assert.Equal(t, 200, code) @@ -386,6 +376,35 @@ func TestRest_Vote(t *testing.T) { err = json.Unmarshal([]byte(body), &cr) assert.Nil(t, err) assert.Equal(t, 0, cr.Score) + assert.Equal(t, 0, cr.Vote) + + assert.Equal(t, 200, vote(-1), "opposite vote allowed one more time") + body, code = getWithDevAuth(t, fmt.Sprintf("%s/api/v1/id/%s?site=radio-t&url=https://radio-t.com/blah", ts.URL, id1)) + assert.Equal(t, 200, code) + cr = store.Comment{} + err = json.Unmarshal([]byte(body), &cr) + assert.Nil(t, err) + assert.Equal(t, -1, cr.Score) + assert.Equal(t, -1, cr.Vote) + + assert.Equal(t, 400, vote(-1), "dbl vote not allowed") + body, code = getWithDevAuth(t, fmt.Sprintf("%s/api/v1/id/%s?site=radio-t&url=https://radio-t.com/blah", ts.URL, id1)) + assert.Equal(t, 200, code) + cr = store.Comment{} + err = json.Unmarshal([]byte(body), &cr) + assert.Nil(t, err) + assert.Equal(t, -1, cr.Score) + assert.Equal(t, -1, cr.Vote) + + body, code = get(t, fmt.Sprintf("%s/api/v1/id/%s?site=radio-t&url=https://radio-t.com/blah", ts.URL, id1)) + assert.Equal(t, 200, code) + cr = store.Comment{} + err = json.Unmarshal([]byte(body), &cr) + assert.Nil(t, err) + assert.Equal(t, -1, cr.Score) + assert.Equal(t, 0, cr.Vote, "no vote info for not authed user") + assert.Equal(t, map[string]bool(nil), cr.Votes) + assert.Equal(t, map[string]bool(nil), cr.Votes) } diff --git a/backend/app/store/comment.go b/backend/app/store/comment.go index 6bc43490..4412e7ae 100644 --- a/backend/app/store/comment.go +++ b/backend/app/store/comment.go @@ -18,7 +18,7 @@ type Comment struct { Locator Locator `json:"locator"` Score int `json:"score"` Votes map[string]bool `json:"votes,omitempty"` - Vote int `json:"vote"` // vote for the current user + Vote int `json:"vote"` // vote for the current user, -1/1/0. set by rest from Votes Controversy float64 `json:"controversy,omitempty"` Timestamp time.Time `json:"time" bson:"time"` Edit *Edit `json:"edit,omitempty" bson:"edit,omitempty"` // pointer to have empty default in json response