diff --git a/models/issue.go b/models/issue.go index a83cfd650..d40b81eb3 100644 --- a/models/issue.go +++ b/models/issue.go @@ -580,6 +580,7 @@ func (issue *Issue) ReadBy(userID int64) error { } func updateIssueCols(e Engine, issue *Issue, cols ...string) error { + cols = append(cols, "updated_unix") if _, err := e.Id(issue.ID).Cols(cols...).Update(issue); err != nil { return err } diff --git a/models/issue_comment.go b/models/issue_comment.go index 326676ecf..753e79b3d 100644 --- a/models/issue_comment.go +++ b/models/issue_comment.go @@ -399,7 +399,11 @@ func createComment(e *xorm.Session, opts *CreateCommentOptions) (_ *Comment, err if err != nil { return nil, err } + } + // update the issue's updated_unix column + if err = updateIssueCols(e, opts.Issue); err != nil { + return nil, err } // Notify watchers for whatever action comes in, ignore if no action type. diff --git a/models/issue_comment_test.go b/models/issue_comment_test.go new file mode 100644 index 000000000..86fc32a8d --- /dev/null +++ b/models/issue_comment_test.go @@ -0,0 +1,41 @@ +// 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" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestCreateComment(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + + issue := AssertExistsAndLoadBean(t, &Issue{}).(*Issue) + repo := AssertExistsAndLoadBean(t, &Repository{ID: issue.RepoID}).(*Repository) + doer := AssertExistsAndLoadBean(t, &User{ID: repo.OwnerID}).(*User) + + now := time.Now().Unix() + comment, err := CreateComment(&CreateCommentOptions{ + Type: CommentTypeComment, + Doer: doer, + Repo: repo, + Issue: issue, + Content: "Hello", + }) + assert.NoError(t, err) + then := time.Now().Unix() + + assert.EqualValues(t, CommentTypeComment, comment.Type) + assert.EqualValues(t, "Hello", comment.Content) + assert.EqualValues(t, issue.ID, comment.IssueID) + assert.EqualValues(t, doer.ID, comment.PosterID) + AssertInt64InRange(t, now, then, comment.CreatedUnix) + AssertExistsAndLoadBean(t, comment) // assert actually added to DB + + updatedIssue := AssertExistsAndLoadBean(t, &Issue{ID: issue.ID}).(*Issue) + AssertInt64InRange(t, now, then, updatedIssue.UpdatedUnix) +} diff --git a/models/issue_test.go b/models/issue_test.go index d135b534d..8a8ccce45 100644 --- a/models/issue_test.go +++ b/models/issue_test.go @@ -7,6 +7,7 @@ package models import ( "sort" "testing" + "time" "github.com/stretchr/testify/assert" ) @@ -146,3 +147,23 @@ func TestIssue_ClearLabels(t *testing.T) { AssertNotExistsBean(t, &IssueLabel{IssueID: test.issueID}) } } + +func TestUpdateIssueCols(t *testing.T) { + assert.NoError(t, PrepareTestDatabase()) + issue := AssertExistsAndLoadBean(t, &Issue{}).(*Issue) + + const newTitle = "New Title for unit test" + issue.Title = newTitle + + prevContent := issue.Content + issue.Content = "This should have no effect" + + now := time.Now().Unix() + assert.NoError(t, UpdateIssueCols(issue, "name")) + then := time.Now().Unix() + + updatedIssue := AssertExistsAndLoadBean(t, &Issue{ID: issue.ID}).(*Issue) + assert.EqualValues(t, newTitle, updatedIssue.Title) + assert.EqualValues(t, prevContent, updatedIssue.Content) + AssertInt64InRange(t, now, then, updatedIssue.UpdatedUnix) +} diff --git a/models/unit_tests.go b/models/unit_tests.go index 774fb883c..b4b36ba6b 100644 --- a/models/unit_tests.go +++ b/models/unit_tests.go @@ -92,3 +92,9 @@ func AssertSuccessfulInsert(t *testing.T, beans ...interface{}) { func AssertCount(t *testing.T, bean interface{}, expected interface{}) { assert.EqualValues(t, expected, GetCount(t, bean)) } + +// AssertInt64InRange assert value is in range [low, high] +func AssertInt64InRange(t *testing.T, low, high, value int64) { + assert.True(t, value >= low && value <= high, + "Expected value in range [%d, %d], found %d", low, high, value) +}