2
0

org_dashboard_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package executor
  2. import "testing"
  3. // TestGogsOrganizationDashboardJoin reproduces the exact SQL Gogs emits for the
  4. // dashboard "switch context" organization list.
  5. func TestGogsOrganizationDashboardJoin(t *testing.T) {
  6. _, schema, table := newTestDB(t)
  7. e := newExec(schema, table)
  8. execMust(t, e, "CREATE TABLE `user` (id INTEGER PRIMARY KEY, lower_name TEXT, name TEXT, type INTEGER)")
  9. execMust(t, e, "CREATE TABLE org_user (id INTEGER PRIMARY KEY, uid INTEGER, org_id INTEGER, is_public INTEGER, is_owner INTEGER, num_teams INTEGER)")
  10. execMust(t, e, "INSERT INTO `user` VALUES (1, 'danfragoso', 'danfragoso', 0)")
  11. execMust(t, e, "INSERT INTO `user` VALUES (2, 'database.pizza', 'database.pizza', 1)")
  12. execMust(t, e, "INSERT INTO org_user VALUES (1, 1, 2, 0, 1, 1)")
  13. t.Run("gorm_raw_select_star", func(t *testing.T) {
  14. res := execMust(t, e, "SELECT * FROM `user` JOIN org_user ON org_user.org_id = user.id WHERE org_user.uid = 1 ORDER BY user.id ASC")
  15. t.Logf("columns=%v rows=%d", res.Columns, res.RowCount)
  16. if res.RowCount != 1 {
  17. t.Fatalf("expected 1 row, got %d", res.RowCount)
  18. }
  19. })
  20. t.Run("qualified_user_star", func(t *testing.T) {
  21. res := execMust(t, e, "SELECT user.* FROM user JOIN org_user ON org_user.org_id = user.id WHERE org_user.uid = 1 ORDER BY user.id ASC")
  22. t.Logf("columns=%v rows=%d", res.Columns, res.RowCount)
  23. if res.RowCount != 1 {
  24. t.Fatalf("expected 1 row, got %d", res.RowCount)
  25. }
  26. })
  27. t.Run("quoted_user_join", func(t *testing.T) {
  28. res := execMust(t, e, "SELECT * FROM `user` JOIN org_user ON org_user.org_id = `user`.id WHERE org_user.uid = 1 ORDER BY `user`.id ASC")
  29. t.Logf("columns=%v rows=%d", res.Columns, res.RowCount)
  30. if res.RowCount != 1 {
  31. t.Fatalf("expected 1 row, got %d", res.RowCount)
  32. }
  33. })
  34. t.Run("left_join_where_on_joined_table", func(t *testing.T) {
  35. res := execMust(t, e, "SELECT user.* FROM user LEFT JOIN org_user ON org_user.org_id = user.id WHERE org_user.uid = 1")
  36. if res.RowCount != 1 {
  37. t.Fatalf("expected 1 row, got %d", res.RowCount)
  38. }
  39. if res.Rows[0][1] != "database.pizza" {
  40. t.Fatalf("expected organization row, got %v", res.Rows[0])
  41. }
  42. })
  43. t.Run("left_join_where_on_left_table_still_works", func(t *testing.T) {
  44. res := execMust(t, e, "SELECT user.* FROM user LEFT JOIN org_user ON org_user.org_id = user.id WHERE user.id = 1")
  45. if res.RowCount != 1 {
  46. t.Fatalf("expected 1 row, got %d", res.RowCount)
  47. }
  48. if res.Rows[0][1] != "danfragoso" {
  49. t.Fatalf("expected individual row, got %v", res.Rows[0])
  50. }
  51. })
  52. }