Browse Source

Fix finding playlist from db

Toni Fadjukoff 6 years ago
parent
commit
f0a37ac398
3 changed files with 122 additions and 3 deletions
  1. 3 0
      bot.go
  2. 11 3
      db.go
  3. 108 0
      db_test.go

+ 3 - 0
bot.go View File

324
 				} else {
324
 				} else {
325
 					playlistId, tracks := findPlaylist(changedWikiText)
325
 					playlistId, tracks := findPlaylist(changedWikiText)
326
 					currentTracks, err := app.db.FindPlaylistBySection(section.title)
326
 					currentTracks, err := app.db.FindPlaylistBySection(section.title)
327
+					if err != nil {
328
+						log.Println("Failed to find tracks from DB", err)
329
+					}
327
 					log.Println("Checking if playlist needs updating", currentTracks, tracks)
330
 					log.Println("Checking if playlist needs updating", currentTracks, tracks)
328
 					if len(tracks) > 0 && (err != nil || reflect.DeepEqual(currentTracks, tracks)) {
331
 					if len(tracks) > 0 && (err != nil || reflect.DeepEqual(currentTracks, tracks)) {
329
 
332
 

+ 11 - 3
db.go View File

6
 	"errors"
6
 	"errors"
7
 	_ "github.com/lib/pq"
7
 	_ "github.com/lib/pq"
8
 	"log"
8
 	"log"
9
+	"os"
9
 )
10
 )
10
 
11
 
11
 type DB struct {
12
 type DB struct {
13
 }
14
 }
14
 
15
 
15
 func InitDatabase() *DB {
16
 func InitDatabase() *DB {
16
-	connStr := "user=levyraati dbname=levyraati sslmode=disable"
17
+	if os.Getenv("PGUSER") == "" {
18
+		os.Setenv("PGUSER", "levyraati")
19
+	}
20
+	if os.Getenv("PGDATABASE") == "" {
21
+		os.Setenv("PGDATABASE", "levyraati")
22
+	}
23
+
24
+	connStr := "sslmode=disable"
17
 	var err error
25
 	var err error
18
 	database, err := sql.Open("postgres", connStr)
26
 	database, err := sql.Open("postgres", connStr)
19
 	if err != nil {
27
 	if err != nil {
191
 	WHERE r.section = $1`
199
 	WHERE r.section = $1`
192
 	row := db.database.QueryRow(query, sectionName)
200
 	row := db.database.QueryRow(query, sectionName)
193
 	var tracksJson []byte
201
 	var tracksJson []byte
194
-	var tracks []string
202
+	tracks := make([]string, 0)
195
 	err := row.Scan(&tracksJson)
203
 	err := row.Scan(&tracksJson)
196
 	if err != nil {
204
 	if err != nil {
197
 		return nil, err
205
 		return nil, err
198
 	}
206
 	}
199
-	err = json.Unmarshal(tracksJson, tracks)
207
+	err = json.Unmarshal(tracksJson, &tracks)
200
 	if err != nil {
208
 	if err != nil {
201
 		return nil, err
209
 		return nil, err
202
 	}
210
 	}

+ 108 - 0
db_test.go View File

1
+package main
2
+
3
+import (
4
+	"io/ioutil"
5
+	"os"
6
+	"testing"
7
+)
8
+
9
+var db *DB
10
+
11
+func initTestCase(t *testing.T) {
12
+	os.Setenv("PGDATABASE", "levyraati_test")
13
+	os.Setenv("PGUSER", "levyraati_test")
14
+	os.Setenv("PGPASSWORD", "levyraati_test")
15
+	db = InitDatabase()
16
+
17
+	execSQLFile(t, "sql/clear-schema.sql")
18
+	execSQLFile(t, "sql/database.sql")
19
+	execSQLFile(t, "sql/database-test.sql")
20
+}
21
+
22
+func execSQLFile(t *testing.T, filename string) {
23
+	data, err := ioutil.ReadFile(filename)
24
+	if err != nil {
25
+		t.Fatal("Unable to read setup file", filename)
26
+	}
27
+	_, err = db.database.Exec(string(data))
28
+	if err != nil {
29
+		t.Fatal("Unable to setup database", err)
30
+	}
31
+}
32
+
33
+func TestDbConnWorks(t *testing.T) {
34
+	initTestCase(t)
35
+	if db == nil {
36
+		t.Error("Database not initialized")
37
+	}
38
+}
39
+
40
+func TestFindAllEntries(t *testing.T) {
41
+	initTestCase(t)
42
+
43
+	songs, err := db.FindAllEntries("Lamperi")
44
+	if err != nil {
45
+		t.Error("Error while searching for entries")
46
+	}
47
+	if len(songs) != 52 {
48
+		t.Error("Should have found 52 entries, got", len(songs))
49
+	}
50
+}
51
+
52
+func TestFindAllPanels(t *testing.T) {
53
+	initTestCase(t)
54
+
55
+	panels, err := db.FindAllPanels()
56
+	if err != nil {
57
+		t.Error("Error while searching for panels")
58
+	}
59
+	if len(panels) != 1 {
60
+		t.Error("Should have found 1 panel, got", len(panels))
61
+	}
62
+}
63
+
64
+func TestFindPlaylistBySection(t *testing.T) {
65
+	initTestCase(t)
66
+
67
+	playlistEntries, err := db.FindPlaylistBySection("Viikko 07")
68
+	if err != nil {
69
+		t.Error("Error while searching for playlist")
70
+	}
71
+	if len(playlistEntries) != 0 {
72
+		t.Error("Should have found 0 playlistEntries, got", len(playlistEntries))
73
+	}
74
+}
75
+
76
+func TestUpdatePlaylistBySection(t *testing.T) {
77
+	initTestCase(t)
78
+
79
+	updated, err := db.UpdatePlaylistBySection("Viikko 07", []string{"ID1", "ID2", "ID3", "ID4"})
80
+	if err != nil {
81
+		t.Error("Error while updating for panels", err)
82
+	}
83
+	if !updated {
84
+		t.Error("Could not update section")
85
+	}
86
+	playlistEntries, err := db.FindPlaylistBySection("Viikko 07")
87
+	if err != nil {
88
+		t.Error("Error while searching for playlist", err)
89
+	}
90
+	if len(playlistEntries) != 4 {
91
+		t.Error("Should have found 4 playlistEntries, got", len(playlistEntries))
92
+	}
93
+}
94
+func TestUpdatePlaylistBySectionUnknownSection(t *testing.T) {
95
+	initTestCase(t)
96
+
97
+	updated, err := db.UpdatePlaylistBySection("Viikko joskus", []string{"ID1", "ID2", "ID3", "ID4"})
98
+	if err != nil {
99
+		t.Error("Error while updating for panels", err)
100
+	}
101
+	if updated {
102
+		t.Error("Should not update unknown section")
103
+	}
104
+	_, err = db.FindPlaylistBySection("Viikko joskus")
105
+	if err == nil {
106
+		t.Error("Should be error with unknown section", err)
107
+	}
108
+}