144 lines
3.5 KiB
Go
144 lines
3.5 KiB
Go
package mytinytodo
|
|
|
|
import (
|
|
"local/mytinytodo2/mytinytodo/remote"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNewBuffer(t *testing.T) {
|
|
b, s := mockBuffer(t)
|
|
defer b.Close()
|
|
defer s.Close()
|
|
}
|
|
|
|
func TestBufferEnqueue(t *testing.T) {
|
|
b, s := mockBuffer(t)
|
|
defer b.Close()
|
|
defer s.Close()
|
|
|
|
if err := b.Enqueue(remote.NEW, remote.List{ID: "list"}, remote.Task{Title: "task"}, "one", "tag", "two"); err != nil {
|
|
t.Errorf("cannot enqueue: %v", err)
|
|
}
|
|
|
|
todo1 := NewStringArray()
|
|
if err := b.db.Get(nsQueue, keyQueue, todo1); err != nil || len(todo1.StringArray()) != 1 {
|
|
t.Fatalf("enqueue didnt create list: %v (%d)", err, len(todo1.StringArray()))
|
|
}
|
|
}
|
|
|
|
func TestBufferDequeue(t *testing.T) {
|
|
b, s := mockBuffer(t)
|
|
defer b.Close()
|
|
defer s.Close()
|
|
|
|
if err := b.Enqueue(remote.NEW, remote.List{ID: "list"}, remote.Task{Title: "task"}, "one", "tag", "two"); err != nil {
|
|
t.Fatalf("cannot enqueue to dequeue: %v", err)
|
|
}
|
|
|
|
todo1 := NewStringArray()
|
|
if err := b.db.Get(nsQueue, keyQueue, todo1); err != nil || len(todo1.StringArray()) != 1 {
|
|
t.Fatalf("enqueue didnt create list: %v (%d)", err, len(todo1.StringArray()))
|
|
}
|
|
|
|
b.Dequeue()
|
|
|
|
todo2 := NewStringArray()
|
|
if err := b.db.Get(nsQueue, keyQueue, todo2); err != nil || len(todo2.StringArray()) != 0 {
|
|
t.Fatalf("dequeue didnt remove from list: %v (%d)", err, len(todo2.StringArray()))
|
|
}
|
|
|
|
}
|
|
|
|
func TestBufferRefreshLocal(t *testing.T) {
|
|
b, s := mockBuffer(t)
|
|
defer b.Close()
|
|
defer s.Close()
|
|
|
|
b.RefreshLocal()
|
|
|
|
var lists remote.Lists
|
|
if err := b.db.Get(nsLists, keyLists, &lists); err != nil || lists.Length() != 1 {
|
|
t.Fatalf("refreshLocal didnt create list: %v (%d)", err, lists.Length())
|
|
}
|
|
|
|
var tasks remote.Tasks
|
|
if err := b.db.Get(nsTasks, lists.ListArray()[0].ID, &tasks); err != nil || tasks.Length() != 1 {
|
|
t.Fatalf("failed to parse task on refresh: %v (%d)", err, tasks.Length())
|
|
}
|
|
}
|
|
|
|
func TestBufferNotDoneCallback(t *testing.T) {
|
|
b := &Buffer{
|
|
done: make(chan struct{}),
|
|
interval: time.Millisecond * 70,
|
|
}
|
|
called := make(chan struct{})
|
|
go b.notDoneCallback(func() {
|
|
called <- struct{}{}
|
|
})
|
|
<-called
|
|
close(b.done)
|
|
}
|
|
|
|
func TestBufferLists(t *testing.T) {
|
|
b, s := mockBuffer(t)
|
|
defer b.Close()
|
|
defer s.Close()
|
|
|
|
b.RefreshLocal()
|
|
|
|
if lists, err := b.Lists(); err != nil || lists.Length() != 1 {
|
|
t.Fatalf("err: buffer cannot lists(): %v (%d)", err, lists.Length())
|
|
}
|
|
}
|
|
|
|
func TestBufferTasks(t *testing.T) {
|
|
b, s := mockBuffer(t)
|
|
defer b.Close()
|
|
defer s.Close()
|
|
|
|
b.RefreshLocal()
|
|
|
|
if lists, err := b.Lists(); err != nil || lists.Length() != 1 {
|
|
t.Fatalf("err: buffer cannot lists(): %v (%d)", err, lists.Length())
|
|
} else if tasks, err := b.Tasks(lists.ListArray()[0]); err != nil || tasks.Length() != 1 {
|
|
t.Fatalf("err: buffer cannot tasks(): %v (%d)", err, tasks.Length())
|
|
}
|
|
}
|
|
|
|
func mockBuffer(t *testing.T) (*Buffer, *httptest.Server) {
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write([]byte(`
|
|
{
|
|
"list":[
|
|
{
|
|
"id":"id",
|
|
"name":"name",
|
|
"title":"title",
|
|
"compl":0
|
|
}
|
|
]
|
|
}
|
|
`))
|
|
}))
|
|
osArgsWas := os.Args[:]
|
|
os.Args = []string{"skip", "-remote", srv.URL, "-p", ""}
|
|
defer func() {
|
|
os.Args = osArgsWas[:]
|
|
}()
|
|
config, err := NewConfig()
|
|
if err != nil {
|
|
t.Fatalf("cannot get new config: %v", err)
|
|
}
|
|
buff, err := NewBuffer(config)
|
|
if err != nil {
|
|
t.Fatalf("cannot get new buffer: %v", err)
|
|
}
|
|
return buff, srv
|
|
}
|