Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Added support for ZIA User Management SortOrder and SortBy search criteria option #190

Merged
merged 3 commits into from
Dec 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/reuse-zia-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
uses: nick-invision/retry@v2
with:
max_attempts: 3
timeout_minutes: 10 # Adjust as needed
timeout_minutes: 90 # Adjust as needed
command: |
make test:integration:zia
make ziaActivator
Expand Down
20 changes: 11 additions & 9 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,9 @@ jobs:
ZPA_CUSTOMER_ID: ${{ secrets.ZPA_CUSTOMER_ID }}
ZPA_CLOUD: ${{ secrets.ZPA_CLOUD }}
ZSCALER_SDK_TEST_SWEEP: ${{ secrets.ZSCALER_SDK_TEST_SWEEP }}
# needs:
# - zpa-qa-tenant01
# - zpa-qa-tenant02
# - zpa-preview-tenant01
needs:
- zpa-qa-tenant01
- zpa-qa-tenant02

zpa-prod-tenant01:
uses: ./.github/workflows/reuse-zpa-tests.yml
Expand All @@ -88,11 +87,10 @@ jobs:
ZPA_CUSTOMER_ID: ${{ secrets.ZPA_CUSTOMER_ID }}
ZPA_CLOUD: ${{ secrets.ZPA_CLOUD }}
ZSCALER_SDK_TEST_SWEEP: ${{ secrets.ZSCALER_SDK_TEST_SWEEP }}
# needs:
# - zpa-qa-tenant01
# - zpa-qa-tenant02
# - zpa-preview-tenant01
# - zpa-beta-tenant01
needs:
- zpa-qa-tenant01
- zpa-qa-tenant02
- zpa-beta-tenant01

zia-zsbeta-tests:
uses: ./.github/workflows/reuse-zia-tests.yml
Expand Down Expand Up @@ -123,6 +121,8 @@ jobs:
# ZPA_CUSTOMER_ID: ${{ secrets.ZPA_CUSTOMER_ID }}
# ZPA_CLOUD: ${{ secrets.ZPA_CLOUD }}
# ZSCALER_SDK_TEST_SWEEP: ${{ secrets.ZSCALER_SDK_TEST_SWEEP }}
# needs:
# - zia-zsbeta-tests

zia-zs3-tests:
uses: ./.github/workflows/reuse-zia-tests.yml
Expand All @@ -138,6 +138,8 @@ jobs:
ZPA_CUSTOMER_ID: ${{ secrets.ZPA_CUSTOMER_ID }}
ZPA_CLOUD: ${{ secrets.ZPA_CLOUD }}
ZSCALER_SDK_TEST_SWEEP: ${{ secrets.ZSCALER_SDK_TEST_SWEEP }}
needs:
- zia-zsbeta-tests

zdx-tenant01:
uses: ./.github/workflows/reuse-zdx-tests.yml
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

- [PR #188](https://github.com/zscaler/zscaler-sdk-go/pull/188) Added support for ZIA 🆕 Forwarding Control Policy endpoint `/forwardingRules`
- [PR #188](https://github.com/zscaler/zscaler-sdk-go/pull/188) Added support for ZIA 🆕 Custom ZPA Gateway endpoint `/zpaGateways`for use with Forwarding Control policy to forward traffic to ZPA for Source IP Anchoring
- [PR #190](https://github.com/zscaler/zscaler-sdk-go/pull/190) Added support for ZIA Group, Department and UserName using ``SortOrder`` and ``SortBy`` search criteria option

### Fixes

Expand Down
1 change: 1 addition & 0 deletions docs/guides/release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Track all Zscaler SDK GO releases. New resources, features, and bug fixes will b

- [PR #188](https://github.com/zscaler/zscaler-sdk-go/pull/188) Added support for ZIA 🆕 Forwarding Control Policy endpoint `/forwardingRules`
- [PR #188](https://github.com/zscaler/zscaler-sdk-go/pull/188) Added support for ZIA 🆕 Custom ZPA Gateway endpoint `/zpaGateways`for use with Forwarding Control policy to forward traffic to ZPA for Source IP Anchoring
- [PR #190](https://github.com/zscaler/zscaler-sdk-go/pull/190) Added support for ZIA Group, Department and UserName using ``SortOrder`` and ``SortBy`` search criteria option

### Fixes

Expand Down
38 changes: 0 additions & 38 deletions zia/services/adminuserrolemgmt/admin_roles_test.go

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package adminuserrolemgmt
package admins

import (
"log"
Expand All @@ -10,6 +10,7 @@ import (

"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
"github.com/zscaler/zscaler-sdk-go/v2/tests"
"github.com/zscaler/zscaler-sdk-go/v2/zia/services/adminuserrolemgmt/roles"
)

// Constants for conflict retries
Expand Down Expand Up @@ -126,7 +127,7 @@ func TestUserManagement(t *testing.T) {
return
}

roleService := New(client)
roleService := roles.New(client)
roles, err := roleService.GetAllAdminRoles()
if err != nil || len(roles) == 0 {
t.Fatalf("Error retrieving roles or no roles found: %v", err)
Expand Down Expand Up @@ -238,7 +239,7 @@ func TestUserManagement(t *testing.T) {
_, delErr := service.DeleteAdminUser(createdResource.ID)
return delErr
})
_, err = service.Get(createdResource.ID)
_, err = service.GetAdminUsers(createdResource.ID)
if err == nil {
t.Fatalf("Expected error retrieving deleted resource, but got nil")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package adminuserrolemgmt
package admins

import (
"fmt"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package usermanagement
package admins

import (
"github.com/zscaler/zscaler-sdk-go/v2/zia"
Expand Down
76 changes: 76 additions & 0 deletions zia/services/adminuserrolemgmt/roles/admin_roles_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package roles

import (
"testing"

"github.com/zscaler/zscaler-sdk-go/v2/tests"
)

func TestAdminRoles_data(t *testing.T) {
client, err := tests.NewZiaClient()
if err != nil {
t.Errorf("Error creating client: %v", err)
return
}

service := New(client)

roles, err := service.GetAllAdminRoles()
if err != nil {
t.Errorf("Error getting admin roles: %v", err)
return
}
if len(roles) == 0 {
t.Errorf("No admin roles found")
return
}
name := roles[0].Name
t.Log("Getting admin roles by name:" + name)
role, err := service.GetByName(name)
if err != nil {
t.Errorf("Error getting admin roles by name: %v", err)
return
}
if role.Name != name {
t.Errorf("admin role name does not match: expected %s, got %s", name, role.Name)
return
}
// Negative Test: Try to retrieve an admin role with a non-existent name
nonExistentName := "ThisAdminRoleDoesNotExist"
_, err = service.GetByName(nonExistentName)
if err == nil {
t.Errorf("Expected error when getting by non-existent name, got nil")
return
}
}

func TestResponseFormatValidation(t *testing.T) {
client, err := tests.NewZiaClient()
if err != nil {
t.Errorf("Error creating client: %v", err)
return
}

service := New(client)

roles, err := service.GetAllAdminRoles()
if err != nil {
t.Errorf("Error getting admin role: %v", err)
return
}
if len(roles) == 0 {
t.Errorf("No admin role found")
return
}

// Validate admin role
for _, role := range roles {
// Checking if essential fields are not empty
if role.ID == 0 {
t.Errorf("admin role ID is empty")
}
if role.Name == "" {
t.Errorf("admin role Name is empty")
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package adminuserrolemgmt
package roles

import (
"fmt"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package adminuserrolemgmt
package roles

import (
"github.com/zscaler/zscaler-sdk-go/v2/zia"
Expand Down
26 changes: 26 additions & 0 deletions zia/services/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,29 @@ func ReadPage[T any](client *zia.Client, endpoint string, page int, list *[]T) e
*list = pageItems
return nil
}

type SortOrder string
type SortField string

const (
ASCSortOrder SortOrder = "ASC"
DESCSortOrder = "DESC"
IDSortField SortField = "id"
NameSortField = "name"
CreationTimeSortField = "creationTime"
ModifiedTimeSortField = "modifiedTime"
)

func GetSortParams(sortBy SortField, sortOrder SortOrder) string {
params := ""
if sortBy != "" {
params = "sortBy=" + string(sortBy)
}
if sortOrder != "" {
if params != "" {
params += "&"
}
params += "sortOrder=" + string(sortOrder)
}
return params
}
4 changes: 2 additions & 2 deletions zia/services/usermanagement/departments/departments.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func (service *Service) GetDepartments(departmentID int) (*Department, error) {

func (service *Service) GetDepartmentsByName(departmentName string) (*Department, error) {
var departments []Department
err := common.ReadAllPages(service.Client, departmentEndpoint, &departments)
err := common.ReadAllPages(service.Client, departmentEndpoint+"?"+common.GetSortParams(service.sortBy, service.sortOrder), &departments)
if err != nil {
return nil, err
}
Expand All @@ -53,6 +53,6 @@ func (service *Service) GetDepartmentsByName(departmentName string) (*Department

func (service *Service) GetAll() ([]Department, error) {
var departments []Department
err := common.ReadAllPages(service.Client, departmentEndpoint, &departments)
err := common.ReadAllPages(service.Client, departmentEndpoint+"?"+common.GetSortParams(service.sortBy, service.sortOrder), &departments)
return departments, err
}
77 changes: 77 additions & 0 deletions zia/services/usermanagement/departments/departments_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,81 @@ func TestAccDepartmentManagement(t *testing.T) {
t.Errorf("department name does not match: expected %s, got %s", name, department.Name)
return
}

// Negative Test: Try to retrieve a department with a non-existent name
nonExistentName := "ThisDepartmentDoesNotExist"
_, err = service.GetDepartmentsByName(nonExistentName)
if err == nil {
t.Errorf("Expected error when getting by non-existent name, got nil")
return
}
}

func TestResponseFormatValidation(t *testing.T) {
client, err := tests.NewZiaClient()
if err != nil {
t.Errorf("Error creating client: %v", err)
return
}

service := New(client)

departments, err := service.GetAll()
if err != nil {
t.Errorf("Error getting department: %v", err)
return
}
if len(departments) == 0 {
t.Errorf("No department found")
return
}

// Validate department
for _, department := range departments {
// Checking if essential fields are not empty
if department.ID == 0 {
t.Errorf("department ID is empty")
}
if department.Name == "" {
t.Errorf("department Name is empty")
}
}
}

func TestAllFieldsDepartments(t *testing.T) {
client, err := tests.NewZiaClient()
if err != nil {
t.Errorf("Error creating client: %v", err)
return
}

service := New(client)
departments, err := service.GetAll()
if err != nil {
t.Errorf("Error getting all departments: %v", err)
return
}

if len(departments) == 0 {
t.Errorf("No department found")
return
}

specificID := departments[0].ID
department, err := service.GetDepartments(specificID)
if err != nil {
t.Errorf("Error getting department by ID: %v", err)
return
}

// Now check each field
if department.ID == 0 {
t.Errorf("ID is empty")
}
if department.Name == "" {
t.Errorf("Name is empty")
}
if department.Comments == "" {
t.Errorf("Name is empty")
}
}
Loading
Loading