status-go/centralizedmetrics/sqlite_persistence_test.go

207 lines
4.5 KiB
Go

package centralizedmetrics
import (
"database/sql"
"testing"
"github.com/stretchr/testify/require"
"github.com/status-im/status-go/appdatabase"
"github.com/status-im/status-go/centralizedmetrics/common"
"github.com/status-im/status-go/t/helpers"
)
func openTestDB() (*sql.DB, error) {
db, err := helpers.SetupTestMemorySQLAccountsDB(appdatabase.DbInitializer{})
if err != nil {
return nil, err
}
return db, nil
}
func setupTestDB(t *testing.T) *sql.DB {
db, err := openTestDB()
require.NoError(t, err)
return db
}
func TestNewSQLiteMetricRepository(t *testing.T) {
db := setupTestDB(t)
defer db.Close()
repo := NewSQLiteMetricRepository(db)
require.NotNil(t, repo)
require.Equal(t, db, repo.db)
}
func TestSQLiteMetricRepository_Add(t *testing.T) {
db := setupTestDB(t)
defer db.Close()
repo := NewSQLiteMetricRepository(db)
metric := common.Metric{
ID: "id",
UserID: "user123",
EventName: "purchase",
EventValue: map[string]interface{}{
"amount": 99.99,
},
}
err := repo.Add(metric)
require.NoError(t, err)
var count int
err = db.QueryRow("SELECT COUNT(*) FROM centralizedmetrics_metrics WHERE id = ?", metric.ID).Scan(&count)
require.NoError(t, err)
require.Equal(t, 1, count)
}
func TestSQLiteMetricRepository_Poll(t *testing.T) {
db := setupTestDB(t)
defer db.Close()
repo := NewSQLiteMetricRepository(db)
// Insert test data
metric := common.Metric{
ID: "id",
UserID: "user123",
EventName: "purchase",
EventValue: map[string]interface{}{
"amount": 99.99,
},
}
err := repo.Add(metric)
require.NoError(t, err)
metrics, err := repo.Poll()
require.NoError(t, err)
require.Len(t, metrics, 1)
require.Equal(t, metric.ID, metrics[0].ID)
require.Equal(t, metric.EventName, metrics[0].EventName)
require.Equal(t, metric.EventValue, metrics[0].EventValue)
require.NotEmpty(t, metrics[0].UserID)
require.NotEmpty(t, metrics[0].Timestamp)
}
func TestSQLiteMetricRepository_Delete(t *testing.T) {
db := setupTestDB(t)
defer db.Close()
repo := NewSQLiteMetricRepository(db)
// Insert test data
metric := common.Metric{
ID: "id",
EventName: "purchase",
EventValue: map[string]interface{}{
"amount": 99.99,
},
}
err := repo.Add(metric)
require.NoError(t, err)
metrics := []common.Metric{metric}
err = repo.Delete(metrics)
require.NoError(t, err)
var count int
err = db.QueryRow("SELECT COUNT(*) FROM centralizedmetrics_metrics WHERE id = ?", metric.ID).Scan(&count)
require.NoError(t, err)
require.Equal(t, 0, count)
}
func TestSQLiteMetricRepository_UserID(t *testing.T) {
db := setupTestDB(t)
defer db.Close()
repo := NewSQLiteMetricRepository(db)
// Test when there is no UUID in the table
userID, err := repo.UserID(nil)
require.NoError(t, err)
require.NotEmpty(t, userID)
var count int
err = db.QueryRow("SELECT COUNT(*) FROM centralizedmetrics_uuid WHERE uuid = ?", userID).Scan(&count)
require.NoError(t, err)
require.Equal(t, 1, count)
// Test when a UUID already exists
existingUUID := userID
userID, err = repo.UserID(nil)
require.NoError(t, err)
require.Equal(t, existingUUID, userID)
}
func TestSQLiteMetricRepository_Enabled(t *testing.T) {
db := setupTestDB(t)
defer db.Close()
repo := NewSQLiteMetricRepository(db)
info, err := repo.Info()
require.NoError(t, err)
require.False(t, info.Enabled)
err = repo.ToggleEnabled(true)
require.NoError(t, err)
info, err = repo.Info()
require.NoError(t, err)
require.True(t, info.Enabled)
err = repo.ToggleEnabled(false)
require.NoError(t, err)
info, err = repo.Info()
require.NoError(t, err)
require.False(t, info.Enabled)
}
func TestSQLiteMetricRepository_EnabledDelete(t *testing.T) {
db := setupTestDB(t)
defer db.Close()
repo := NewSQLiteMetricRepository(db)
info, err := repo.Info()
require.NoError(t, err)
require.False(t, info.Enabled)
metric := common.Metric{
ID: "id",
UserID: "user123",
EventName: "purchase",
EventValue: map[string]interface{}{
"amount": 99.99,
},
}
err = repo.Add(metric)
require.NoError(t, err)
var count int
err = db.QueryRow("SELECT COUNT(*) FROM centralizedmetrics_metrics WHERE id = ?", metric.ID).Scan(&count)
require.NoError(t, err)
require.Equal(t, 1, count)
err = repo.ToggleEnabled(false)
require.NoError(t, err)
err = db.QueryRow("SELECT COUNT(*) FROM centralizedmetrics_metrics WHERE id = ?", metric.ID).Scan(&count)
require.NoError(t, err)
require.Equal(t, 0, count)
info, err = repo.Info()
require.NoError(t, err)
require.False(t, info.Enabled)
require.True(t, info.UserConfirmed)
}