[MM-57963] Log Name and DisplayName of groups (#26836)

This commit is contained in:
Ben Schumacher 2024-07-08 21:25:21 +02:00 committed by GitHub
parent 3513d310af
commit 0e6bfbdd26
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 171 additions and 13 deletions

View File

@ -7,3 +7,13 @@ func NewBool(b bool) *bool { return &b }
func NewInt(n int) *int { return &n }
func NewInt64(n int64) *int64 { return &n }
func NewString(s string) *string { return &s }
// SafeDereference returns the zero value of T if t is nil.
// Otherwise it return the derference of t.
func SafeDereference[T any](t *T) T {
if t == nil {
var t T
return t
}
return *t
}

View File

@ -0,0 +1,39 @@
package model
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSafeDereference(t *testing.T) {
t.Run("any", func(t *testing.T) {
s := SafeDereference[any](nil)
assert.Nil(t, s)
})
t.Run("struct", func(t *testing.T) {
s := SafeDereference[struct{}](nil)
assert.Equal(t, struct{}{}, s)
s = SafeDereference(&struct{}{})
assert.Equal(t, struct{}{}, s)
})
t.Run("string", func(t *testing.T) {
s := SafeDereference[string](nil)
assert.Equal(t, "", s)
s = SafeDereference(NewString("foo"))
assert.Equal(t, "foo", s)
})
t.Run("string pointer", func(t *testing.T) {
s := SafeDereference[*string](nil)
assert.Nil(t, s)
f := NewString("foo")
s = SafeDereference(&f)
assert.Equal(t, f, s)
})
}

View File

@ -52,18 +52,30 @@ func (group *Group) Auditable() map[string]interface{} {
return map[string]interface{}{
"id": group.Id,
"source": group.Source,
"remote_id": group.RemoteId,
"remote_id": group.GetRemoteId(),
"create_at": group.CreateAt,
"update_at": group.UpdateAt,
"delete_at": group.DeleteAt,
"has_syncables": group.HasSyncables,
"member_count": group.MemberCount,
"member_count": group.GetMemberCount(),
"allow_reference": group.AllowReference,
}
}
func (group *Group) LogClone() any {
return group.Auditable()
return map[string]interface{}{
"id": group.Id,
"name": group.GetName(),
"display_name": group.DisplayName,
"source": group.Source,
"remote_id": group.GetRemoteId(),
"create_at": group.CreateAt,
"update_at": group.UpdateAt,
"delete_at": group.DeleteAt,
"has_syncables": group.HasSyncables,
"member_count": group.GetMemberCount(),
"allow_reference": group.AllowReference,
}
}
type GroupWithUserIds struct {
@ -75,12 +87,12 @@ func (group *GroupWithUserIds) Auditable() map[string]interface{} {
return map[string]interface{}{
"id": group.Id,
"source": group.Source,
"remote_id": group.RemoteId,
"remote_id": group.GetRemoteId(),
"create_at": group.CreateAt,
"update_at": group.UpdateAt,
"delete_at": group.DeleteAt,
"has_syncables": group.HasSyncables,
"member_count": group.MemberCount,
"member_count": group.GetMemberCount(),
"allow_reference": group.AllowReference,
"user_ids": group.UserIds,
}
@ -268,17 +280,15 @@ func (group *Group) IsValidName() *AppError {
}
func (group *Group) GetName() string {
if group.Name == nil {
return ""
}
return *group.Name
return SafeDereference(group.Name)
}
func (group *Group) GetRemoteId() string {
if group.RemoteId == nil {
return ""
return SafeDereference(group.RemoteId)
}
return *group.RemoteId
func (group *Group) GetMemberCount() int {
return SafeDereference(group.MemberCount)
}
type GroupsWithCount struct {

View File

@ -0,0 +1,99 @@
package model
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGroupAuditable(t *testing.T) {
t.Run("zero value", func(t *testing.T) {
var g Group
m := g.Auditable()
require.NotNil(t, m)
assert.Equal(t, "", m["remote_id"])
})
t.Run("values set", func(t *testing.T) {
id := NewId()
now := GetMillis()
g := Group{
Id: id,
Name: NewString("some name"),
DisplayName: "some display name",
Source: GroupSourceLdap,
RemoteId: NewString("some_remote"),
CreateAt: now,
UpdateAt: now,
DeleteAt: now,
HasSyncables: true,
MemberCount: NewInt(10),
AllowReference: true,
}
m := g.Auditable()
expected := map[string]any{
"id": id,
"source": GroupSourceLdap,
"remote_id": "some_remote",
"create_at": now,
"update_at": now,
"delete_at": now,
"has_syncables": true,
"member_count": 10,
"allow_reference": true,
}
assert.Equal(t, expected, m)
})
}
func TestGroupLogClone(t *testing.T) {
t.Run("zero value", func(t *testing.T) {
var g Group
l := g.LogClone()
require.NotNil(t, l)
m, ok := l.(map[string]interface{})
require.True(t, ok)
assert.Equal(t, "", m["remote_id"])
})
t.Run("values set", func(t *testing.T) {
id := NewId()
now := GetMillis()
g := Group{
Id: id,
Name: NewString("some name"),
DisplayName: "some display name",
Source: GroupSourceLdap,
RemoteId: NewString("some_remote"),
CreateAt: now,
UpdateAt: now,
DeleteAt: now,
HasSyncables: true,
MemberCount: NewInt(10),
AllowReference: true,
}
l := g.LogClone()
m, ok := l.(map[string]interface{})
require.True(t, ok)
expected := map[string]any{
"id": id,
"name": "some name",
"display_name": "some display name",
"source": GroupSourceLdap,
"remote_id": "some_remote",
"create_at": now,
"update_at": now,
"delete_at": now,
"has_syncables": true,
"member_count": 10,
"allow_reference": true,
}
assert.Equal(t, expected, m)
})
}