forked from linuxfoundation/lfx-v2-indexer-service
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgroupsio_mailing_list_enricher_test.go
More file actions
134 lines (124 loc) · 3.44 KB
/
groupsio_mailing_list_enricher_test.go
File metadata and controls
134 lines (124 loc) · 3.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Copyright The Linux Foundation and each contributor to LFX.
// SPDX-License-Identifier: MIT
package enrichers
import (
"testing"
"github.com/linuxfoundation/lfx-v2-indexer-service/internal/domain/contracts"
"github.com/linuxfoundation/lfx-v2-indexer-service/pkg/constants"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestGroupsIOMailingListEnricher_ObjectType(t *testing.T) {
enricher := NewGroupsIOMailingListEnricher()
assert.Equal(t, constants.ObjectTypeGroupsIOMailingList, enricher.ObjectType())
}
func TestGroupsIOMailingListEnricher_EnrichData(t *testing.T) {
enricher := NewGroupsIOMailingListEnricher()
tests := []struct {
name string
parsedData map[string]any
expectedBody *contracts.TransactionBody
expectedError string
}{
{
name: "group_name used as sort name and alias",
parsedData: map[string]any{
"uid": "ml-123",
"group_name": "My Mailing List",
},
expectedBody: &contracts.TransactionBody{
ObjectID: "ml-123",
SortName: "My Mailing List",
NameAndAliases: []string{"My Mailing List"},
},
},
{
name: "group_name takes priority over name field",
parsedData: map[string]any{
"uid": "ml-456",
"group_name": "Group Name",
"name": "Other Name",
},
expectedBody: &contracts.TransactionBody{
ObjectID: "ml-456",
SortName: "Group Name",
},
},
{
name: "both group_name and name appear in aliases",
parsedData: map[string]any{
"uid": "ml-789",
"group_name": "Group Name",
"name": "Other Name",
},
expectedBody: &contracts.TransactionBody{
ObjectID: "ml-789",
SortName: "Group Name",
NameAndAliases: []string{"Group Name", "Other Name"},
},
},
{
name: "fallback to name when group_name absent",
parsedData: map[string]any{
"uid": "ml-fallback",
"name": "Fallback Name",
},
expectedBody: &contracts.TransactionBody{
ObjectID: "ml-fallback",
SortName: "Fallback Name",
NameAndAliases: []string{"Fallback Name"},
},
},
{
name: "group_name whitespace trimmed",
parsedData: map[string]any{
"uid": "ml-trim",
"group_name": " Trimmed ",
},
expectedBody: &contracts.TransactionBody{
ObjectID: "ml-trim",
SortName: "Trimmed",
NameAndAliases: []string{"Trimmed"},
},
},
{
name: "empty group_name falls back to name",
parsedData: map[string]any{
"uid": "ml-empty",
"group_name": "",
"name": "Fallback",
},
expectedBody: &contracts.TransactionBody{
ObjectID: "ml-empty",
SortName: "Fallback",
},
},
{
name: "error: missing uid and id",
parsedData: map[string]any{
"group_name": "Some List",
},
expectedError: constants.ErrMappingUID,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
body := &contracts.TransactionBody{}
transaction := &contracts.LFXTransaction{
ParsedData: tt.parsedData,
}
err := enricher.EnrichData(body, transaction)
if tt.expectedError != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tt.expectedError)
return
}
require.NoError(t, err)
assert.Equal(t, tt.expectedBody.ObjectID, body.ObjectID)
assert.Equal(t, tt.expectedBody.SortName, body.SortName)
if tt.expectedBody.NameAndAliases != nil {
assert.Equal(t, tt.expectedBody.NameAndAliases, body.NameAndAliases)
}
})
}
}