* 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
} | } | ||||
defer fr.Close() | 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 { | if err = repo.ServeData(ctx, attach.Name, fr); err != nil { | ||||
ctx.Handle(500, "ServeData", err) | ctx.Handle(500, "ServeData", err) | ||||
return | return |
// Attachment represent a attachment of issue/comment/release. | // Attachment represent a attachment of issue/comment/release. | ||||
type Attachment struct { | 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. | // BeforeInsert is invoked from XORM before inserting an object of this type. | ||||
} | } | ||||
} | } | ||||
// 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 | // AttachmentLocalPath returns where attachment is stored in local file | ||||
// system based on given UUID. | // system based on given UUID. | ||||
func AttachmentLocalPath(uuid string) string { | func AttachmentLocalPath(uuid string) string { |
// 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) | |||||
} |
- | |||||
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 |