From 547718487b49e31eb7681c5ed4eb0e603eda3728 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 19 Apr 2017 15:04:21 +0800 Subject: [PATCH 1/5] feat: add download count field and unit testing. --- cmd/web.go | 5 +++ models/attachment.go | 31 ++++++++++----- models/attachment_test.go | 58 +++++++++++++++++++++++++++ models/fixtures/attachment.yml | 71 ++++++++++++++++++++++++++++++++++ 4 files changed, 156 insertions(+), 9 deletions(-) create mode 100644 models/attachment_test.go create mode 100644 models/fixtures/attachment.yml diff --git a/cmd/web.go b/cmd/web.go index 411b50d9bf0e2..751d9923996f7 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -350,6 +350,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 diff --git a/models/attachment.go b/models/attachment.go index 5fd90bef130b6..3211782b73f94 100644 --- a/models/attachment.go +++ b/models/attachment.go @@ -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"` + CommentID int64 + ReleaseID int64 `xorm:"INDEX"` + Name string + DownloadCount int64 + 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 repository 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 { diff --git a/models/attachment_test.go b/models/attachment_test.go new file mode 100644 index 0000000000000..3c0ce1ee85ce2 --- /dev/null +++ b/models/attachment_test.go @@ -0,0 +1,58 @@ +// 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) + + // 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.NoError(t, err) + assert.Nil(t, attachment) +} diff --git a/models/fixtures/attachment.yml b/models/fixtures/attachment.yml new file mode 100644 index 0000000000000..99bd5453ee2a0 --- /dev/null +++ b/models/fixtures/attachment.yml @@ -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 From f54b8759c9e3b45ce439b13077f848d61cae5bed Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 19 Apr 2017 15:25:55 +0800 Subject: [PATCH 2/5] fix: unit testing --- models/attachment_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/models/attachment_test.go b/models/attachment_test.go index 3c0ce1ee85ce2..9e414dfa290e1 100644 --- a/models/attachment_test.go +++ b/models/attachment_test.go @@ -53,6 +53,7 @@ func TestDeleteAttachments(t *testing.T) { assert.NoError(t, err) attachment, err := GetAttachmentByUUID("test-12345") - assert.NoError(t, err) + assert.Error(t, err) + assert.True(t, IsErrAttachmentNotExist(err)) assert.Nil(t, attachment) } From 8278ac976780fff9a42d2e1bbffba37a480b55e5 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 19 Apr 2017 15:34:24 +0800 Subject: [PATCH 3/5] refactor: improve testing. --- models/attachment_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/models/attachment_test.go b/models/attachment_test.go index 9e414dfa290e1..5fdac31b413fe 100644 --- a/models/attachment_test.go +++ b/models/attachment_test.go @@ -15,6 +15,7 @@ func TestIncreaseDownloadCount(t *testing.T) { attachment, err := GetAttachmentByUUID("1234567890") assert.NoError(t, err) + assert.Equal(t, int64(0), attachment.DownloadCount) // increase download count err = attachment.IncreaseDownloadCount() From e7d605cb60cf2bfacdba48cb4433c2cf085f76a9 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 19 Apr 2017 15:42:34 +0800 Subject: [PATCH 4/5] fix: update comment --- models/attachment.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/attachment.go b/models/attachment.go index 3211782b73f94..b0055f83fad55 100644 --- a/models/attachment.go +++ b/models/attachment.go @@ -50,7 +50,7 @@ func (a *Attachment) IncreaseDownloadCount() error { sess := x.NewSession() defer sessionRelease(sess) - // Update repository count. + // 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) } From e35bbb2f1b2e195ab02de1c606367056e486de76 Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 19 Apr 2017 21:41:45 +0800 Subject: [PATCH 5/5] add default value. Signed-off-by: Bo-Yi Wu --- models/attachment.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/attachment.go b/models/attachment.go index b0055f83fad55..d800a47109da7 100644 --- a/models/attachment.go +++ b/models/attachment.go @@ -23,10 +23,10 @@ type Attachment struct { ID int64 `xorm:"pk autoincr"` UUID string `xorm:"uuid UNIQUE"` IssueID int64 `xorm:"INDEX"` + ReleaseID int64 `xorm:"INDEX"` CommentID int64 - ReleaseID int64 `xorm:"INDEX"` Name string - DownloadCount int64 + DownloadCount int64 `xorm:"DEFAULT 0"` Created time.Time `xorm:"-"` CreatedUnix int64 }