* 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.21.12.1
| @@ -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 | |||