diff --git a/internal/storage/message_test.go b/internal/storage/message_test.go index 8ef004ab..38449ffd 100644 --- a/internal/storage/message_test.go +++ b/internal/storage/message_test.go @@ -27,7 +27,7 @@ func TestFindByTicker(t *testing.T) { Domain: "demoticker.org", } - storage.DB.Save(&ticker) + _ = storage.DB.Save(&ticker) c := createContext("") pagination := util.NewPagination(&c) @@ -122,7 +122,7 @@ func TestFindByTickerInactive(t *testing.T) { Active: false, } - storage.DB.Save(&ticker) + _ = storage.DB.Save(&ticker) c := createContext("") pagination := util.NewPagination(&c) @@ -146,9 +146,10 @@ func createContext(query string) gin.Context { func setup() { if storage.DB == nil { - storage.DB = storage.OpenDB(fmt.Sprintf("%s/ticker_%d.db", os.TempDir(), time.Now().Unix())) + storage.DB = storage.OpenDB(fmt.Sprintf("%s/ticker_%d.db", os.TempDir(), time.Now().Nanosecond())) } - storage.DB.Drop("Ticker") - storage.DB.Drop("Message") - storage.DB.Drop("User") + _ = storage.DB.Drop("Ticker") + _ = storage.DB.Drop("Message") + _ = storage.DB.Drop("User") + _ = storage.DB.Drop("Setting") } diff --git a/internal/storage/setting_test.go b/internal/storage/setting_test.go new file mode 100644 index 00000000..feb2265f --- /dev/null +++ b/internal/storage/setting_test.go @@ -0,0 +1,77 @@ +package storage_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/systemli/ticker/internal/model" + "github.com/systemli/ticker/internal/storage" +) + +func TestFindSetting(t *testing.T) { + setup() + + _, err := storage.FindSetting("key") + if err == nil { + t.Fail() + return + } + + setting := model.NewSetting("key", "value") + _ = storage.DB.Save(setting) + + found, err := storage.FindSetting("key") + if err != nil { + t.Fail() + return + } + + assert.Equal(t, 1, found.ID) + assert.Equal(t, "value", found.Value) +} + +func TestGetInactiveSettings(t *testing.T) { + setup() + + s := storage.GetInactiveSettings() + + assert.Equal(t, 0, s.ID) + + _ = storage.DB.Save(s) + + s = storage.GetInactiveSettings() + + assert.Equal(t, 1, s.ID) +} + +func TestGetRefreshInterval(t *testing.T) { + setup() + + s := storage.GetRefreshInterval() + + assert.Equal(t, 0, s.ID) + + _ = storage.DB.Save(s) + + s = storage.GetRefreshInterval() + + assert.Equal(t, 1, s.ID) +} + +func TestGetRefreshIntervalValue(t *testing.T) { + setup() + + v := storage.GetRefreshIntervalValue() + + assert.Equal(t, 10000, v) + + var value float64 + value = 20000.00 + s := model.NewSetting(model.SettingRefreshInterval, value) + _ = storage.DB.Save(s) + + v = storage.GetRefreshIntervalValue() + + assert.Equal(t, 20000, v) +} diff --git a/internal/storage/ticker_test.go b/internal/storage/ticker_test.go new file mode 100644 index 00000000..08cd60a8 --- /dev/null +++ b/internal/storage/ticker_test.go @@ -0,0 +1,32 @@ +package storage_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/systemli/ticker/internal/model" + "github.com/systemli/ticker/internal/storage" +) + +func TestFindTicker(t *testing.T) { + setup() + + ticker := model.NewTicker() + ticker.Domain = "localhost" + _ = storage.DB.Save(ticker) + + ticker, err := storage.FindTicker("localhost") + if err != nil { + t.Fail() + return + } + + assert.Equal(t, 1, ticker.ID) + + ticker, err = storage.FindTicker("example.com") + if err == nil { + t.Fail() + return + } +} diff --git a/internal/storage/user.go b/internal/storage/user.go index 84b381d6..01844420 100644 --- a/internal/storage/user.go +++ b/internal/storage/user.go @@ -2,7 +2,9 @@ package storage import ( "errors" + "github.com/asdine/storm/q" + . "github.com/systemli/ticker/internal/model" ) diff --git a/internal/storage/user_test.go b/internal/storage/user_test.go index 62d3394e..3047bc2e 100644 --- a/internal/storage/user_test.go +++ b/internal/storage/user_test.go @@ -12,43 +12,158 @@ import ( func TestFindUserByID(t *testing.T) { setup() - u, err := NewUser("louis@systemli.org", "password") + u := initUserTestData(t) + + user, err := FindUserByID(u.ID) if err != nil { t.Fail() + return } - DB.Save(u) - - user, err := FindUserByID(u.ID) - assert.Equal(t, u.ID, user.ID) assert.Nil(t, err) - user, err = FindUserByID(2) - - assert.Equal(t, 0, user.ID) + _, err = FindUserByID(2) assert.NotNil(t, err) } -func TestUserAuthenticate(t *testing.T) { +func TestFindUsers(t *testing.T) { setup() - u, err := NewUser("louis@systemli.org", "password") + users, err := FindUsers() + if err == nil { + t.Fail() + return + } + + u := initUserTestData(t) + + users, err = FindUsers() + if err != nil { + t.Fail() + return + } + + assert.Equal(t, 1, len(users)) + assert.Equal(t, u.ID, users[0].ID) +} + +func TestFindUsersByTicker(t *testing.T) { + setup() + + ticker := NewTicker() + _ = DB.Save(ticker) + + users, err := FindUsersByTicker(*ticker) if err != nil { t.Fail() } - DB.Save(u) + assert.Equal(t, 0, len(users)) + + u := initUserTestData(t) + u.Tickers = []int{ticker.ID} + _ = DB.Save(u) + + users, err = FindUsersByTicker(*ticker) + if err != nil { + t.Fail() + } + + assert.Equal(t, 1, len(users)) +} + +func TestUserAuthenticate(t *testing.T) { + setup() + + u := initUserTestData(t) user, err := UserAuthenticate("louis@systemli.org", "password") + if err != nil { + t.Fail() + return + } assert.Equal(t, u.ID, user.ID) - assert.Nil(t, err) user, err = UserAuthenticate("louis@systemli.org", "wrong") - assert.Equal(t, u.ID, user.ID) assert.NotNil(t, err) user, err = UserAuthenticate("admin@systemli.org", "password") - assert.Equal(t, 0, user.ID) assert.NotNil(t, err) } + +func TestAddUsersToTicker(t *testing.T) { + setup() + + u := initUserTestData(t) + ticker := NewTicker() + _ = DB.Save(ticker) + + err := AddUsersToTicker(*ticker, []int{u.ID}) + if err != nil { + t.Fail() + } + + var user User + err = DB.One("ID", 1, &user) + if err != nil { + t.Fail() + return + } + + assert.Equal(t, 1, len(user.Tickers)) + + err = AddUsersToTicker(*ticker, []int{2}) + if err == nil { + t.Fail() + } + + admin, err := NewAdminUser("admin@systemli.org", "password") + if err != nil { + t.Fail() + return + } + _ = DB.Save(admin) + + err = AddUsersToTicker(*ticker, []int{admin.ID}) + if err != nil { + t.Fail() + } +} + +func TestRemoveTickerFromUser(t *testing.T) { + setup() + + user := initUserTestData(t) + ticker := NewTicker() + _ = DB.Save(ticker) + user.Tickers = []int{ticker.ID} + _ = DB.Save(user) + + assert.Equal(t, 1, len(user.Tickers)) + + err := RemoveTickerFromUser(*ticker, *user) + if err != nil { + t.Fail() + return + } + + err = DB.One("ID", 1, user) + if err != nil { + t.Fail() + return + } + + assert.Equal(t, 0, len(user.Tickers)) +} + +func initUserTestData(t *testing.T) *User { + u, err := NewUser("louis@systemli.org", "password") + if err != nil { + t.Fail() + } + + _ = DB.Save(u) + + return u +}