@truedat/df 8.5.9 → 8.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,6 +44,58 @@ describe("utils: validValues", () => {
44
44
  });
45
45
  });
46
46
 
47
+ it("should validate processed_groups values", () => {
48
+ const template = [
49
+ {
50
+ name: "role",
51
+ type: "user_group",
52
+ values: {
53
+ role_groups: "some_role",
54
+ processed_users: ["u1"],
55
+ processed_groups: ["alias1", "group2"],
56
+ },
57
+ },
58
+ ];
59
+
60
+ const result = filterValues(template)({
61
+ role: { value: "group:alias1", origin: "default" },
62
+ });
63
+
64
+ expect(result).toEqual({
65
+ role: { value: "group:alias1", origin: "default" },
66
+ });
67
+ });
68
+
69
+ it("should validate group values without allowing users", () => {
70
+ const template = [
71
+ {
72
+ name: "role",
73
+ type: "group",
74
+ values: {
75
+ role_groups: "some_role",
76
+ processed_users: ["u1"],
77
+ processed_groups: ["alias1", "group2"],
78
+ },
79
+ },
80
+ ];
81
+
82
+ expect(
83
+ filterValues(template)({
84
+ role: { value: "group:alias1", origin: "default" },
85
+ }),
86
+ ).toEqual({
87
+ role: { value: "group:alias1", origin: "default" },
88
+ });
89
+
90
+ expect(
91
+ filterValues(template)({
92
+ role: { value: "user:u1", origin: "default" },
93
+ }),
94
+ ).toEqual({
95
+ role: { value: null, origin: "default" },
96
+ });
97
+ });
98
+
47
99
  it("should nullify unlisted fixed values", () => {
48
100
  const result = filterValues(templateContent)({
49
101
  fixed: { value: "ho", origin: "default" },
@@ -105,6 +105,51 @@ describe("utils: parseFieldOptions", () => {
105
105
  });
106
106
  });
107
107
 
108
+ it("handles values role_groups with processed_groups", () => {
109
+ const field = {
110
+ name: "field",
111
+ type: "user_group",
112
+ values: {
113
+ role_groups: "Some Role",
114
+ processed_users: ["x"],
115
+ processed_groups: ["alias1", "group2"],
116
+ },
117
+ };
118
+ const content = { field: { value: "group:alias1", origin: "default" } };
119
+ const result = parseFormatFieldOptions(content)(field);
120
+ expect(result).toEqual({
121
+ ...field,
122
+ value: { value: "group:alias1", origin: "default" },
123
+ parsedValues: [
124
+ { value: "user:x", text: "x", icon: "user" },
125
+ { value: "group:alias1", text: "alias1", icon: "group" },
126
+ { value: "group:group2", text: "group2", icon: "group" },
127
+ ],
128
+ });
129
+ });
130
+
131
+ it("handles group values with processed_groups only", () => {
132
+ const field = {
133
+ name: "field",
134
+ type: "group",
135
+ values: {
136
+ role_groups: "Some Role",
137
+ processed_users: ["x"],
138
+ processed_groups: ["alias1", "group2"],
139
+ },
140
+ };
141
+ const content = { field: { value: "group:alias1", origin: "default" } };
142
+ const result = parseFormatFieldOptions(content)(field);
143
+ expect(result).toEqual({
144
+ ...field,
145
+ value: { value: "group:alias1", origin: "default" },
146
+ parsedValues: [
147
+ { value: "group:alias1", text: "alias1", icon: "group" },
148
+ { value: "group:group2", text: "group2", icon: "group" },
149
+ ],
150
+ });
151
+ });
152
+
108
153
  it("handles values domain", () => {
109
154
  const selectedDomain = { id: 1 };
110
155
  const field = {
@@ -1,31 +1,53 @@
1
1
  import _ from "lodash/fp";
2
2
 
3
+ const groupNameOrAlias = (group) =>
4
+ _.isString(group) ? group : group?.alias || group?.name;
5
+
3
6
  const userGroupValues = (field) =>
4
7
  _.concat(
5
8
  _.flow(
6
9
  _.get("processed_users"),
7
- _.map((name) => `user:${name}`)
10
+ _.map((name) => `user:${name}`),
8
11
  )(field),
9
12
  _.flow(
10
13
  _.get("processed_groups"),
11
- _.map((name) => `group:${name}`)
12
- )(field)
14
+ _.map((group) => {
15
+ const name = groupNameOrAlias(group);
16
+ return `group:${name}`;
17
+ }),
18
+ )(field),
13
19
  );
14
20
 
21
+ const groupValues = _.flow(
22
+ _.get("processed_groups"),
23
+ _.map((group) => {
24
+ const name = groupNameOrAlias(group);
25
+ return `group:${name}`;
26
+ }),
27
+ );
28
+
15
29
  export const validValues = _.flow(
16
30
  _.filter(
17
- _.overSome([_.has("values.fixed"), _.has("values.processed_users")])
31
+ _.overSome([
32
+ _.has("values.fixed"),
33
+ _.has("values.processed_users"),
34
+ _.has("values.processed_groups"),
35
+ ]),
18
36
  ),
19
- _.map(_.pick(["name", "values"])),
20
- _.map(({ name, values }) => [
37
+ _.map(_.pick(["name", "type", "values"])),
38
+ _.map(({ name, type, values }) => [
21
39
  name,
22
40
  _.cond([
23
41
  [_.has("fixed"), _.pathOr([], "fixed")],
42
+ [
43
+ () => type === "group" && _.has("processed_groups")(values),
44
+ groupValues,
45
+ ],
24
46
  [_.has("processed_groups"), userGroupValues],
25
47
  [_.has("processed_users"), _.pathOr([], "processed_users")],
26
48
  ])(values),
27
49
  ]),
28
- _.fromPairs
50
+ _.fromPairs,
29
51
  );
30
52
 
31
53
  export const filterValues = (templateContent) => {
@@ -34,12 +56,12 @@ export const filterValues = (templateContent) => {
34
56
  _.has(key)(vv)
35
57
  ? _.isArray(value.value)
36
58
  ? _.set(
37
- "value",
38
- _.filter((v) => _.includes(v)(_.prop(key)(vv)))(value.value)
39
- )(value)
59
+ "value",
60
+ _.filter((v) => _.includes(v)(_.prop(key)(vv)))(value.value),
61
+ )(value)
40
62
  : _.includes(value.value)(_.prop(key)(vv))
41
63
  ? value
42
64
  : { ...value, value: null }
43
- : value
65
+ : value,
44
66
  );
45
67
  };
@@ -44,38 +44,47 @@ const doParseFieldOptions = (formatMessage, content, selectedDomain, field) => {
44
44
  ]),
45
45
  translateValues,
46
46
  );
47
- const parseRoleGroups = (values) =>
48
- _.concat(
49
- _.flow(
50
- _.get("processed_users"),
51
- _.map((name) => ({
52
- value: `user:${name}`,
53
- text: name,
54
- icon: "user",
55
- })),
56
- )(values),
57
- _.flow(
58
- _.get("processed_groups"),
59
- _.map((name) => ({
47
+ const groupNameOrAlias = (group) =>
48
+ typeof group === "string" ? group : group.alias || group.name;
49
+ const parseRoleGroups = (values) => {
50
+ const groups = _.flow(
51
+ _.get("processed_groups"),
52
+ _.map((group) => {
53
+ const name = groupNameOrAlias(group);
54
+ return {
60
55
  value: `group:${name}`,
61
56
  text: name,
62
57
  icon: "group",
63
- })),
64
- )(values),
65
- );
58
+ };
59
+ }),
60
+ )(values);
61
+
62
+ if (field?.type === "group") return groups;
63
+
64
+ const users = _.flow(
65
+ _.get("processed_users"),
66
+ _.map((name) => ({
67
+ value: `user:${name}`,
68
+ text: name,
69
+ icon: "user",
70
+ })),
71
+ )(values);
72
+
73
+ return _.concat(users, groups);
74
+ };
66
75
  const parseDomain = _.flow(
67
76
  _.get("domain"),
68
77
  (domainValues) => {
69
78
  if (!domainValues) return [];
70
79
  const domainIds = selectedDomain?.ids || [selectedDomain?.id];
71
- const allValues = domainIds
72
- ?.filter((id) => id != null)
73
- .flatMap((id) => {
74
- const strId = String(id);
75
- const val = domainValues[strId];
76
- return Array.isArray(val) ? val : [];
77
- })
78
- || [];
80
+ const allValues =
81
+ domainIds
82
+ ?.filter((id) => id != null)
83
+ .flatMap((id) => {
84
+ const strId = String(id);
85
+ const val = domainValues[strId];
86
+ return Array.isArray(val) ? val : [];
87
+ }) || [];
79
88
  return _.uniq(allValues);
80
89
  },
81
90
  translateValues,