offline-twitter/pkg/persistence/list_queries_test.go

195 lines
5.1 KiB
Go

package persistence_test
import (
"testing"
"fmt"
"math/rand"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
. "gitlab.com/offline-twitter/twitter_offline_engine/pkg/persistence"
)
func TestSaveAndLoadOfflineList(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Create an offline list
l := List{IsOnline: false, Name: fmt.Sprintf("Test List %d", rand.Int())}
require.Equal(l.ID, ListID(0))
profile.SaveList(&l)
require.NotEqual(l.ID, ListID(0)) // ID should be assigned when it's saved
// Check it comes back the same
new_l, err := profile.GetListById(l.ID)
require.NoError(err)
assert.Equal(l.ID, new_l.ID)
assert.Equal(l.IsOnline, new_l.IsOnline)
assert.Equal(l.Name, new_l.Name)
}
func TestRenameOfflineList(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Create an offline list
l := List{IsOnline: false, Name: fmt.Sprintf("Test List %d", rand.Int())}
profile.SaveList(&l)
require.NotEqual(l.ID, ListID(0))
// Rename it
l.Name = fmt.Sprintf("Untest List %d", rand.Int())
profile.SaveList(&l)
// Rename should be effective
new_l, err := profile.GetListById(l.ID)
require.NoError(err)
assert.Equal(l.ID, new_l.ID)
assert.Equal(l.IsOnline, new_l.IsOnline)
assert.Equal(l.Name, new_l.Name)
}
func TestSaveAndLoadOnlineList(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Create an online list
l := List{IsOnline: true, OnlineID: OnlineListID(rand.Int()), Name: fmt.Sprintf("Test List %d", rand.Int())}
require.Equal(l.ID, ListID(0))
profile.SaveList(&l)
require.NotEqual(l.ID, ListID(0)) // ID should be assigned when it's saved
// Check it comes back the same
new_l, err := profile.GetListById(l.ID)
require.NoError(err)
assert.Equal(l.ID, new_l.ID)
assert.Equal(l.IsOnline, new_l.IsOnline)
assert.Equal(l.OnlineID, new_l.OnlineID) // Check OnlineID for online lists
assert.Equal(l.Name, new_l.Name)
}
func TestRenameOnlineList(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Create an online list
l := List{IsOnline: true, OnlineID: OnlineListID(rand.Int()), Name: fmt.Sprintf("Test List %d", rand.Int())}
profile.SaveList(&l)
require.NotEqual(l.ID, ListID(0))
// Rename it
l.Name = fmt.Sprintf("Untest List %d", rand.Int())
profile.SaveList(&l)
// Rename should be effective
new_l, err := profile.GetListById(l.ID)
require.NoError(err)
assert.Equal(l.ID, new_l.ID)
assert.Equal(l.IsOnline, new_l.IsOnline)
assert.Equal(l.OnlineID, new_l.OnlineID) // Check OnlineID for online lists
assert.Equal(l.Name, new_l.Name)
}
func TestNoOnlineListWithoutID(t *testing.T) {
require := require.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Creating an online list with no OnlineID should fail
l := List{IsOnline: true, OnlineID: OnlineListID(0), Name: fmt.Sprintf("Test List %d", rand.Int())}
defer func() {
// Assert a panic occurred
r, is_ok := recover().(error)
require.True(is_ok)
require.Error(r)
}()
profile.SaveList(&l)
}
func TestAddAndRemoveUserToList(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Create a list
l := List{IsOnline: false, Name: fmt.Sprintf("Test List %d", rand.Int())}
profile.SaveList(&l)
// Check there's no users in it
require.Len(profile.GetListUsers(l.ID), 0)
// Add a user to the list
u := create_dummy_user()
require.NoError(profile.SaveUser(&u))
profile.SaveListUser(l.ID, u.ID)
// Make sure it's in the list
users := profile.GetListUsers(l.ID)
require.Len(users, 1)
assert.Equal(u.Handle, users[0].Handle)
// Addding it again should do nothing
profile.SaveListUser(l.ID, u.ID)
require.Len(profile.GetListUsers(l.ID), 1)
// Remove the user from the list
profile.DeleteListUser(l.ID, u.ID)
// Should be gone
require.Len(profile.GetListUsers(l.ID), 0)
}
func TestGetAllLists(t *testing.T) {
require := require.New(t)
assert := assert.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Create a list
l := List{IsOnline: false, Name: fmt.Sprintf("Test List %d", rand.Int())}
profile.SaveList(&l)
// Get all the lists
lists := profile.GetAllLists()
assert.True(len(lists) > 1) // Should be at least Offline Follows and `l`
assert.Contains(lists, l)
}
func TestDeleteList(t *testing.T) {
require := require.New(t)
profile, err := LoadProfile("../../sample_data/profile")
require.NoError(err)
// Create an offline list
l := List{IsOnline: false, Name: fmt.Sprintf("Test List %d", rand.Int())}
require.Equal(l.ID, ListID(0))
profile.SaveList(&l)
require.NotEqual(l.ID, ListID(0)) // ID should be assigned when it's saved
// Delete it
profile.DeleteList(l.ID)
// Check it's gone
_, err = profile.GetListById(l.ID)
require.Error(err)
}