mirror of
https://github.com/wahyd4/golink.git
synced 2026-08-08 21:01:05 +10:00
To delete a link, go to its page in `.detail` and click on the "Delete" button. Stats for the deleted link are removed as well. Co-authored-by: Will Norris <will@tailscale.com> Signed-off-by: Gabriel Wong <gabriel@bifrost.ai> Signed-off-by: Will Norris <will@tailscale.com>
128 lines
2.4 KiB
Go
128 lines
2.4 KiB
Go
// Copyright 2022 Tailscale Inc & Contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package golink
|
|
|
|
import (
|
|
"path"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/google/go-cmp/cmp/cmpopts"
|
|
)
|
|
|
|
// Test saving, loading, and deleting links for SQLiteDB.
|
|
func Test_SQLiteDB_SaveLoadDeleteLinks(t *testing.T) {
|
|
db, err := NewSQLiteDB(path.Join(t.TempDir(), "links.db"))
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
links := []*Link{
|
|
{Short: "short", Long: "long"},
|
|
{Short: "Foo.Bar", Long: "long"},
|
|
}
|
|
|
|
for _, link := range links {
|
|
if err := db.Save(link); err != nil {
|
|
t.Error(err)
|
|
}
|
|
got, err := db.Load(link.Short)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if !cmp.Equal(got, link) {
|
|
t.Errorf("db save and load got %v, want %v", *got, *link)
|
|
}
|
|
}
|
|
|
|
got, err := db.LoadAll()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
sortLinks := cmpopts.SortSlices(func(a, b *Link) bool {
|
|
return a.Short < b.Short
|
|
})
|
|
if !cmp.Equal(got, links, sortLinks) {
|
|
t.Errorf("db.LoadAll got %v, want %v", got, links)
|
|
}
|
|
|
|
for _, link := range links {
|
|
if err := db.Delete(link.Short); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
got, err = db.LoadAll()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
want := []*Link(nil)
|
|
if !cmp.Equal(got, want) {
|
|
t.Errorf("db.LoadAll got %v, want %v", got, want)
|
|
}
|
|
}
|
|
|
|
// Test saving, loading, and deleting stats for SQLiteDB.
|
|
func Test_SQLiteDB_SaveLoadDeleteStats(t *testing.T) {
|
|
db, err := NewSQLiteDB(path.Join(t.TempDir(), "links.db"))
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
// preload some links
|
|
links := []*Link{
|
|
{Short: "a"},
|
|
{Short: "B-c"},
|
|
}
|
|
for _, link := range links {
|
|
if err := db.Save(link); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
// Stats to record and then retrieve.
|
|
// Stats to store do not need to be their canonical short name,
|
|
// but returned stats always should be.
|
|
stats := []ClickStats{
|
|
{"a": 1},
|
|
{"b-c": 1},
|
|
{"a": 1, "bc": 2},
|
|
}
|
|
want := ClickStats{
|
|
"a": 2,
|
|
"B-c": 3,
|
|
}
|
|
|
|
for _, s := range stats {
|
|
if err := db.SaveStats(s); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
got, err := db.LoadStats()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if !cmp.Equal(got, want) {
|
|
t.Errorf("db.LoadStats got %v, want %v", got, want)
|
|
}
|
|
|
|
for k := range want {
|
|
if err := db.DeleteStats(k); err != nil {
|
|
t.Error(err)
|
|
}
|
|
}
|
|
|
|
got, err = db.LoadStats()
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
want = ClickStats{}
|
|
if !cmp.Equal(got, want) {
|
|
t.Errorf("db.LoadStats got %v, want %v", got, want)
|
|
}
|
|
}
|