// go:build unit package service import ( "testing" ) func TestCheck(t *testing.T) { testCases := []struct { name string passphrase []byte username string password string wantError bool }{ { name: "generated", passphrase: nil, username: "gabrielgio", password: "adminadmin", wantError: false, }, { name: "static", passphrase: []byte("$2a$14$W2yT0E6Zm8nTecqipHUQGOLC6PvNjIQqpQTW/MZmD5oqDfaBJnBV6"), username: "gabrielgio", password: "adminadmin", wantError: false, }, { name: "error", passphrase: []byte("This is not a valid hash"), username: "gabrielgio", password: "adminadmin", wantError: true, }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { mock := &mockAuthRepository{ username: tc.username, password: tc.password, passphrase: tc.passphrase, } service := AuthService{authRepository: mock} if service.CheckAuth(tc.username, tc.password) == tc.wantError { t.Errorf("Invalid result, wanted %t got %t", tc.wantError, !tc.wantError) } }) } } func TestValidate(t *testing.T) { testCases := []struct { name string aesKey []byte }{ { name: "generated", aesKey: nil, }, { name: "static", aesKey: []byte("RTGkmunKmi5agh7jaqENunG2zI/godnkqhHaHyX/AVg="), }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { mock := &mockAuthRepository{ aesKey: tc.aesKey, } service := AuthService{authRepository: mock} token, err := service.IssueToken() if err != nil { t.Fatalf("Error issuing token: %s", err.Error()) } v, err := service.ValidateToken(token) if err != nil { t.Fatalf("Error validating token: %s", err.Error()) } if !v { t.Error("Invalid token generated") } }) } } type mockAuthRepository struct { username string password string passphrase []byte aesKey []byte } func (m *mockAuthRepository) GetPassphrase() []byte { if m.passphrase == nil { hash, _ := GenerateHash(m.username, m.password) m.passphrase = []byte(hash) } return m.passphrase } func (m *mockAuthRepository) GetBase64AesKey() []byte { if m.aesKey == nil { key, _ := GenerateAesKey() m.aesKey = []byte(key) } return m.aesKey }