aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2021-04-18 20:37:47 +0200
committerGitHub <noreply@github.com>2021-04-18 20:37:47 +0200
commit24155156223595e48f215e87cf9ce7895e22f4a7 (patch)
tree84bb7a57e62f376068241bf911fa43b3694a1eb1
parent718aa5f6e382b9c09caf866215358238ce6b5004 (diff)
parent6a5ffd94e0c7a2b9373981f99c4798eda601f4da (diff)
downloadgit-bug-24155156223595e48f215e87cf9ce7895e22f4a7.tar.gz
Merge pull request #631 from MichaelMure/comment-edit
Fix ID string in order to find correct bug instance on comment edit operation
-rw-r--r--bug/comment.go7
-rw-r--r--bug/op_add_comment.go5
-rw-r--r--bug/op_create.go5
-rw-r--r--bug/op_create_test.go6
-rw-r--r--bug/op_edit_comment.go16
-rw-r--r--bug/op_edit_comment_test.go15
-rw-r--r--bug/snapshot.go5
-rw-r--r--bug/timeline.go5
8 files changed, 32 insertions, 32 deletions
diff --git a/bug/comment.go b/bug/comment.go
index 4c9d118e..c1cfc7e5 100644
--- a/bug/comment.go
+++ b/bug/comment.go
@@ -11,6 +11,8 @@ import (
// Comment represent a comment in a Bug
type Comment struct {
+ // id should be the result of entity.CombineIds with the Bug id and the id
+ // of the Operation that created the comment
id entity.Id
Author identity.Interface
Message string
@@ -24,9 +26,8 @@ type Comment struct {
// Id return the Comment identifier
func (c Comment) Id() entity.Id {
if c.id == "" {
- // simply panic as it would be a coding error
- // (using an id of an identity not stored yet)
- panic("no id yet")
+ // simply panic as it would be a coding error (no id provided at construction)
+ panic("no id")
}
return c.id
}
diff --git a/bug/op_add_comment.go b/bug/op_add_comment.go
index f835866b..15e62226 100644
--- a/bug/op_add_comment.go
+++ b/bug/op_add_comment.go
@@ -31,9 +31,8 @@ func (op *AddCommentOperation) Apply(snapshot *Snapshot) {
snapshot.addActor(op.Author_)
snapshot.addParticipant(op.Author_)
- commentId := entity.CombineIds(snapshot.Id(), op.Id())
comment := Comment{
- id: commentId,
+ id: entity.CombineIds(snapshot.Id(), op.Id()),
Message: op.Message,
Author: op.Author_,
Files: op.Files,
@@ -43,7 +42,7 @@ func (op *AddCommentOperation) Apply(snapshot *Snapshot) {
snapshot.Comments = append(snapshot.Comments, comment)
item := &AddCommentTimelineItem{
- CommentTimelineItem: NewCommentTimelineItem(commentId, comment),
+ CommentTimelineItem: NewCommentTimelineItem(comment),
}
snapshot.Timeline = append(snapshot.Timeline, item)
diff --git a/bug/op_create.go b/bug/op_create.go
index 1d01020c..9c972195 100644
--- a/bug/op_create.go
+++ b/bug/op_create.go
@@ -55,9 +55,8 @@ func (op *CreateOperation) Apply(snapshot *Snapshot) {
snapshot.Title = op.Title
- commentId := entity.CombineIds(snapshot.Id(), op.Id())
comment := Comment{
- id: commentId,
+ id: entity.CombineIds(snapshot.Id(), op.Id()),
Message: op.Message,
Author: op.Author_,
UnixTime: timestamp.Timestamp(op.UnixTime),
@@ -69,7 +68,7 @@ func (op *CreateOperation) Apply(snapshot *Snapshot) {
snapshot.Timeline = []TimelineItem{
&CreateTimelineItem{
- CommentTimelineItem: NewCommentTimelineItem(commentId, comment),
+ CommentTimelineItem: NewCommentTimelineItem(comment),
},
}
}
diff --git a/bug/op_create_test.go b/bug/op_create_test.go
index 1b359dee..25b87cfe 100644
--- a/bug/op_create_test.go
+++ b/bug/op_create_test.go
@@ -30,10 +30,8 @@ func TestCreate(t *testing.T) {
id := create.Id()
require.NoError(t, id.Validate())
- commentId := entity.CombineIds(create.Id(), create.Id())
-
comment := Comment{
- id: commentId,
+ id: entity.CombineIds(create.Id(), create.Id()),
Author: rene,
Message: "message",
UnixTime: timestamp.Timestamp(create.UnixTime),
@@ -51,7 +49,7 @@ func TestCreate(t *testing.T) {
CreateTime: create.Time(),
Timeline: []TimelineItem{
&CreateTimelineItem{
- CommentTimelineItem: NewCommentTimelineItem(commentId, comment),
+ CommentTimelineItem: NewCommentTimelineItem(comment),
},
},
}
diff --git a/bug/op_edit_comment.go b/bug/op_edit_comment.go
index 3e6634e4..a69cb599 100644
--- a/bug/op_edit_comment.go
+++ b/bug/op_edit_comment.go
@@ -34,12 +34,12 @@ func (op *EditCommentOperation) Apply(snapshot *Snapshot) {
// Todo: currently any message can be edited, even by a different author
// crypto signature are needed.
- snapshot.addActor(op.Author_)
+ // Recreate the Comment Id to match on
+ commentId := entity.CombineIds(snapshot.Id(), op.Target)
var target TimelineItem
-
for i, item := range snapshot.Timeline {
- if item.Id() == op.Target {
+ if item.Id() == commentId {
target = snapshot.Timeline[i]
break
}
@@ -51,7 +51,7 @@ func (op *EditCommentOperation) Apply(snapshot *Snapshot) {
}
comment := Comment{
- id: op.Target,
+ id: commentId,
Message: op.Message,
Files: op.Files,
UnixTime: timestamp.Timestamp(op.UnixTime),
@@ -62,12 +62,18 @@ func (op *EditCommentOperation) Apply(snapshot *Snapshot) {
target.Append(comment)
case *AddCommentTimelineItem:
target.Append(comment)
+ default:
+ // somehow, the target matched on something that is not a comment
+ // we make the op a no-op
+ return
}
+ snapshot.addActor(op.Author_)
+
// Updating the corresponding comment
for i := range snapshot.Comments {
- if snapshot.Comments[i].Id() == op.Target {
+ if snapshot.Comments[i].Id() == commentId {
snapshot.Comments[i].Message = op.Message
snapshot.Comments[i].Files = op.Files
break
diff --git a/bug/op_edit_comment_test.go b/bug/op_edit_comment_test.go
index 777f5f87..5ba94706 100644
--- a/bug/op_edit_comment_test.go
+++ b/bug/op_edit_comment_test.go
@@ -24,14 +24,12 @@ func TestEdit(t *testing.T) {
create := NewCreateOp(rene, unix, "title", "create", nil)
create.Apply(&snapshot)
- id1 := create.Id()
- require.NoError(t, id1.Validate())
+ require.NoError(t, create.Id().Validate())
comment1 := NewAddCommentOp(rene, unix, "comment 1", nil)
comment1.Apply(&snapshot)
- id2 := comment1.Id()
- require.NoError(t, id2.Validate())
+ require.NoError(t, comment1.Id().Validate())
// add another unrelated op in between
setTitle := NewSetTitleOp(rene, unix, "edited title", "title")
@@ -40,10 +38,9 @@ func TestEdit(t *testing.T) {
comment2 := NewAddCommentOp(rene, unix, "comment 2", nil)
comment2.Apply(&snapshot)
- id3 := comment2.Id()
- require.NoError(t, id3.Validate())
+ require.NoError(t, comment2.Id().Validate())
- edit := NewEditCommentOp(rene, unix, snapshot.Comments[0].Id(), "create edited", nil)
+ edit := NewEditCommentOp(rene, unix, create.Id(), "create edited", nil)
edit.Apply(&snapshot)
require.Len(t, snapshot.Timeline, 4)
@@ -54,7 +51,7 @@ func TestEdit(t *testing.T) {
require.Equal(t, snapshot.Comments[1].Message, "comment 1")
require.Equal(t, snapshot.Comments[2].Message, "comment 2")
- edit2 := NewEditCommentOp(rene, unix, snapshot.Comments[1].Id(), "comment 1 edited", nil)
+ edit2 := NewEditCommentOp(rene, unix, comment1.Id(), "comment 1 edited", nil)
edit2.Apply(&snapshot)
require.Len(t, snapshot.Timeline, 4)
@@ -65,7 +62,7 @@ func TestEdit(t *testing.T) {
require.Equal(t, snapshot.Comments[1].Message, "comment 1 edited")
require.Equal(t, snapshot.Comments[2].Message, "comment 2")
- edit3 := NewEditCommentOp(rene, unix, snapshot.Comments[2].Id(), "comment 2 edited", nil)
+ edit3 := NewEditCommentOp(rene, unix, comment2.Id(), "comment 2 edited", nil)
edit3.Apply(&snapshot)
require.Len(t, snapshot.Timeline, 4)
diff --git a/bug/snapshot.go b/bug/snapshot.go
index 0005b930..ce84cce1 100644
--- a/bug/snapshot.go
+++ b/bug/snapshot.go
@@ -29,9 +29,8 @@ type Snapshot struct {
// Return the Bug identifier
func (snap *Snapshot) Id() entity.Id {
if snap.id == "" {
- // simply panic as it would be a coding error
- // (using an id of a bug not stored yet)
- panic("no id yet")
+ // simply panic as it would be a coding error (no id provided at construction)
+ panic("no id")
}
return snap.id
}
diff --git a/bug/timeline.go b/bug/timeline.go
index 5a51f516..a5ca4da5 100644
--- a/bug/timeline.go
+++ b/bug/timeline.go
@@ -26,6 +26,7 @@ type CommentHistoryStep struct {
// CommentTimelineItem is a TimelineItem that holds a Comment and its edition history
type CommentTimelineItem struct {
+ // id should be the same as in Comment
id entity.Id
Author identity.Interface
Message string
@@ -35,9 +36,9 @@ type CommentTimelineItem struct {
History []CommentHistoryStep
}
-func NewCommentTimelineItem(ID entity.Id, comment Comment) CommentTimelineItem {
+func NewCommentTimelineItem(comment Comment) CommentTimelineItem {
return CommentTimelineItem{
- id: ID,
+ id: comment.id,
Author: comment.Author,
Message: comment.Message,
Files: comment.Files,