mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
[MM-57963] Log Name and DisplayName of groups (#26836)
This commit is contained in:
parent
3513d310af
commit
0e6bfbdd26
@ -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
|
||||
}
|
||||
|
39
server/public/model/builtin_test.go
Normal file
39
server/public/model/builtin_test.go
Normal 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)
|
||||
})
|
||||
}
|
@ -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 *group.RemoteId
|
||||
return SafeDereference(group.RemoteId)
|
||||
}
|
||||
|
||||
func (group *Group) GetMemberCount() int {
|
||||
return SafeDereference(group.MemberCount)
|
||||
}
|
||||
|
||||
type GroupsWithCount struct {
|
||||
|
99
server/public/model/group_test.go
Normal file
99
server/public/model/group_test.go
Normal 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)
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user