Monorepo for Tangled tangled.org
2

Configure Feed

Select the types of activity you want to include in your feed.

at icy/yovxsu 3.2 kB View raw
1package db 2 3import ( 4 "fmt" 5 "testing" 6 7 "tangled.org/core/appview/models" 8 "tangled.org/core/orm" 9) 10 11func insertRecentLink(t *testing.T, d *DB, userDid string, linkType models.RecentLinkType, target, visited string) { 12 t.Helper() 13 if _, err := d.Exec( 14 `insert into recent_links (user_did, link_type, target, visited) values (?, ?, ?, ?)`, 15 userDid, string(linkType), target, visited, 16 ); err != nil { 17 t.Fatalf("insertRecentLink %q: %v", target, err) 18 } 19} 20 21func TestUpsertRecentLink_LimitFive(t *testing.T) { 22 d := newTestDB(t) 23 const userDid = "did:plc:akshay" 24 25 for i := range 6 { 26 target := fmt.Sprintf("%d-repo-did", i) 27 if err := UpsertRecentLink(d, userDid, models.RecentLinkTypeRepo, target); err != nil { 28 t.Fatalf("UpsertRecentLink %d: %v", i, err) 29 } 30 } 31 32 if got := countRows(t, d, "select count(*) from recent_links where user_did = ?", userDid); got != 5 { 33 t.Errorf("recent_links count = %d, want 5", got) 34 } 35} 36 37func TestUpsertRecentLink_DeduplicatesAndUpdatesTimestamp(t *testing.T) { 38 d := newTestDB(t) 39 const userDid = "did:plc:akshay" 40 const target = "at://did:plc:akshay/sh.tangled.repo/myrepo" 41 42 insertRecentLink(t, d, userDid, models.RecentLinkTypeIssue, target, "2024-01-01T00:00:00Z") 43 44 if err := UpsertRecentLink(d, userDid, models.RecentLinkTypeIssue, target); err != nil { 45 t.Fatalf("upsert: %v", err) 46 } 47 48 if got := countRows(t, d, "select count(*) from recent_links where user_did = ? and target = ?", userDid, target); got != 1 { 49 t.Errorf("expected 1 row after duplicate upsert, got %d", got) 50 } 51 52 var visited string 53 if err := d.QueryRow("select visited from recent_links where user_did = ? and target = ?", userDid, target).Scan(&visited); err != nil { 54 t.Fatalf("scan visited: %v", err) 55 } 56 if visited <= "2024-01-01T00:00:00Z" { 57 t.Errorf("visited not updated: got %q, want > %q", visited, "2024-01-01T00:00:00Z") 58 } 59} 60 61func TestGetRecentLinks_LessThanFive(t *testing.T) { 62 d := newTestDB(t) 63 const userDid = "did:plc:akshay" 64 65 for i := range 6 { 66 name := fmt.Sprintf("repo-%d", i) 67 insertRecentLink(t, d, userDid, models.RecentLinkTypeRepo, name, "2024-01-01T00:00:00Z") 68 } 69 70 links, err := GetRecentLinks(d, orm.FilterEq("user_did", userDid)) 71 if err != nil { 72 t.Fatalf("GetRecentLinks: %v", err) 73 } 74 75 if len(links) > 5 { 76 t.Errorf("GetRecentLinks returned %d links, want <5", len(links)) 77 } 78} 79 80func TestGetRecentLinks_OrderedByMostRecent(t *testing.T) { 81 d := newTestDB(t) 82 const userDid = "did:plc:akshay" 83 84 insertRecentLink(t, d, userDid, models.RecentLinkTypeRepo, "repo-first", "2024-01-01T00:00:00Z") 85 insertRecentLink(t, d, userDid, models.RecentLinkTypeRepo, "repo-second", "2024-01-02T00:00:00Z") 86 insertRecentLink(t, d, userDid, models.RecentLinkTypeRepo, "repo-third", "2024-01-03T00:00:00Z") 87 88 links, err := GetRecentLinks(d, orm.FilterEq("user_did", userDid)) 89 if err != nil { 90 t.Fatalf("GetRecentLinks: %v", err) 91 } 92 93 if len(links) != 3 { 94 t.Fatalf("expected 3 links, got %d", len(links)) 95 } 96 if links[0].Target != "repo-third" { 97 t.Errorf("links[0].Target = %q, want %q", links[0].Target, "repo-third") 98 } 99 if links[2].Target != "repo-first" { 100 t.Errorf("links[2].Target = %q, want %q", links[2].Target, "repo-first") 101 } 102}