From 853445dc2ea68f765faa04ad14618b04f1081c43 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 20 Apr 2018 12:25:14 -0400 Subject: Properly implement session deep copy (#8602) --- model/session.go | 17 +++++++++++++++-- model/session_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/model/session.go b/model/session.go index a407af26a..7c6bbe06d 100644 --- a/model/session.go +++ b/model/session.go @@ -38,8 +38,21 @@ type Session struct { } func (me *Session) DeepCopy() *Session { - copy := *me - return © + copySession := *me + + if me.Props != nil { + copySession.Props = CopyStringMap(me.Props) + } + + if me.TeamMembers != nil { + copySession.TeamMembers = make([]*TeamMember, len(me.TeamMembers)) + for index, tm := range me.TeamMembers { + copySession.TeamMembers[index] = new(TeamMember) + *copySession.TeamMembers[index] = *tm + } + } + + return ©Session } func (me *Session) ToJson() string { diff --git a/model/session_test.go b/model/session_test.go index 295f00076..5f4a4730d 100644 --- a/model/session_test.go +++ b/model/session_test.go @@ -7,8 +7,38 @@ import ( "strings" "testing" "time" + + "github.com/stretchr/testify/assert" ) +func TestSessionDeepCopy(t *testing.T) { + sessionId := NewId() + userId := NewId() + mapKey := "key" + mapValue := "val" + + session := &Session{Id: sessionId, Props: map[string]string{mapKey: mapValue}, TeamMembers: []*TeamMember{&TeamMember{UserId: userId, TeamId: "someteamId"}}} + + copySession := session.DeepCopy() + copySession.Id = "changed" + copySession.Props[mapKey] = "changed" + copySession.TeamMembers[0].UserId = "changed" + + assert.Equal(t, sessionId, session.Id) + assert.Equal(t, mapValue, session.Props[mapKey]) + assert.Equal(t, userId, session.TeamMembers[0].UserId) + + session = &Session{Id: sessionId} + copySession = session.DeepCopy() + + assert.Equal(t, sessionId, session.Id) + + session = &Session{TeamMembers: []*TeamMember{}} + copySession = session.DeepCopy() + + assert.Equal(t, 0, len(copySession.TeamMembers)) +} + func TestSessionJson(t *testing.T) { session := Session{} session.PreSave() -- cgit v1.2.3-1-g7c22