Skip to content

Commit

Permalink
fix instances where isICQ is not set/read
Browse files Browse the repository at this point in the history
  • Loading branch information
mk6i committed Aug 16, 2024
1 parent 7b4138e commit 02dd53c
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 37 deletions.
1 change: 1 addition & 0 deletions state/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ func NewStubUser(screenName DisplayScreenName) (User, error) {
IdentScreenName: NewIdentScreenName(string(screenName)),
DisplayScreenName: screenName,
AuthKey: uid.String(),
IsICQ: screenName.IsUIN(),
}
err = u.HashPassword("welcome1")
return u, err
Expand Down
15 changes: 11 additions & 4 deletions state/user_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,12 @@ func (f SQLiteUserStore) runMigrations() error {
return nil
}

// AllUsers returns all stored users. It only populates the User.IdentScreenName and
// User.DisplayScreenName fields in the return slice.
// AllUsers returns all stored users. It only populates the following fields:
// - IdentScreenName
// - DisplayScreenName
// - IsICQ
func (f SQLiteUserStore) AllUsers() ([]User, error) {
q := `SELECT identScreenName, displayScreenName FROM users`
q := `SELECT identScreenName, displayScreenName, isICQ FROM users`
rows, err := f.db.Query(q)
if err != nil {
return nil, err
Expand All @@ -83,12 +85,14 @@ func (f SQLiteUserStore) AllUsers() ([]User, error) {
var users []User
for rows.Next() {
var identSN, displaySN string
if err := rows.Scan(&identSN, &displaySN); err != nil {
var isICQ bool
if err := rows.Scan(&identSN, &displaySN, &isICQ); err != nil {
return nil, err
}
users = append(users, User{
IdentScreenName: NewIdentScreenName(identSN),
DisplayScreenName: DisplayScreenName(displaySN),
IsICQ: isICQ,
})
}

Expand Down Expand Up @@ -372,6 +376,9 @@ func getUsers(filterFN filterFN, tx queryer) ([]User, error) {
// InsertUser inserts a user to the store. Return ErrDupUser if a user with the
// same screen name already exists.
func (f SQLiteUserStore) InsertUser(u User) error {
if u.DisplayScreenName.IsUIN() && !u.IsICQ {
return errors.New("inserting user with UIN and isICQ=false")
}
q := `
INSERT INTO users (identScreenName, displayScreenName, authKey, weakMD5Pass, strongMD5Pass, isICQ)
VALUES (?, ?, ?, ?, ?, ?)
Expand Down
66 changes: 33 additions & 33 deletions state/user_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -445,9 +445,7 @@ func TestSQLiteUserStore_Users(t *testing.T) {
}()

f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

want := []User{
{
Expand All @@ -462,6 +460,11 @@ func TestSQLiteUserStore_Users(t *testing.T) {
IdentScreenName: NewIdentScreenName("userC"),
DisplayScreenName: "userC",
},
{
IdentScreenName: NewIdentScreenName("100003"),
DisplayScreenName: "100003",
IsICQ: true,
},
}

for _, u := range want {
Expand All @@ -475,6 +478,23 @@ func TestSQLiteUserStore_Users(t *testing.T) {
assert.Equal(t, want, have)
}

func TestSQLiteUserStore_InsertUser_UINButNotIsICQ(t *testing.T) {
defer func() {
assert.NoError(t, os.Remove(testFile))
}()

f, err := NewSQLiteUserStore(testFile)
assert.NoError(t, err)

user := User{
IdentScreenName: NewIdentScreenName("100003"),
DisplayScreenName: "100003",
}

err = f.InsertUser(user)
assert.ErrorContains(t, err, "inserting user with UIN and isICQ=false")
}

func TestSQLiteUserStore_DeleteUser_DeleteExistentUser(t *testing.T) {
defer func() {
assert.NoError(t, os.Remove(testFile))
Expand Down Expand Up @@ -840,9 +860,7 @@ func TestSQLiteUserStore_SetWorkInfo(t *testing.T) {
}()

f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

screenName := NewIdentScreenName("testuser")
user := User{
Expand Down Expand Up @@ -930,9 +948,7 @@ func TestSQLiteUserStore_SetMoreInfo(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create a test user
screenName := NewIdentScreenName("testuser")
Expand Down Expand Up @@ -1009,9 +1025,7 @@ func TestSQLiteUserStore_SetUserNotes(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create a test user
screenName := NewIdentScreenName("testuser")
Expand Down Expand Up @@ -1067,9 +1081,7 @@ func TestSQLiteUserStore_SetInterests(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create a test user
screenName := NewIdentScreenName("testuser")
Expand Down Expand Up @@ -1146,9 +1158,7 @@ func TestSQLiteUserStore_SetAffiliations(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create a test user
screenName := NewIdentScreenName("testuser")
Expand Down Expand Up @@ -1237,9 +1247,7 @@ func TestSQLiteUserStore_SetBasicInfo(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create a test user
screenName := NewIdentScreenName("testuser")
Expand Down Expand Up @@ -1334,9 +1342,7 @@ func TestSQLiteUserStore_FindByInterests(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create and set up test users with different interests
user1 := User{
Expand Down Expand Up @@ -1444,9 +1450,7 @@ func TestSQLiteUserStore_FindByDetails(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create and set up test users with different details using SetBasicInfo
user1 := User{
Expand Down Expand Up @@ -1556,9 +1560,7 @@ func TestSQLiteUserStore_FindByEmail(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create and set up test users with different email addresses using SetBasicInfo
user1 := User{
Expand Down Expand Up @@ -1626,9 +1628,7 @@ func TestSQLiteUserStore_FindByUIN(t *testing.T) {

// Initialize the SQLiteUserStore with a test database file
f, err := NewSQLiteUserStore(testFile)
if err != nil {
assert.NoError(t, err)
}
assert.NoError(t, err)

// Create and set up test users where UIN is the same as IdentScreenName
user1 := User{
Expand Down

0 comments on commit 02dd53c

Please sign in to comment.