You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							61 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							61 lines
						
					
					
						
							1.9 KiB
						
					
					
				
								package s3api
							 | 
						|
								
							 | 
						|
								import (
							 | 
						|
									"testing"
							 | 
						|
								
							 | 
						|
									"github.com/seaweedfs/seaweedfs/weed/iam/providers"
							 | 
						|
									"github.com/stretchr/testify/assert"
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								func TestSelectPrimaryRole(t *testing.T) {
							 | 
						|
									s3iam := &S3IAMIntegration{}
							 | 
						|
								
							 | 
						|
									t.Run("empty_roles_returns_empty", func(t *testing.T) {
							 | 
						|
										identity := &providers.ExternalIdentity{Attributes: make(map[string]string)}
							 | 
						|
										result := s3iam.selectPrimaryRole([]string{}, identity)
							 | 
						|
										assert.Equal(t, "", result)
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									t.Run("single_role_returns_that_role", func(t *testing.T) {
							 | 
						|
										identity := &providers.ExternalIdentity{Attributes: make(map[string]string)}
							 | 
						|
										result := s3iam.selectPrimaryRole([]string{"admin"}, identity)
							 | 
						|
										assert.Equal(t, "admin", result)
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									t.Run("multiple_roles_returns_first", func(t *testing.T) {
							 | 
						|
										identity := &providers.ExternalIdentity{Attributes: make(map[string]string)}
							 | 
						|
										roles := []string{"viewer", "manager", "admin"}
							 | 
						|
										result := s3iam.selectPrimaryRole(roles, identity)
							 | 
						|
										assert.Equal(t, "viewer", result, "Should return first role")
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									t.Run("order_matters", func(t *testing.T) {
							 | 
						|
										identity := &providers.ExternalIdentity{Attributes: make(map[string]string)}
							 | 
						|
								
							 | 
						|
										// Test different orderings
							 | 
						|
										roles1 := []string{"admin", "viewer", "manager"}
							 | 
						|
										result1 := s3iam.selectPrimaryRole(roles1, identity)
							 | 
						|
										assert.Equal(t, "admin", result1)
							 | 
						|
								
							 | 
						|
										roles2 := []string{"viewer", "admin", "manager"}
							 | 
						|
										result2 := s3iam.selectPrimaryRole(roles2, identity)
							 | 
						|
										assert.Equal(t, "viewer", result2)
							 | 
						|
								
							 | 
						|
										roles3 := []string{"manager", "admin", "viewer"}
							 | 
						|
										result3 := s3iam.selectPrimaryRole(roles3, identity)
							 | 
						|
										assert.Equal(t, "manager", result3)
							 | 
						|
									})
							 | 
						|
								
							 | 
						|
									t.Run("complex_enterprise_roles", func(t *testing.T) {
							 | 
						|
										identity := &providers.ExternalIdentity{Attributes: make(map[string]string)}
							 | 
						|
										roles := []string{
							 | 
						|
											"finance-readonly",
							 | 
						|
											"hr-manager",
							 | 
						|
											"it-system-admin",
							 | 
						|
											"guest-viewer",
							 | 
						|
										}
							 | 
						|
										result := s3iam.selectPrimaryRole(roles, identity)
							 | 
						|
										// Should return the first role
							 | 
						|
										assert.Equal(t, "finance-readonly", result, "Should return first role in list")
							 | 
						|
									})
							 | 
						|
								}
							 |