* feat: add download count field and unit testing. * fix: unit testing * refactor: improve testing. * fix: update comment * add default value. Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>tags/v1.2.0-rc1
@@ -351,6 +351,11 @@ func runWeb(ctx *cli.Context) error { | |||
} | |||
defer fr.Close() | |||
if err := attach.IncreaseDownloadCount(); err != nil { | |||
ctx.Handle(500, "Update", err) | |||
return | |||
} | |||
if err = repo.ServeData(ctx, attach.Name, fr); err != nil { | |||
ctx.Handle(500, "ServeData", err) | |||
return |
@@ -20,15 +20,15 @@ import ( | |||
// Attachment represent a attachment of issue/comment/release. | |||
type Attachment struct { | |||
ID int64 `xorm:"pk autoincr"` | |||
UUID string `xorm:"uuid UNIQUE"` | |||
IssueID int64 `xorm:"INDEX"` | |||
CommentID int64 | |||
ReleaseID int64 `xorm:"INDEX"` | |||
Name string | |||
Created time.Time `xorm:"-"` | |||
CreatedUnix int64 | |||
ID int64 `xorm:"pk autoincr"` | |||
UUID string `xorm:"uuid UNIQUE"` | |||
IssueID int64 `xorm:"INDEX"` | |||
ReleaseID int64 `xorm:"INDEX"` | |||
CommentID int64 | |||
Name string | |||
DownloadCount int64 `xorm:"DEFAULT 0"` | |||
Created time.Time `xorm:"-"` | |||
CreatedUnix int64 | |||
} | |||
// BeforeInsert is invoked from XORM before inserting an object of this type. | |||
@@ -45,6 +45,19 @@ func (a *Attachment) AfterSet(colName string, _ xorm.Cell) { | |||
} | |||
} | |||
// IncreaseDownloadCount is update download count + 1 | |||
func (a *Attachment) IncreaseDownloadCount() error { | |||
sess := x.NewSession() | |||
defer sessionRelease(sess) | |||
// Update download count. | |||
if _, err := sess.Exec("UPDATE `attachment` SET download_count=download_count+1 WHERE id=?", a.ID); err != nil { | |||
return fmt.Errorf("increase attachment count: %v", err) | |||
} | |||
return nil | |||
} | |||
// AttachmentLocalPath returns where attachment is stored in local file | |||
// system based on given UUID. | |||
func AttachmentLocalPath(uuid string) string { |
@@ -0,0 +1,60 @@ | |||
// Copyright 2017 The Gitea Authors. All rights reserved. | |||
// Use of this source code is governed by a MIT-style | |||
// license that can be found in the LICENSE file. | |||
package models | |||
import ( | |||
"testing" | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func TestIncreaseDownloadCount(t *testing.T) { | |||
assert.NoError(t, PrepareTestDatabase()) | |||
attachment, err := GetAttachmentByUUID("1234567890") | |||
assert.NoError(t, err) | |||
assert.Equal(t, int64(0), attachment.DownloadCount) | |||
// increase download count | |||
err = attachment.IncreaseDownloadCount() | |||
assert.NoError(t, err) | |||
attachment, err = GetAttachmentByUUID("1234567890") | |||
assert.NoError(t, err) | |||
assert.Equal(t, int64(1), attachment.DownloadCount) | |||
} | |||
func TestGetByCommentOrIssueID(t *testing.T) { | |||
assert.NoError(t, PrepareTestDatabase()) | |||
// count of attachments from issue ID | |||
attachments, err := GetAttachmentsByIssueID(1) | |||
assert.NoError(t, err) | |||
assert.Equal(t, 2, len(attachments)) | |||
attachments, err = GetAttachmentsByCommentID(1) | |||
assert.NoError(t, err) | |||
assert.Equal(t, 2, len(attachments)) | |||
} | |||
func TestDeleteAttachments(t *testing.T) { | |||
assert.NoError(t, PrepareTestDatabase()) | |||
count, err := DeleteAttachmentsByIssue(4, false) | |||
assert.NoError(t, err) | |||
assert.Equal(t, 1, count) | |||
count, err = DeleteAttachmentsByComment(2, false) | |||
assert.NoError(t, err) | |||
assert.Equal(t, 2, count) | |||
err = DeleteAttachment(&Attachment{ID: 8}, false) | |||
assert.NoError(t, err) | |||
attachment, err := GetAttachmentByUUID("test-12345") | |||
assert.Error(t, err) | |||
assert.True(t, IsErrAttachmentNotExist(err)) | |||
assert.Nil(t, attachment) | |||
} |
@@ -0,0 +1,71 @@ | |||
- | |||
id: 1 | |||
uuid: 1234567890 | |||
issue_id: 1 | |||
comment_id: 0 | |||
name: attach1 | |||
download_count: 0 | |||
created_unix: 946684800 | |||
- | |||
id: 2 | |||
uuid: 1122334455 | |||
issue_id: 1 | |||
comment_id: 0 | |||
name: attach2 | |||
download_count: 1 | |||
created_unix: 946684800 | |||
- | |||
id: 3 | |||
uuid: comment-id-1 | |||
issue_id: 2 | |||
comment_id: 1 | |||
name: attach1 | |||
download_count: 0 | |||
created_unix: 946684800 | |||
- | |||
id: 4 | |||
uuid: comment-id-2 | |||
issue_id: 3 | |||
comment_id: 1 | |||
name: attach2 | |||
download_count: 1 | |||
created_unix: 946684800 | |||
- | |||
id: 5 | |||
uuid: comment-id-3 | |||
issue_id: 4 | |||
comment_id: 0 | |||
name: attach1 | |||
download_count: 0 | |||
created_unix: 946684800 | |||
- | |||
id: 6 | |||
uuid: comment-id-4 | |||
issue_id: 5 | |||
comment_id: 2 | |||
name: attach1 | |||
download_count: 0 | |||
created_unix: 946684800 | |||
- | |||
id: 7 | |||
uuid: comment-id-5 | |||
issue_id: 5 | |||
comment_id: 2 | |||
name: attach1 | |||
download_count: 0 | |||
created_unix: 946684800 | |||
- | |||
id: 8 | |||
uuid: test-12345 | |||
issue_id: 6 | |||
comment_id: 0 | |||
name: attach1 | |||
download_count: 0 | |||
created_unix: 946684800 |