Skip to content

Commit 978a12e

Browse files
authored
feature/user mappings sdk v4.4.0 (#149)
This pull request introduces significant updates to the OneLogin Terraform provider, primarily focused on adding support for User Mappings, upgrading dependencies, and improving examples and documentation. Key changes include the addition of a new `onelogin_user_mappings` resource with full CRUD operations, updates to the OneLogin SDK, and enhancements to code organization and examples. ### New Feature: User Mappings Support * Added the `onelogin_user_mappings` resource, enabling full CRUD operations for user mappings, including support for conditions and actions. This involved changes to `onelogin/resource_onelogin_user_mappings.go` and the addition of helper functions for flattening conditions and actions (`[[1]](diffhunk://#diff-ce3ef94c410a70a22a90ba56073b17b14984c1d1b782de5fc363bbd923d4c830L1-L3)`, `[[2]](diffhunk://#diff-ce3ef94c410a70a22a90ba56073b17b14984c1d1b782de5fc363bbd923d4c830L37-R41)`, `[[3]](diffhunk://#diff-ce3ef94c410a70a22a90ba56073b17b14984c1d1b782de5fc363bbd923d4c830L100-R137)`, `[[4]](diffhunk://#diff-2db7de13637ce2a17759f61145cb5530c9b761a804ff577d690853867a4c0d47R113-R145)`). * Updated the `Inflate` function to return an error for better error handling during user mapping creation (`[[1]](diffhunk://#diff-2db7de13637ce2a17759f61145cb5530c9b761a804ff577d690853867a4c0d47L57-R57)`, `[[2]](diffhunk://#diff-2db7de13637ce2a17759f61145cb5530c9b761a804ff577d690853867a4c0d47L94-R94)`). * Re-enabled the `onelogin_user_mappings` resource in the provider configuration (`[onelogin/provider.goL71-R71](diffhunk://#diff-67f9eb98d74e43b0177e4868b4575c740c8fed94dc98974964d3601c3c609b94L71-R71)`). ### Dependency Upgrades * Upgraded the OneLogin SDK to version `v4.4.0` to support the new User Mappings functionality (`[go.modL9-R9](diffhunk://#diff-33ef32bf6c23acb95f5902d7097b7a1d5128ca061167ec0716715b0b9eeaa5f6L9-R9)`). * Updated the `VERSION` in `GNUmakefile` to `0.8.0` to reflect the new release (`[GNUmakefileL13-R13](diffhunk://#diff-e3445fc75aa9c3e4a60fbe5394dcce12693022018216a8fbe0000fe9952850a6L13-R13)`). ### Documentation and Examples * Updated `README.md` to include details about the new `v0.8.0` release, including User Mappings support and examples for configuration (`[[1]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5R7-R15)`, `[[2]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L67-R76)`). * Added and updated examples for User Mappings in `examples/onelogin_user_mapping_example.tf` and `examples/onelogin_user_mapping_updated_example.tf`, showcasing basic and advanced configurations (`[[1]](diffhunk://#diff-2f572e4f691157993ece38eeb8b411a2016c0432171ca314669411e89abcaeabL1-R68)`, `[[2]](diffhunk://#diff-34377eac802fb69d90811104fba7331a3df19103ce5ecace4d014229ae4dc2cdL1-R71)`). * Updated the `getting-started/README.md` and `main.tf` files to reflect the new provider version `0.8.0` and provide installation instructions (`[[1]](diffhunk://#diff-ce2a8ca7a1f56da427e3b975745401cf814bdec361bd98d5b149338042b1bc94L49-R73)`, `[[2]](diffhunk://#diff-ce2a8ca7a1f56da427e3b975745401cf814bdec361bd98d5b149338042b1bc94L85-R99)`, `[[3]](diffhunk://#diff-686c7e2608ae0ae77dda823d90c8802afb9823cbe9c86c8b37e31a8968079d0aL5-R13)`). ### Code Quality and Testing * Added new test cases to validate the `Inflate` function changes and ensure proper error handling (`[ol_schema/user_mapping/user_mapping_test.goL129-R130](diffhunk://#diff-ac10ab9fd6d69c7ffbdfdec6dc7262d4390f8a106a7805d377f20ffa7b942060L129-R130)`). * Improved code organization and naming consistency by removing unused imports and simplifying logic in `resource_onelogin_user_mappings.go` (`[onelogin/resource_onelogin_user_mappings.goL16-L19](diffhunk://#diff-ce3ef94c410a70a22a90ba56073b17b14984c1d1b782de5fc363bbd923d4c830L16-L19)`). These updates collectively enhance the functionality, usability, and maintainability of the OneLogin Terraform provider.
2 parents 09899a1 + bbe50e5 commit 978a12e

File tree

43 files changed

+578
-2683
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+578
-2683
lines changed

GNUmakefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ GO111MODULE=on
1010

1111
PLUGINS_DIR=~/.terraform.d/plugins
1212
PLUGIN_PATH=onelogin.com/onelogin/onelogin
13-
VERSION=0.6.0
13+
VERSION=0.8.0
1414

1515
clean:
1616
rm -r ${DIST_DIR}

README.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@
44

55
## Latest Updates
66

7+
### v0.8.0 - User Mappings Support
8+
9+
This version adds support for User Mappings with the OneLogin SDK v4.4.0:
10+
11+
- Added User Mappings resource with full CRUD operations
12+
- Updated OneLogin SDK to v4.4.0
13+
- Improved code organization and naming consistency
14+
- Added examples for User Mappings configuration
15+
716
### v0.7.0 - SDK v4 Refactoring
817

918
This version includes major internal refactoring to fully support OneLogin SDK v4:
@@ -64,7 +73,7 @@ terraform {
6473
required_providers {
6574
onelogin = {
6675
source = "onelogin/onelogin"
67-
version = "0.7.0"
76+
version = "0.8.0"
6877
}
6978
}
7079
}
Lines changed: 64 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,70 @@
1-
resource onelogin_user_mappings basic_test {
2-
name = "Select Login"
3-
enabled = true
4-
match = "all"
5-
position = 1
1+
terraform {
2+
required_providers {
3+
onelogin = {
4+
source = "onelogin/onelogin"
5+
version = ">= 0.8.0"
6+
}
7+
}
8+
}
9+
10+
provider "onelogin" {
11+
# Set these variables with ONELOGIN_CLIENT_ID, ONELOGIN_CLIENT_SECRET environment variables
12+
# Or provide them directly here (not recommended for sensitive values)
13+
}
14+
15+
# Basic user mapping that applies a role to users with email domain @example.com
16+
resource "onelogin_user_mapping" "example_mapping" {
17+
name = "Example Domain Mapping"
18+
match = "all" # Match all conditions
19+
enabled = true
20+
position = 1 # Order in which mappings are evaluated
621

22+
# Condition to check if user's email contains @example.com
23+
conditions {
24+
source = "email" # User attribute to check
25+
operator = "contains" # Operator for comparison
26+
value = "@example.com" # Value to compare against
27+
}
28+
29+
# Action to assign a role to matching users
30+
# Note: Replace 12345 with actual role ID from your OneLogin account
731
actions {
8-
value = ["1"]
9-
action = "set_status"
32+
action = "set_role"
33+
value = ["12345"]
34+
}
35+
}
36+
37+
# More complex user mapping with multiple conditions and actions
38+
resource "onelogin_user_mapping" "department_mapping" {
39+
name = "Department Based Mapping"
40+
match = "all" # Match all conditions
41+
enabled = true
42+
position = 2 # Processed after the first mapping
43+
44+
# Check if user belongs to IT department
45+
conditions {
46+
source = "department"
47+
operator = "equals"
48+
value = "IT"
1049
}
1150

51+
# Check if user's title contains "Engineer"
1252
conditions {
13-
operator = ">"
14-
source = "last_login"
15-
value = "90"
53+
source = "title"
54+
operator = "contains"
55+
value = "Engineer"
1656
}
17-
}
57+
58+
# Assign multiple roles to matching users
59+
# Note: Replace IDs with actual role IDs from your OneLogin account
60+
actions {
61+
action = "set_role"
62+
value = ["23456", "34567"]
63+
}
64+
65+
# Set the user's group memberships
66+
actions {
67+
action = "set_groups"
68+
value = ["Engineers", "IT Staff"]
69+
}
70+
}
Lines changed: 67 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,73 @@
1-
resource onelogin_user_mappings basic_test {
2-
name = "Updated Login"
3-
enabled = true
4-
match = "all"
5-
position = 1
1+
terraform {
2+
required_providers {
3+
onelogin = {
4+
source = "onelogin/onelogin"
5+
version = ">= 0.8.0"
6+
}
7+
}
8+
}
69

7-
actions {
8-
value = ["2"]
9-
action = "set_status"
10+
provider "onelogin" {
11+
# Set these variables with ONELOGIN_CLIENT_ID, ONELOGIN_CLIENT_SECRET environment variables
12+
}
13+
14+
# Updated version of the example mapping
15+
resource "onelogin_user_mapping" "example_mapping" {
16+
name = "Updated Domain Mapping" # Changed name
17+
match = "any" # Changed from "all" to "any"
18+
enabled = true
19+
position = 3 # Changed position
20+
21+
# Original condition
22+
conditions {
23+
source = "email"
24+
operator = "contains"
25+
value = "@example.com"
1026
}
1127

28+
# Added condition
1229
conditions {
13-
operator = ">"
14-
source = "last_login"
15-
value = "120"
30+
source = "email"
31+
operator = "contains"
32+
value = "@partner.com"
33+
}
34+
35+
# Original action with updated role IDs
36+
actions {
37+
action = "set_role"
38+
value = ["45678"] # Updated role ID
39+
}
40+
41+
# Added action to set custom attributes
42+
actions {
43+
action = "set_userprincipalname"
44+
value = ["${user.email}"] # Dynamic value using user's email
1645
}
1746
}
47+
48+
# Updated version of the department mapping with different approach
49+
resource "onelogin_user_mapping" "department_mapping" {
50+
name = "Engineering Team Mapping" # Updated name
51+
match = "all"
52+
enabled = true
53+
position = 4 # Updated position
54+
55+
# Simplified condition - now just checking for Engineering department
56+
conditions {
57+
source = "department"
58+
operator = "equals"
59+
value = "Engineering" # Changed from IT to Engineering
60+
}
61+
62+
# Set specific custom attribute for engineers
63+
actions {
64+
action = "set_custom_attribute"
65+
value = ["employee_type", "technical"]
66+
}
67+
68+
# Updated role assignments
69+
actions {
70+
action = "set_role"
71+
value = ["34567", "56789"] # Updated role IDs
72+
}
73+
}

getting-started/README.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,31 @@ If you encounter issues with the provider availability in the Terraform Registry
4646
1. Create the plugins directory (adjust OS and architecture as needed):
4747
```bash
4848
# For macOS Intel
49-
mkdir -p ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/darwin_amd64
49+
mkdir -p ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/darwin_amd64
5050

5151
# For macOS Apple Silicon (M1/M2)
52-
mkdir -p ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/darwin_arm64
52+
mkdir -p ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/darwin_arm64
5353

5454
# For Linux
55-
mkdir -p ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/linux_amd64
55+
mkdir -p ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/linux_amd64
5656

5757
# For Windows
58-
mkdir -p %APPDATA%\terraform.d\plugins\registry.terraform.io\onelogin\onelogin\0.7.0\windows_amd64
58+
mkdir -p %APPDATA%\terraform.d\plugins\registry.terraform.io\onelogin\onelogin\0.8.0\windows_amd64
5959
```
6060

6161
2. Download the provider binary from GitHub releases:
6262
```bash
6363
# For macOS Intel
64-
curl -L https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.7.0/terraform-provider-onelogin_0.7.0_darwin_amd64.zip -o /tmp/provider.zip
64+
curl -L https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.8.0/terraform-provider-onelogin_0.8.0_darwin_amd64.zip -o /tmp/provider.zip
6565

6666
# For macOS Apple Silicon
67-
curl -L https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.7.0/terraform-provider-onelogin_0.7.0_darwin_arm64.zip -o /tmp/provider.zip
67+
curl -L https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.8.0/terraform-provider-onelogin_0.8.0_darwin_arm64.zip -o /tmp/provider.zip
6868

6969
# For Linux
70-
curl -L https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.7.0/terraform-provider-onelogin_0.7.0_linux_amd64.zip -o /tmp/provider.zip
70+
curl -L https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.8.0/terraform-provider-onelogin_0.8.0_linux_amd64.zip -o /tmp/provider.zip
7171

7272
# For Windows (using PowerShell)
73-
Invoke-WebRequest -Uri https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.7.0/terraform-provider-onelogin_0.7.0_windows_amd64.zip -OutFile $env:TEMP\provider.zip
73+
Invoke-WebRequest -Uri https://github.com/onelogin/terraform-provider-onelogin/releases/download/v0.8.0/terraform-provider-onelogin_0.8.0_windows_amd64.zip -OutFile $env:TEMP\provider.zip
7474
```
7575

7676
3. Extract and install:
@@ -82,21 +82,21 @@ If you encounter issues with the provider availability in the Terraform Registry
8282
ls -la /tmp/provider
8383

8484
# For macOS Intel (adjust filenames based on what you see in the previous step)
85-
cp /tmp/provider/terraform-provider-onelogin_v0.7.0 ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/darwin_amd64/
86-
chmod +x ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/darwin_amd64/terraform-provider-onelogin_v0.7.0
85+
cp /tmp/provider/terraform-provider-onelogin_v0.8.0 ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/darwin_amd64/
86+
chmod +x ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/darwin_amd64/terraform-provider-onelogin_v0.8.0
8787

8888
# For macOS Apple Silicon (adjust filenames based on what you see)
89-
cp /tmp/provider/terraform-provider-onelogin_v0.7.0 ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/darwin_arm64/
90-
chmod +x ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/darwin_arm64/terraform-provider-onelogin_v0.7.0
89+
cp /tmp/provider/terraform-provider-onelogin_v0.8.0 ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/darwin_arm64/
90+
chmod +x ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/darwin_arm64/terraform-provider-onelogin_v0.8.0
9191

9292
# For Linux (adjust filenames based on what you see)
93-
cp /tmp/provider/terraform-provider-onelogin_v0.7.0 ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/linux_amd64/
94-
chmod +x ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.7.0/linux_amd64/terraform-provider-onelogin_v0.7.0
93+
cp /tmp/provider/terraform-provider-onelogin_v0.8.0 ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/linux_amd64/
94+
chmod +x ~/.terraform.d/plugins/registry.terraform.io/onelogin/onelogin/0.8.0/linux_amd64/terraform-provider-onelogin_v0.8.0
9595

9696
# For Windows (using PowerShell) (adjust filenames based on what you see)
9797
Expand-Archive -Path $env:TEMP\provider.zip -DestinationPath $env:TEMP\provider
9898
Get-ChildItem -Path $env:TEMP\provider -Recurse
99-
Copy-Item $env:TEMP\provider\terraform-provider-onelogin_v0.7.0.exe $env:APPDATA\terraform.d\plugins\registry.terraform.io\onelogin\onelogin\0.7.0\windows_amd64\
99+
Copy-Item $env:TEMP\provider\terraform-provider-onelogin_v0.8.0.exe $env:APPDATA\terraform.d\plugins\registry.terraform.io\onelogin\onelogin\0.8.0\windows_amd64\
100100
```
101101

102102
> **Note:** The exact structure and filenames inside the zip may vary between releases. After extraction, check the actual contents with `ls` or `Get-ChildItem` and adjust the copy commands accordingly. The binary may be in a subdirectory or have a slightly different name.

getting-started/main.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ terraform {
22
required_providers {
33
onelogin = {
44
source = "onelogin/onelogin"
5-
version = "0.7.0"
5+
version = "0.8.0"
66
}
77
}
88
}
99

1010
provider "onelogin" {
1111
client_id = "YOUR_CLIENT_ID" # Replace with your OneLogin Client ID
1212
client_secret = "YOUR_CLIENT_SECRET" # Replace with your OneLogin Client Secret
13-
url = "YOUR_API_URL" # Replace with your OneLogin API URL (e.g., "https://company.onelogin.com"). Note: The 'subdomain' attribute has been replaced by 'url' in version 0.6.0. Update your configuration by replacing 'subdomain = "company"' with 'url = "https://company.onelogin.com"'.
13+
url = "YOUR_API_URL" # Replace with your OneLogin API URL (e.g., "https://company.onelogin.com")
1414
}
1515

1616
# Example resource (uncomment if needed)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/hashicorp/terraform-plugin-log v0.2.1
77
github.com/hashicorp/terraform-plugin-sdk/v2 v2.4.3
88
github.com/onelogin/onelogin-go-sdk v1.1.22
9-
github.com/onelogin/onelogin-go-sdk/v4 v4.3.0
9+
github.com/onelogin/onelogin-go-sdk/v4 v4.4.0
1010
github.com/stretchr/testify v1.7.0
1111
)
1212

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -485,8 +485,8 @@ github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
485485
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
486486
github.com/onelogin/onelogin-go-sdk v1.1.22 h1:6EQkQLY3TVfRwS25zkIk7i069qTEbe6MCeQf8dkrC8o=
487487
github.com/onelogin/onelogin-go-sdk v1.1.22/go.mod h1:GM0+ziS1fhnPnxC2fLzVloxn+VzBwzXKkIaDOPoE5GU=
488-
github.com/onelogin/onelogin-go-sdk/v4 v4.3.0 h1:cvjVW20ra4xR3dr6yZZVlLMUKbvsnya79TLN/xZb3eY=
489-
github.com/onelogin/onelogin-go-sdk/v4 v4.3.0/go.mod h1:JjzflJ66T0yT7zYteMR1zQenaDblhIuYzpACmqFduNg=
488+
github.com/onelogin/onelogin-go-sdk/v4 v4.4.0 h1:jidCK/IFxHDtUdzyiE31vO9ANHTmgktpqo8swvHZGhk=
489+
github.com/onelogin/onelogin-go-sdk/v4 v4.4.0/go.mod h1:JjzflJ66T0yT7zYteMR1zQenaDblhIuYzpACmqFduNg=
490490
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
491491
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
492492
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=

ol_schema/user_mapping/user_mapping.go

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func validMatch(val interface{}, key string) (warns []string, errs []error) {
5454
}
5555

5656
// Inflate takes a key/value map of interfaces and uses the fields to construct a user mapping struct
57-
func Inflate(s map[string]interface{}) models.UserMapping {
57+
func Inflate(s map[string]interface{}) (models.UserMapping, error) {
5858
out := models.UserMapping{}
5959
if s["id"] != nil {
6060
if id, err := strconv.Atoi(s["id"].(string)); err == nil {
@@ -91,7 +91,7 @@ func Inflate(s map[string]interface{}) models.UserMapping {
9191
out.Actions = append(out.Actions, action)
9292
}
9393
}
94-
return out
94+
return out, nil
9595
}
9696

9797
// Flatten takes a UserMappings array and converts it to an array of maps
@@ -110,3 +110,36 @@ func Flatten(UserMappings []models.UserMapping) []map[string]interface{} {
110110
}
111111
return out
112112
}
113+
114+
// FlattenConditions converts an array of interface{} to an array of maps for conditions
115+
func FlattenConditions(conditions []interface{}) []map[string]interface{} {
116+
result := make([]map[string]interface{}, len(conditions))
117+
for i, condition := range conditions {
118+
if condMap, ok := condition.(map[string]interface{}); ok {
119+
result[i] = map[string]interface{}{
120+
"source": condMap["source"],
121+
"operator": condMap["operator"],
122+
"value": condMap["value"],
123+
}
124+
}
125+
}
126+
return result
127+
}
128+
129+
// FlattenActions converts an array of interface{} to an array of maps for actions
130+
func FlattenActions(actions []interface{}) []map[string]interface{} {
131+
result := make([]map[string]interface{}, len(actions))
132+
for i, action := range actions {
133+
if actMap, ok := action.(map[string]interface{}); ok {
134+
var vals []interface{}
135+
if v, ok := actMap["value"].([]interface{}); ok {
136+
vals = v
137+
}
138+
result[i] = map[string]interface{}{
139+
"action": actMap["action"],
140+
"value": vals,
141+
}
142+
}
143+
}
144+
return result
145+
}

ol_schema/user_mapping/user_mapping_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ func TestInflate(t *testing.T) {
126126
}
127127
for name, test := range tests {
128128
t.Run(name, func(t *testing.T) {
129-
subj := Inflate(test.ResourceData)
129+
subj, err := Inflate(test.ResourceData)
130+
assert.Nil(t, err)
130131
// Compare pointer values properly
131132
if subj.ID != nil && test.ExpectedOutput.ID != nil {
132133
assert.Equal(t, *test.ExpectedOutput.ID, *subj.ID)

0 commit comments

Comments
 (0)