aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2023-04-12 11:41:12 +0200
committerAleksandr Nogikh <wp32pw@gmail.com>2023-04-12 13:55:59 +0200
commit7d51c8e0e6ed30cf613d9c45368504d147cdfc53 (patch)
tree44082e642dec20a4c9a3454f5118a1d56f6a8578
parent4ccda2b77eb2a46c1217d40e4a16ff97acba3a48 (diff)
dashboard: always keep the original message in discussions
It lets us always determine the discussion start date and whether the discussion was started by a bot or a human.
-rw-r--r--dashboard/app/discussion.go8
-rw-r--r--dashboard/app/discussion_test.go37
2 files changed, 44 insertions, 1 deletions
diff --git a/dashboard/app/discussion.go b/dashboard/app/discussion.go
index 04f0370b8..12a0392c5 100644
--- a/dashboard/app/discussion.go
+++ b/dashboard/app/discussion.go
@@ -174,11 +174,17 @@ func (d *Discussion) addMessages(messages []dashapi.DiscussionMessage) Discussio
Time: m.Time,
})
}
+ if len(d.Messages) == 0 {
+ return diff
+ }
sort.Slice(d.Messages, func(i, j int) bool {
return d.Messages[i].Time.Before(d.Messages[j].Time)
})
+ // Always keep the oldest message.
+ first := d.Messages[0]
if len(d.Messages) > maxMessagesInDiscussion {
- d.Messages = d.Messages[len(d.Messages)-maxMessagesInDiscussion:]
+ d.Messages = append([]DiscussionMessage{first},
+ d.Messages[len(d.Messages)-maxMessagesInDiscussion+1:]...)
}
return diff
}
diff --git a/dashboard/app/discussion_test.go b/dashboard/app/discussion_test.go
index a06ee216e..bbe87341b 100644
--- a/dashboard/app/discussion_test.go
+++ b/dashboard/app/discussion_test.go
@@ -5,6 +5,7 @@ package main
import (
"fmt"
+ "reflect"
"testing"
"time"
@@ -360,3 +361,39 @@ Hello!
c.expectOK(err)
client.expectEQ(len(got), 0)
}
+
+func TestMessageOverflow(t *testing.T) {
+ date := time.Date(2000, time.January, 1, 1, 0, 0, 0, time.UTC)
+ d := &Discussion{}
+ first, last := dashapi.DiscussionMessage{
+ ID: date.String(),
+ Time: date,
+ }, dashapi.DiscussionMessage{}
+ d.addMessages([]dashapi.DiscussionMessage{first})
+
+ const blockSize = 100
+ for i := 0; i < 2*maxMessagesInDiscussion; i += blockSize {
+ block := []dashapi.DiscussionMessage{}
+ for j := 0; j < blockSize; j++ {
+ date = date.Add(time.Minute)
+ last = dashapi.DiscussionMessage{
+ ID: date.String(),
+ Time: date,
+ }
+ block = append(block, last)
+ }
+ // Make sure that the first message always remains in place and the last one
+ // is the latest one.
+ d.addMessages(block)
+ if !reflect.DeepEqual(first.ID, d.Messages[0].ID) {
+ t.Fatalf("unexpected first messages")
+ }
+ if !reflect.DeepEqual(last.ID, d.Messages[len(d.Messages)-1].ID) {
+ t.Fatalf("unexpected last messages")
+ }
+ }
+ if len(d.Messages) != maxMessagesInDiscussion {
+ t.Fatalf("expected len to be equal to %d, got %d",
+ maxMessagesInDiscussion, len(d.Messages))
+ }
+}