Skip to content

Commit 38727e4

Browse files
Add trending tests
1 parent 2f225fc commit 38727e4

6 files changed

Lines changed: 87 additions & 11 deletions

File tree

api/fixture_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,16 @@ var (
105105
"updated_at": time.Now(),
106106
"image_url": nil,
107107
}
108+
109+
trackTrendingScoreBaseRow = map[string]any{
110+
"track_id": nil,
111+
"type": "TRACKS",
112+
"genre": nil,
113+
"version": "pnagD",
114+
"time_range": nil,
115+
"score": nil,
116+
"created_at": time.Now(),
117+
}
108118
)
109119

110120
func insertFixtures(table string, baseRow map[string]any, csvFile string) {

api/server_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ func TestMain(m *testing.M) {
6767
insertFixtures("follows", followBaseRow, "testdata/follow_fixtures.csv")
6868
insertFixtures("reposts", repostBaseRow, "testdata/repost_fixtures.csv")
6969
insertFixtures("developer_apps", developerAppBaseRow, "testdata/developer_app_fixtures.csv")
70+
insertFixtures("track_trending_scores", trackTrendingScoreBaseRow, "testdata/track_trending_scores_fixtures.csv")
7071

7172
// index to es / os
7273

api/testdata/track_fixtures.csv

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
track_id,owner_id,title,is_unlisted,stream_conditions,download_conditions
2-
200,2,Culca Canyon,f,,
3-
201,2,Turkey Time DEMO,t,,
4-
300,3,Follow Gated Download,f,,"{""follow_user_id"": 3}"
5-
301,3,Pay Gated Download,f,,"{""usdc_purchase"": {""price"": 135, ""splits"": [{""user_id"": 3, ""percentage"": 100.0}]}}"
6-
302,3,Tip Gated Stream,f," {""tip_user_id"": 859175075}",
1+
track_id,genre,owner_id,title,is_unlisted,stream_conditions,download_conditions
2+
200,Electronic,2,Culca Canyon,f,,
3+
201,Alternative,2,Turkey Time DEMO,t,,
4+
202,Alternative,2,Turkey Time (live),f,,
5+
300,Electronic,3,Follow Gated Download,f,,"{""follow_user_id"": 3}"
6+
301,Electronic,3,Pay Gated Download,f,,"{""usdc_purchase"": {""price"": 135, ""splits"": [{""user_id"": 3, ""percentage"": 100.0}]}}"
7+
302,Electronic,3,Tip Gated Stream,f," {""tip_user_id"": 859175075}",
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
track_id,genre,time_range,score
2+
200,Electronic,week,1.0
3+
200,Electronic,allTime,5.0
4+
201,Alternative,week,2.0
5+
202,Alternative,week,2.0
6+
300,Electronic,week,3.0
7+
300,Electronic,allTime,3.0

api/v1_trending.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
func (app *ApiServer) v1Trending(c *fiber.Ctx) error {
1010
myId := c.Locals("myId")
1111

12+
// SQL query with conditional genre filter
1213
sql := `
1314
SELECT track_trending_scores.track_id
1415
FROM track_trending_scores
@@ -19,18 +20,20 @@ func (app *ApiServer) v1Trending(c *fiber.Ctx) error {
1920
AND tracks.is_available = true
2021
WHERE type = 'TRACKS'
2122
AND version = 'pnagD'
22-
AND time_range = 'week'
23+
AND time_range = @timeRange
24+
AND (@genre = '' OR track_trending_scores.genre = @genre)
2325
ORDER BY
2426
score DESC,
2527
track_id DESC
2628
LIMIT @limit
2729
OFFSET @offset
2830
`
2931

30-
args := pgx.NamedArgs{
31-
"limit": 100,
32-
"offset": 0,
33-
}
32+
args := pgx.NamedArgs{}
33+
args["limit"] = c.Query("limit", "100")
34+
args["offset"] = c.Query("offset", "0")
35+
args["timeRange"] = c.Query("timeRange", "week")
36+
args["genre"] = c.Query("genre", "")
3437

3538
rows, err := app.pool.Query(c.Context(), sql, args)
3639
if err != nil {

api/v1_trending_test.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package api
2+
3+
import (
4+
"testing"
5+
6+
"bridgerton.audius.co/api/dbv1"
7+
"bridgerton.audius.co/trashid"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestGetTrending(t *testing.T) {
12+
var resp struct {
13+
Data []dbv1.FullTrack
14+
}
15+
status, _ := testGet(t, "/v1/tracks/trending", &resp)
16+
assert.Equal(t, 200, status)
17+
18+
assert.Equal(t, trashid.MustEncodeHashID(300), resp.Data[0].ID)
19+
assert.Equal(t, "Electronic", resp.Data[0].Genre.String)
20+
21+
assert.Equal(t, trashid.MustEncodeHashID(202), resp.Data[1].ID)
22+
assert.Equal(t, "Alternative", resp.Data[1].Genre.String)
23+
24+
assert.Equal(t, trashid.MustEncodeHashID(200), resp.Data[2].ID)
25+
assert.Equal(t, "Electronic", resp.Data[2].Genre.String)
26+
}
27+
28+
func TestGetTrendingElectronic(t *testing.T) {
29+
var resp struct {
30+
Data []dbv1.FullTrack
31+
}
32+
status, _ := testGet(t, "/v1/tracks/trending?genre=Electronic", &resp)
33+
assert.Equal(t, 200, status)
34+
35+
assert.Equal(t, "eYRWn", resp.Data[0].ID)
36+
assert.Equal(t, "Electronic", resp.Data[0].Genre.String)
37+
38+
assert.Equal(t, "eYJyn", resp.Data[1].ID)
39+
assert.Equal(t, "Electronic", resp.Data[1].Genre.String)
40+
}
41+
42+
func TestGetTrendingAllTime(t *testing.T) {
43+
var resp struct {
44+
Data []dbv1.FullTrack
45+
}
46+
status, _ := testGet(t, "/v1/tracks/trending?timeRange=allTime", &resp)
47+
assert.Equal(t, 200, status)
48+
49+
assert.Equal(t, "eYJyn", resp.Data[0].ID)
50+
assert.Equal(t, "Electronic", resp.Data[0].Genre.String)
51+
52+
assert.Equal(t, "eYRWn", resp.Data[1].ID)
53+
assert.Equal(t, "Electronic", resp.Data[1].Genre.String)
54+
}

0 commit comments

Comments
 (0)