package data import ( "testing" ) func TestUserRegisterAndCheck(t *testing.T) { user := &User{} login := &Login{ User: "testuser", Password: "testpassword", } err := user.Register(login) if err != nil { t.Fatalf("Failed to register user: %v", err) } if user.ID == "" { t.Error("Expected user ID to be set, got empty string") } if user.User != "testuser" { t.Errorf("Expected username 'testuser', got '%s'", user.User) } if len(user.Password) == 0 { t.Error("Expected password to be hashed and set, got empty slice") } if len(user.Salt) == 0 { t.Error("Expected salt to be set, got empty slice") } correctLogin := &Login{ User: "testuser", Password: "testpassword", } if !user.Check(correctLogin) { t.Error("Check failed for correct password") } incorrectLogin := &Login{ User: "testuser", Password: "wrongpassword", } if user.Check(incorrectLogin) { t.Error("Check passed for incorrect password") } wrongUserLogin := &Login{ User: "wronguser", Password: "testpassword", } if user.Check(wrongUserLogin) { t.Error("Check passed for incorrect username") } } func TestSalt(t *testing.T) { salt, err := Salt() if err != nil { t.Fatalf("Failed to generate salt: %v", err) } if len(salt) != saltLength { t.Errorf("Expected salt length %d, got %d", saltLength, len(salt)) } salt2, err := Salt() if err != nil { t.Fatalf("Failed to generate second salt: %v", err) } // Check that salts are different (extremely unlikely to be the same) different := false for i := 0; i < len(salt); i++ { if salt[i] != salt2[i] { different = true break } } if !different { t.Error("Expected different salts, got identical values") } }