Просмотр исходного кода

fix bug in InterestedUsers, write unit test

Mike 3 лет назад
Родитель
Сommit
0e6fa8e0ac
2 измененных файлов с 36 добавлено и 6 удалено
  1. 5 6
      oscar/feedbag_store.go
  2. 31 0
      oscar/feedbag_store_test.go

+ 5 - 6
oscar/feedbag_store.go

@@ -161,14 +161,13 @@ func (f *FeedbagStore) InterestedUsers(screenName string) ([]string, error) {
 		FROM feedbag f
 		WHERE f.name = ?
 		  AND f.classID = 0
-		  AND NOT EXISTS(SELECT 1
-						 FROM feedbag
-						 WHERE ScreenName = f.ScreenName
-						   AND name = ?
-						   AND classID = 3)
+		-- Don't show screenName that its blocked buddy is online
+		AND NOT EXISTS(SELECT 1 FROM feedbag WHERE ScreenName = ? AND name = f.ScreenName AND classID = 3)
+		-- Don't show blocked buddy that screenName is online
+		AND NOT EXISTS(SELECT 1 FROM feedbag WHERE ScreenName = f.ScreenName AND name = f.name AND classID = 3)
 	`
 
-	rows, err := f.db.Query(q, screenName, screenName)
+	rows, err := f.db.Query(q, screenName, screenName, screenName)
 	if err != nil {
 		return nil, err
 	}

+ 31 - 0
oscar/feedbag_store_test.go

@@ -306,3 +306,34 @@ func TestProfileNonExistent(t *testing.T) {
 		t.Fatalf("failed to get error on non-existing profile: %v", err)
 	}
 }
+
+func TestInterestedUsers(t *testing.T) {
+
+	const testFile string = "/Users/mike/dev/goaim/aim_test.db"
+
+	defer func() {
+		err := os.Remove(testFile)
+		if err != nil {
+			t.Error("unable to clean up test file")
+		}
+	}()
+
+	f, err := NewFeedbagStore(testFile)
+	if err != nil {
+		t.Fatalf("failed to create new feedbag store: %s", err.Error())
+	}
+
+	f.db.Exec(`INSERT INTO "feedbag" VALUES('userA',0,13852,3,'userB',NULL,1691286176)`)
+	f.db.Exec(`INSERT INTO "feedbag" VALUES('userA',27631,4016,0,'userB',NULL,1690508233)`)
+	f.db.Exec(`INSERT INTO "feedbag" VALUES('userB',28330,8120,0,'userA',NULL,1691180328)`)
+
+	users, err := f.InterestedUsers("userA")
+	if len(users) != 0 {
+		t.Fatalf("expected no interested users, got %v", users)
+	}
+
+	users, err = f.InterestedUsers("userB")
+	if len(users) != 0 {
+		t.Fatalf("expected no interested users, got %v", users)
+	}
+}