internal/store/deps_test.go

v1.27.0
gitbay/internal/store/deps_test.go history · blame · raw

59 lines · 1753 bytes

 1package store
 2
 3import "testing"
 4
 5// The bot's name was not reserved before migration 0028, so an instance
 6// upgrading from v1.0.x may already have an owner holding it. The migration
 7// has to survive that: a daemon that will not start is worse than a
 8// dependency check that cannot open an issue.
 9func TestBotNameCollisionDoesNotBlockMigration(t *testing.T) {
10	for _, tc := range []struct {
11		name   string
12		occupy func(*Store) error
13	}{
14		{"user", func(s *Store) error {
15			_, err := s.DB.Exec("INSERT INTO users (username, is_admin) VALUES (?, 0)", BotUsername)
16			return err
17		}},
18		{"org", func(s *Store) error {
19			_, err := s.DB.Exec("INSERT INTO orgs (name) VALUES (?)", BotUsername)
20			return err
21		}},
22	} {
23		t.Run(tc.name, func(t *testing.T) {
24			s := open(t)
25			if err := s.MigrateTo(27); err != nil {
26				t.Fatal(err)
27			}
28			if err := tc.occupy(s); err != nil {
29				t.Fatal(err)
30			}
31			if err := s.MigrateTo(28); err != nil {
32				t.Fatalf("migration 0028 failed with %s %q present: %v", tc.name, BotUsername, err)
33			}
34			var n int
35			if err := s.DB.QueryRow("SELECT count(*) FROM users WHERE username = ?", BotUsername).Scan(&n); err != nil {
36				t.Fatal(err)
37			}
38			want := 0
39			if tc.name == "user" {
40				want = 1 // the pre-existing account, not a second one
41			}
42			if n != want {
43				t.Errorf("users named %q = %d, want %d", BotUsername, n, want)
44			}
45		})
46	}
47}
48
49// On a clean instance the account is created, which is what every other
50// dependency test assumes.
51func TestBotAccountCreatedWhenNameIsFree(t *testing.T) {
52	s := open(t)
53	if err := s.MigrateUp(); err != nil {
54		t.Fatal(err)
55	}
56	if _, err := s.UserByUsername(BotUsername); err != nil {
57		t.Fatalf("no %s account after a clean migration: %v", BotUsername, err)
58	}
59}