forked from baron/baron-sso
101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
package validator
|
|
|
|
import (
|
|
"baron-sso-backend/internal/domain"
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
// MockProvider는 IdentityProvider 인터페이스를 구현하는 테스트용 구조체입니다.
|
|
type MockProvider struct {
|
|
Supported []string
|
|
}
|
|
|
|
func (m *MockProvider) Name() string {
|
|
return "MockIDP"
|
|
}
|
|
|
|
func (m *MockProvider) GetMetadata() (*domain.IDPMetadata, error) {
|
|
return &domain.IDPMetadata{
|
|
SupportedFields: m.Supported,
|
|
}, nil
|
|
}
|
|
|
|
func (m *MockProvider) CreateUser(user *domain.BrokerUser, password string) (string, error) {
|
|
return "", nil
|
|
}
|
|
|
|
func (m *MockProvider) SignIn(loginID, password string) (*domain.AuthInfo, error) {
|
|
return &domain.AuthInfo{}, nil
|
|
}
|
|
|
|
// Stub implementations to satisfy the IdentityProvider interface for this unit test.
|
|
func (m *MockProvider) InitiatePasswordReset(loginID, redirectUrl string) error {
|
|
return nil
|
|
}
|
|
|
|
func (m *MockProvider) VerifyPasswordResetToken(token string) (*domain.AuthInfo, error) {
|
|
return &domain.AuthInfo{}, nil
|
|
}
|
|
|
|
func (m *MockProvider) UpdateUserPassword(loginID, newPassword string, r *http.Request) error {
|
|
return nil
|
|
}
|
|
|
|
func TestValidateIDPCompatibility(t *testing.T) {
|
|
// BrokerUser 모델은 다음과 같이 정의되어 있다고 가정합니다 (idp_models.go 참조):
|
|
// ID (required), Email (required), Name, PhoneNumber
|
|
// Attributes (required_keys: "grade", "department")
|
|
|
|
tests := []struct {
|
|
name string
|
|
supported []string
|
|
wantErr bool
|
|
}{
|
|
{
|
|
name: "성공: 모든 필수 필드 지원",
|
|
supported: []string{"id", "email", "name", "grade", "department"},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "성공: 선택 필드(name) 누락이어도 성공",
|
|
supported: []string{"id", "email", "grade", "department"},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "실패: 필수 필드(id) 누락",
|
|
supported: []string{"email", "grade", "department"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "실패: 필수 필드(email) 누락",
|
|
supported: []string{"id", "grade", "department"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "실패: 커스텀 속성(grade) 누락",
|
|
supported: []string{"id", "email", "department"},
|
|
wantErr: true,
|
|
},
|
|
{
|
|
name: "실패: 커스텀 속성(department) 누락",
|
|
supported: []string{"id", "email", "grade"},
|
|
wantErr: true,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
// 테스트용 IDP Provider 생성
|
|
mockIDP := &MockProvider{Supported: tt.supported}
|
|
|
|
// 검증 수행
|
|
err := ValidateIDPCompatibility(domain.BrokerUser{}, mockIDP)
|
|
|
|
if (err != nil) != tt.wantErr {
|
|
t.Errorf("ValidateIDPCompatibility() error = %v, wantErr %v", err, tt.wantErr)
|
|
}
|
|
})
|
|
}
|
|
}
|