| Server IP : 157.230.181.24 / Your IP : 216.73.217.11 Web Server : Apache/2.4.58 (Ubuntu) System : Linux conductive 6.8.0-117-generic #117-Ubuntu SMP PREEMPT_DYNAMIC Tue May 5 19:26:24 UTC 2026 x86_64 User : ( 1000) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/vhosts/ceagon/open-oscar-server/state/ |
Upload File : |
package state
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
)
func TestNewAccountCreator(t *testing.T) {
tests := []struct {
name string
screenName DisplayScreenName
password string
insertUserErr error
wantErr error
validateUser func(*testing.T, User)
}{
{
name: "Success with valid AIM handle",
screenName: "TestUser123",
password: "validpass123",
wantErr: nil,
validateUser: func(t *testing.T, u User) {
assert.Equal(t, DisplayScreenName("TestUser123"), u.DisplayScreenName)
assert.Equal(t, NewIdentScreenName("testuser123"), u.IdentScreenName)
assert.False(t, u.IsICQ)
assert.NotEmpty(t, u.AuthKey)
assert.NotNil(t, u.WeakMD5Pass)
assert.NotNil(t, u.StrongMD5Pass)
},
},
{
name: "Success with valid UIN",
screenName: "12345678",
password: "valid12",
wantErr: nil,
validateUser: func(t *testing.T, u User) {
assert.Equal(t, DisplayScreenName("12345678"), u.DisplayScreenName)
assert.Equal(t, NewIdentScreenName("12345678"), u.IdentScreenName)
assert.True(t, u.IsICQ)
assert.NotEmpty(t, u.AuthKey)
assert.NotNil(t, u.WeakMD5Pass)
assert.NotNil(t, u.StrongMD5Pass)
},
},
{
name: "Success with AIM handle containing spaces",
screenName: "Test User 123",
password: "validpass123",
wantErr: nil,
validateUser: func(t *testing.T, u User) {
assert.Equal(t, DisplayScreenName("Test User 123"), u.DisplayScreenName)
assert.Equal(t, NewIdentScreenName("test user 123"), u.IdentScreenName)
assert.False(t, u.IsICQ)
},
},
{
name: "Invalid AIM handle - too short",
screenName: "Us",
password: "validpass123",
wantErr: ErrAIMHandleLength,
},
{
name: "Invalid AIM handle - starts with number",
screenName: "1User",
password: "validpass123",
wantErr: ErrAIMHandleInvalidFormat,
},
{
name: "Invalid AIM handle - ends with space",
screenName: "User123 ",
password: "validpass123",
wantErr: ErrAIMHandleInvalidFormat,
},
{
name: "Invalid UIN - too small",
screenName: "9999",
password: "valid12",
wantErr: ErrICQUINInvalidFormat,
},
{
name: "Invalid UIN - too large",
screenName: "2147483647",
password: "valid12",
wantErr: ErrICQUINInvalidFormat,
},
{
name: "Invalid UIN - contains non-digits",
screenName: "12345abc",
password: "valid12",
wantErr: ErrAIMHandleInvalidFormat, // Will be validated as AIM handle since IsUIN() returns false
},
{
name: "insertUser error",
screenName: "TestUser123",
password: "validpass123",
insertUserErr: assert.AnError,
wantErr: assert.AnError,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var capturedUser User
insertUser := func(ctx context.Context, u User) error {
capturedUser = u
return tt.insertUserErr
}
createAccount := NewAccountCreator(insertUser)
err := createAccount(context.Background(), tt.screenName, tt.password)
assert.ErrorIs(t, err, tt.wantErr)
if tt.validateUser != nil {
tt.validateUser(t, capturedUser)
}
})
}
}