helpers

package
v2.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 1, 2026 License: GPL-3.0 Imports: 34 Imported by: 0

Documentation

Overview

Package helpers provides testing utilities for API operations.

This package includes WebSocket test servers and helper functions for testing API endpoints, WebSocket communication, and JSON-RPC methods without requiring a full API server setup.

Example usage:

func TestWebSocketAPI(t *testing.T) {
	// Create message handler
	handler := func(session *melody.Session, msg []byte) {
		session.Write([]byte(`{"response": "ok"}`))
	}

	// Create test WebSocket server
	server := helpers.NewWebSocketTestServer(t, handler)
	defer server.Close()

	// Connect and test
	client := server.NewClient(t)
	defer client.Close()

	err := client.SendMessage([]byte(`{"test": "message"}`))
	require.NoError(t, err)
}

For complete examples, see pkg/testing/examples/api_example_test.go

Package helpers provides testing utilities for database operations.

This package includes mock implementations of database interfaces and helper functions for setting up test databases with sqlmock. It enables testing database operations without requiring a real SQLite database.

Example usage:

func TestDatabaseOperations(t *testing.T) {
	// Create mock database interfaces
	userDB := helpers.NewMockUserDBI()
	mediaDB := helpers.NewMockMediaDBI()

	// Set up expectations
	userDB.On("AddHistory", helpers.HistoryEntryMatcher()).Return(nil)

	// Use in your code
	err := MyFunction(userDB)

	// Verify expectations were met
	require.NoError(t, err)
	userDB.AssertExpectations(t)
}

For complete examples, see pkg/testing/examples/database_example_test.go

Package helpers provides testing utilities for filesystem operations.

This package includes in-memory filesystem implementations and helper functions for testing file operations without requiring real filesystem access. It uses afero for filesystem abstraction.

Example usage:

func TestFileOperations(t *testing.T) {
	// Create in-memory filesystem
	fs := helpers.NewMemoryFS()

	// Create files and directories for testing
	fs.WriteFile("test.txt", []byte("content"))
	fs.MkdirAll("configs")

	// Create test configuration
	cfg, err := helpers.NewTestConfig(fs, "/tmp/config")
	require.NoError(t, err)

	// Use in your tests
	content, err := fs.ReadFile("test.txt")
	require.NoError(t, err)
	assert.Equal(t, "content", string(content))
}

For complete examples, see pkg/testing/examples/filesystem_example_test.go

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AssertJSONRPCError

func AssertJSONRPCError(t *testing.T, response *JSONRPCResponse, expectedCode int)

AssertJSONRPCError verifies a JSON-RPC response contains an error

func AssertJSONRPCSuccess

func AssertJSONRPCSuccess(t *testing.T, response *JSONRPCResponse)

AssertJSONRPCSuccess verifies a JSON-RPC response was successful

func AssertValidActiveMedia added in v2.7.0

func AssertValidActiveMedia(t *testing.T, media *models.ActiveMedia)

AssertValidActiveMedia validates that an ActiveMedia struct has all required fields properly set. This helper catches common bugs like missing timestamps or empty required fields. Use this in tests that receive ActiveMedia from production code to ensure data integrity.

func AssertValidActiveMediaOrNil added in v2.7.0

func AssertValidActiveMediaOrNil(t *testing.T, media *models.ActiveMedia)

AssertValidActiveMediaOrNil validates ActiveMedia if non-nil, otherwise passes. Use this when ActiveMedia can legitimately be nil (e.g., no media playing).

func CreateTestContext

func CreateTestContext(timeout time.Duration) (context.Context, context.CancelFunc)

CreateTestContext creates a context with timeout for testing

func ExpectHistoryInsert

func ExpectHistoryInsert(mockDB sqlmock.Sqlmock, entry *database.HistoryEntry)

ExpectHistoryInsert sets up expectations for history insertion

func ExpectMappingInsert

func ExpectMappingInsert(mockDB sqlmock.Sqlmock, mapping *database.Mapping)

ExpectMappingInsert sets up expectations for mapping insertion

func ExpectMappingQuery

func ExpectMappingQuery(mockDB sqlmock.Sqlmock, id int64, mapping *database.Mapping)

ExpectMappingQuery sets up expectations for mapping query

func ExpectMediaSearch

func ExpectMediaSearch(mockDB sqlmock.Sqlmock, results []database.SearchResult)

ExpectMediaSearch sets up expectations for media search queries

func ExpectTransactionBegin

func ExpectTransactionBegin(mockDB sqlmock.Sqlmock)

ExpectTransactionBegin sets up expectations for transaction begin

func ExpectTransactionCommit

func ExpectTransactionCommit(mockDB sqlmock.Sqlmock)

ExpectTransactionCommit sets up expectations for transaction commit

func ExpectTransactionRollback

func ExpectTransactionRollback(mockDB sqlmock.Sqlmock)

ExpectTransactionRollback sets up expectations for transaction rollback

func GetBasicTestStructure

func GetBasicTestStructure() map[string]any

GetBasicTestStructure returns a basic directory structure for testing

func GetComplexTestStructure

func GetComplexTestStructure() map[string]any

GetComplexTestStructure returns a more complex directory structure for integration testing

func HistoryEntryMatcher

func HistoryEntryMatcher() any

HistoryEntryMatcher returns a testify matcher for database.HistoryEntry. This matcher can be used to verify that AddHistory is called with appropriate data.

Example usage:

userDB.On("AddHistory", helpers.HistoryEntryMatcher()).Return(nil)

func MappingMatcher

func MappingMatcher() any

MappingMatcher returns a testify matcher for database.Mapping.

Example usage:

userDB.On("AddMapping", helpers.MappingMatcher()).Return(nil)

func MediaMatcher

func MediaMatcher() any

MediaMatcher returns a testify matcher for database.Media.

Example usage:

mediaDB.On("InsertMedia", helpers.MediaMatcher()).Return(fixtures.SampleMedia()[0], nil)

func NewInMemoryMediaDB

func NewInMemoryMediaDB(t *testing.T) (db *mediadb.MediaDB, cleanup func())

func NewInMemoryUserDB

func NewInMemoryUserDB(t *testing.T) (db *userdb.UserDB, cleanup func())

func NewMockCommandExecutor added in v2.7.0

func NewMockCommandExecutor() *mocks.MockCommandExecutor

NewMockCommandExecutor creates a MockCommandExecutor that succeeds by default. All Run(), Output(), and Start() calls will return success unless explicitly overridden with On().

This provides sensible defaults for tests where command execution details don't matter. Override specific commands in tests that need to verify exact behavior:

cmd := helpers.NewMockCommandExecutor()
// Clear defaults first
cmd.ExpectedCalls = nil
// Set specific expectations (note: args is []string not variadic in mock)
cmd.On("Run", mock.Anything, "systemctl", []string{"--user", "daemon-reload"}).Return(nil)
cmd.On("Output", mock.Anything, "xprop", mock.Anything).Return([]byte("output"), nil)

func NewSQLMock

func NewSQLMock() (*sql.DB, sqlmock.Sqlmock, error)

NewSQLMock creates a new sqlmock database and mock for raw SQL testing. This is an alias for SetupSQLMock for consistency with other constructor functions.

Example usage:

func TestRawSQL(t *testing.T) {
	db, mock, err := helpers.NewSQLMock()
	require.NoError(t, err)
	defer db.Close()

	mock.ExpectQuery("SELECT (.+) FROM users").
		WillReturnRows(sqlmock.NewRows([]string{"id", "name"}).AddRow(1, "Test"))

	// Test your SQL code
	rows, err := db.Query("SELECT id, name FROM users")
	require.NoError(t, err)
	defer rows.Close()

	assert.NoError(t, mock.ExpectationsWereMet())
}

func NewTestConfig

func NewTestConfig(fs *FSHelper, configDir string) (*config.Instance, error)

NewTestConfig creates a config instance for testing using an in-memory filesystem

func NewTestConfigWithPort

func NewTestConfigWithPort(_ *FSHelper, configDir string, port int) (*config.Instance, error)

NewTestConfigWithPort creates a config instance for testing with a specific API port

func NewTestDatabase added in v2.7.0

func NewTestDatabase(t *testing.T) (db *database.Database, cleanup func())

NewTestDatabase creates both MediaDB and UserDB for comprehensive testing. Returns a Database wrapper and cleanup function that should be deferred.

func SearchResultMatcher

func SearchResultMatcher() any

SearchResultMatcher returns a testify matcher for database.SearchResult.

Example usage:

mediaDB.On("SearchMedia", helpers.TextMatcher()).
	Return([]database.SearchResult{fixtures.SampleSearchResults()[0]}, nil)

func SystemMatcher

func SystemMatcher() any

SystemMatcher returns a testify matcher for database.System.

Example usage:

platform.On("LaunchMedia", helpers.MediaMatcher(), helpers.SystemMatcher()).Return(nil)

func TextMatcher

func TextMatcher() any

TextMatcher returns a testify matcher for string text matching. Useful for matching media names, token text, etc.

Example usage:

mediaDB.On("GetMediaByText", helpers.TextMatcher()).Return(fixtures.SampleMedia()[0], nil)

Types

type FSHelper

type FSHelper struct {
	Fs afero.Fs
}

FSHelper provides utilities for filesystem mocking in tests

func NewMemoryFS

func NewMemoryFS() *FSHelper

NewMemoryFS creates a new in-memory filesystem for testing

func NewOSFS

func NewOSFS() *FSHelper

NewOSFS creates a filesystem helper using the real filesystem (for integration tests)

func SetupMemoryFilesystem

func SetupMemoryFilesystem() *FSHelper

SetupMemoryFilesystem creates a new in-memory filesystem helper with basic directory structure

func (*FSHelper) CleanupDir

func (h *FSHelper) CleanupDir(path string) error

CleanupDir removes all contents from a directory

func (*FSHelper) CreateAuthFile

func (h *FSHelper) CreateAuthFile(path string, authData []byte) error

CreateAuthFile creates an auth file with the provided content

func (*FSHelper) CreateConfigFile

func (h *FSHelper) CreateConfigFile(path string, cfg map[string]any) error

CreateConfigFile creates a config file with the provided configuration map

func (*FSHelper) CreateDirectoryStructure

func (h *FSHelper) CreateDirectoryStructure(structure map[string]any) error

CreateDirectoryStructure creates a complex directory structure for testing

func (*FSHelper) CreateMediaDirectory

func (h *FSHelper) CreateMediaDirectory(basePath string) error

CreateMediaDirectory creates a media directory structure with sample files

func (*FSHelper) FileExists

func (h *FSHelper) FileExists(path string) bool

FileExists checks if a file exists

func (*FSHelper) ListFiles

func (h *FSHelper) ListFiles(path string) ([]string, error)

ListFiles lists all files in a directory

func (*FSHelper) ReadFile

func (h *FSHelper) ReadFile(path string) ([]byte, error)

ReadFile reads a file and returns its content

func (*FSHelper) SetupTestConfigEnvironment

func (h *FSHelper) SetupTestConfigEnvironment(baseDir string) (map[string]any, error)

SetupTestConfigEnvironment creates a complete test configuration environment

func (*FSHelper) WriteFile

func (h *FSHelper) WriteFile(path string, content []byte, _ int) error

WriteFile writes content to a file

type HTTPTestHelper

type HTTPTestHelper struct {
	Server *httptest.Server
	Client *http.Client
}

HTTPTestHelper provides utilities for testing HTTP API endpoints

func NewHTTPTestHelper

func NewHTTPTestHelper(handler http.Handler) *HTTPTestHelper

NewHTTPTestHelper creates a new HTTP test helper with the given handler

func (*HTTPTestHelper) Close

func (h *HTTPTestHelper) Close()

Close shuts down the test server

func (*HTTPTestHelper) PostJSONRPC

func (h *HTTPTestHelper) PostJSONRPC(method string, params any) (*http.Response, error)

PostJSONRPC sends a JSON-RPC request via HTTP POST

type JSONRPCRequest

type JSONRPCRequest struct {
	Params any       `json:"params,omitempty"`
	Method string    `json:"method"`
	ID     uuid.UUID `json:"id"`
}

JSONRPCRequest represents a JSON-RPC request for testing

type JSONRPCResponse

type JSONRPCResponse struct {
	Result any                 `json:"result,omitempty"`
	Error  *models.ErrorObject `json:"error,omitempty"`
	ID     uuid.UUID           `json:"id"`
}

JSONRPCResponse represents a JSON-RPC response for testing

func SendJSONRPCRequest

func SendJSONRPCRequest(conn *websocket.Conn, method string, params any) (*JSONRPCResponse, error)

SendJSONRPCRequest sends a JSON-RPC request and returns the response

type MockESAPIServer added in v2.7.0

type MockESAPIServer struct {
	*http.Server
	// contains filtered or unexported fields
}

MockESAPIServer provides a test double for Batocera's EmulationStation API. It listens on localhost:1234 (the hardcoded ES API port) to intercept API calls during tests.

func NewMockESAPIServer added in v2.7.0

func NewMockESAPIServer(t *testing.T) *MockESAPIServer

NewMockESAPIServer creates a mock EmulationStation API server on localhost:1234. This server intercepts esapi.APIRunningGame() calls during tests.

func (*MockESAPIServer) WithNoRunningGame added in v2.7.0

func (m *MockESAPIServer) WithNoRunningGame() *MockESAPIServer

WithNoRunningGame configures the mock to return "no game running"

func (*MockESAPIServer) WithRunningGame added in v2.7.0

func (m *MockESAPIServer) WithRunningGame(game *esapi.RunningGameResponse) *MockESAPIServer

WithRunningGame configures the mock to return a running game

type MockKodiServer

type MockKodiServer struct {
	*httptest.Server
	// contains filtered or unexported fields
}

MockKodiServer provides a mock Kodi JSON-RPC server for integration testing

func NewMockKodiServer

func NewMockKodiServer(_ *testing.T) *MockKodiServer

NewMockKodiServer creates a new mock Kodi server for testing

func (*MockKodiServer) GetURLForConfig

func (m *MockKodiServer) GetURLForConfig() string

GetURLForConfig returns the mock server's URL formatted for Kodi client configuration

func (*MockKodiServer) URL

func (m *MockKodiServer) URL() string

URL returns the mock server's URL for configuration

func (*MockKodiServer) WithActivePlayers

func (m *MockKodiServer) WithActivePlayers() *MockKodiServer

WithActivePlayers configures the mock server to return active players

type MockMediaDBI

type MockMediaDBI struct {
	mock.Mock

	// Transaction tracking for tests
	TransactionCount     int  // Total number of transactions begun
	ActiveTransaction    bool // Whether a transaction is currently active
	OperationsOutsideTxn int  // Count of operations performed outside transactions
}

MockMediaDBI is a mock implementation of the MediaDBI interface using testify/mock

func NewMockMediaDBI

func NewMockMediaDBI() *MockMediaDBI

NewMockMediaDBI creates a new mock MediaDBI interface for testing.

Example usage:

func TestMediaOperations(t *testing.T) {
	mediaDB := helpers.NewMockMediaDBI()
	mediaDB.On("GetMediaByText", "Game Name").Return(fixtures.SampleMedia()[0], nil)

	// Use mediaDB in your test
	media, err := mediaDB.GetMediaByText("Game Name")
	require.NoError(t, err)
	assert.Equal(t, "Game Name", media.Name)
	mediaDB.AssertExpectations(t)
}

func (*MockMediaDBI) Allocate

func (m *MockMediaDBI) Allocate() error

func (*MockMediaDBI) BackgroundOperationDone added in v2.7.1

func (m *MockMediaDBI) BackgroundOperationDone()

func (*MockMediaDBI) BeginTransaction

func (m *MockMediaDBI) BeginTransaction(batchEnabled bool) error

MediaDBI specific methods - Transaction handling

func (*MockMediaDBI) Close

func (m *MockMediaDBI) Close() error

func (*MockMediaDBI) CommitTransaction

func (m *MockMediaDBI) CommitTransaction() error

func (*MockMediaDBI) EnableBatchInserts added in v2.7.0

func (m *MockMediaDBI) EnableBatchInserts(enable bool)

Batch insert control methods

func (*MockMediaDBI) Exists

func (m *MockMediaDBI) Exists() bool

func (*MockMediaDBI) FindMedia

func (m *MockMediaDBI) FindMedia(row database.Media) (database.Media, error)

Media CRUD methods

func (*MockMediaDBI) FindMediaTag

func (m *MockMediaDBI) FindMediaTag(row database.MediaTag) (database.MediaTag, error)

MediaTag CRUD methods

func (*MockMediaDBI) FindMediaTitle

func (m *MockMediaDBI) FindMediaTitle(row *database.MediaTitle) (database.MediaTitle, error)

MediaTitle CRUD methods

func (*MockMediaDBI) FindOrInsertMedia

func (m *MockMediaDBI) FindOrInsertMedia(row database.Media) (database.Media, error)

func (*MockMediaDBI) FindOrInsertMediaTag

func (m *MockMediaDBI) FindOrInsertMediaTag(row database.MediaTag) (database.MediaTag, error)

func (*MockMediaDBI) FindOrInsertMediaTitle

func (m *MockMediaDBI) FindOrInsertMediaTitle(row *database.MediaTitle) (database.MediaTitle, error)

func (*MockMediaDBI) FindOrInsertSystem

func (m *MockMediaDBI) FindOrInsertSystem(row database.System) (database.System, error)

func (*MockMediaDBI) FindOrInsertTag

func (m *MockMediaDBI) FindOrInsertTag(row database.Tag) (database.Tag, error)

func (*MockMediaDBI) FindOrInsertTagType

func (m *MockMediaDBI) FindOrInsertTagType(row database.TagType) (database.TagType, error)

func (*MockMediaDBI) FindSystem

func (m *MockMediaDBI) FindSystem(row database.System) (database.System, error)

System CRUD methods

func (*MockMediaDBI) FindSystemBySystemID added in v2.7.0

func (m *MockMediaDBI) FindSystemBySystemID(systemID string) (database.System, error)

func (*MockMediaDBI) FindTag

func (m *MockMediaDBI) FindTag(row database.Tag) (database.Tag, error)

Tag CRUD methods

func (*MockMediaDBI) FindTagType

func (m *MockMediaDBI) FindTagType(row database.TagType) (database.TagType, error)

TagType CRUD methods

func (*MockMediaDBI) GetAllMedia added in v2.7.0

func (m *MockMediaDBI) GetAllMedia() ([]database.Media, error)

func (*MockMediaDBI) GetAllMediaTitles added in v2.7.0

func (m *MockMediaDBI) GetAllMediaTitles() ([]database.MediaTitle, error)

func (*MockMediaDBI) GetAllSystems added in v2.7.0

func (m *MockMediaDBI) GetAllSystems() ([]database.System, error)

GetAll* methods for populating scan state maps

func (*MockMediaDBI) GetAllTagTypes added in v2.7.0

func (m *MockMediaDBI) GetAllTagTypes() ([]database.TagType, error)

func (*MockMediaDBI) GetAllTags added in v2.7.0

func (m *MockMediaDBI) GetAllTags() ([]database.Tag, error)

func (*MockMediaDBI) GetAllUsedTags added in v2.7.0

func (m *MockMediaDBI) GetAllUsedTags(ctx context.Context) ([]database.TagInfo, error)

func (*MockMediaDBI) GetCachedSlugResolution added in v2.7.0

func (m *MockMediaDBI) GetCachedSlugResolution(
	ctx context.Context, systemID, slug string, tagFilters []database.TagFilter,
) (mediaDBID int64, strategy string, found bool)

Slug resolution cache methods

func (*MockMediaDBI) GetDBPath

func (m *MockMediaDBI) GetDBPath() string

func (*MockMediaDBI) GetIndexingStatus added in v2.7.0

func (m *MockMediaDBI) GetIndexingStatus() (string, error)

func (*MockMediaDBI) GetIndexingSystems added in v2.7.0

func (m *MockMediaDBI) GetIndexingSystems() ([]string, error)

func (*MockMediaDBI) GetLastGenerated

func (m *MockMediaDBI) GetLastGenerated() (time.Time, error)

func (*MockMediaDBI) GetLastIndexedSystem added in v2.7.0

func (m *MockMediaDBI) GetLastIndexedSystem() (string, error)

func (*MockMediaDBI) GetLaunchCommandForMedia added in v2.7.0

func (m *MockMediaDBI) GetLaunchCommandForMedia(ctx context.Context, systemID, path string) (string, error)

func (*MockMediaDBI) GetMaxMediaID added in v2.7.0

func (m *MockMediaDBI) GetMaxMediaID() (int64, error)

func (*MockMediaDBI) GetMaxMediaTagID added in v2.7.0

func (m *MockMediaDBI) GetMaxMediaTagID() (int64, error)

func (*MockMediaDBI) GetMaxSystemID added in v2.7.0

func (m *MockMediaDBI) GetMaxSystemID() (int64, error)

GetMax*ID methods for resume functionality

func (*MockMediaDBI) GetMaxTagID added in v2.7.0

func (m *MockMediaDBI) GetMaxTagID() (int64, error)

func (*MockMediaDBI) GetMaxTagTypeID added in v2.7.0

func (m *MockMediaDBI) GetMaxTagTypeID() (int64, error)

func (*MockMediaDBI) GetMaxTitleID added in v2.7.0

func (m *MockMediaDBI) GetMaxTitleID() (int64, error)

func (*MockMediaDBI) GetMediaByDBID added in v2.7.0

func (m *MockMediaDBI) GetMediaByDBID(ctx context.Context, mediaDBID int64) (database.SearchResultWithCursor, error)

func (*MockMediaDBI) GetMediaByText

func (m *MockMediaDBI) GetMediaByText(query string) (database.Media, error)

GetMediaByText is a convenience method for testing - wraps SearchMediaPathExact

func (*MockMediaDBI) GetMediaWithFullPath added in v2.7.0

func (m *MockMediaDBI) GetMediaWithFullPath() ([]database.MediaWithFullPath, error)

GetMediaWithFullPath mock method for optimized JOIN query

func (*MockMediaDBI) GetMediaWithFullPathExcluding added in v2.7.0

func (m *MockMediaDBI) GetMediaWithFullPathExcluding(excludeSystemIDs []string) ([]database.MediaWithFullPath, error)

GetMediaWithFullPathExcluding mock method for optimized selective indexing

func (*MockMediaDBI) GetOptimizationStatus added in v2.7.0

func (m *MockMediaDBI) GetOptimizationStatus() (string, error)

func (*MockMediaDBI) GetOptimizationStep added in v2.7.0

func (m *MockMediaDBI) GetOptimizationStep() (string, error)

func (*MockMediaDBI) GetSystemTagsCached added in v2.7.0

func (m *MockMediaDBI) GetSystemTagsCached(
	ctx context.Context,
	systems []systemdefs.System,
) ([]database.TagInfo, error)

func (*MockMediaDBI) GetSystemsExcluding added in v2.7.0

func (m *MockMediaDBI) GetSystemsExcluding(excludeSystemIDs []string) ([]database.System, error)

GetSystemsExcluding mock method for optimized selective indexing

func (*MockMediaDBI) GetTags added in v2.7.0

func (m *MockMediaDBI) GetTags(
	ctx context.Context,
	systems []systemdefs.System,
) ([]database.TagInfo, error)

func (*MockMediaDBI) GetTitlesWithPreFilter added in v2.7.0

func (m *MockMediaDBI) GetTitlesWithPreFilter(
	ctx context.Context, systemID string, minLength, maxLength, minWordCount, maxWordCount int,
) ([]database.MediaTitle, error)

func (*MockMediaDBI) GetTitlesWithSystems added in v2.7.0

func (m *MockMediaDBI) GetTitlesWithSystems() ([]database.TitleWithSystem, error)

GetTitlesWithSystems mock method for optimized JOIN query

func (*MockMediaDBI) GetTitlesWithSystemsExcluding added in v2.7.0

func (m *MockMediaDBI) GetTitlesWithSystemsExcluding(excludeSystemIDs []string) ([]database.TitleWithSystem, error)

GetTitlesWithSystemsExcluding mock method for optimized selective indexing

func (*MockMediaDBI) GetTotalMediaCount added in v2.7.0

func (m *MockMediaDBI) GetTotalMediaCount() (int, error)

func (*MockMediaDBI) IndexedSystems

func (m *MockMediaDBI) IndexedSystems() ([]string, error)

func (*MockMediaDBI) InsertMedia

func (m *MockMediaDBI) InsertMedia(row database.Media) (database.Media, error)

func (*MockMediaDBI) InsertMediaTag

func (m *MockMediaDBI) InsertMediaTag(row database.MediaTag) (database.MediaTag, error)

func (*MockMediaDBI) InsertMediaTitle

func (m *MockMediaDBI) InsertMediaTitle(row *database.MediaTitle) (database.MediaTitle, error)

func (*MockMediaDBI) InsertSystem

func (m *MockMediaDBI) InsertSystem(row database.System) (database.System, error)

func (*MockMediaDBI) InsertTag

func (m *MockMediaDBI) InsertTag(row database.Tag) (database.Tag, error)

func (*MockMediaDBI) InsertTagType

func (m *MockMediaDBI) InsertTagType(row database.TagType) (database.TagType, error)

func (*MockMediaDBI) InvalidateCountCache added in v2.7.0

func (m *MockMediaDBI) InvalidateCountCache() error

func (*MockMediaDBI) InvalidateSlugCache added in v2.7.0

func (m *MockMediaDBI) InvalidateSlugCache(ctx context.Context) error

func (*MockMediaDBI) InvalidateSlugCacheForSystems added in v2.7.0

func (m *MockMediaDBI) InvalidateSlugCacheForSystems(ctx context.Context, systemIDs []string) error

func (*MockMediaDBI) InvalidateSystemTagsCache added in v2.7.0

func (m *MockMediaDBI) InvalidateSystemTagsCache(
	ctx context.Context,
	systems []systemdefs.System,
) error

func (*MockMediaDBI) MigrateUp

func (m *MockMediaDBI) MigrateUp() error

func (*MockMediaDBI) Open

func (m *MockMediaDBI) Open() error

GenericDBI methods

func (*MockMediaDBI) PopulateSystemTagsCache added in v2.7.0

func (m *MockMediaDBI) PopulateSystemTagsCache(ctx context.Context) error

func (*MockMediaDBI) RandomGame

func (m *MockMediaDBI) RandomGame(systems []systemdefs.System) (database.SearchResult, error)

func (*MockMediaDBI) RandomGameWithQuery added in v2.7.0

func (m *MockMediaDBI) RandomGameWithQuery(query *database.MediaQuery) (database.SearchResult, error)

func (*MockMediaDBI) RollbackTransaction

func (m *MockMediaDBI) RollbackTransaction() error

func (*MockMediaDBI) RunBackgroundOptimization added in v2.7.0

func (m *MockMediaDBI) RunBackgroundOptimization(statusCallback func(optimizing bool))

func (*MockMediaDBI) SearchMediaBySecondarySlug added in v2.7.0

func (m *MockMediaDBI) SearchMediaBySecondarySlug(
	ctx context.Context, systemID string, secondarySlug string, tags []database.TagFilter,
) ([]database.SearchResultWithCursor, error)

func (*MockMediaDBI) SearchMediaBySlug added in v2.7.0

func (m *MockMediaDBI) SearchMediaBySlug(
	ctx context.Context, systemID string, slug string, tags []database.TagFilter,
) ([]database.SearchResultWithCursor, error)

func (*MockMediaDBI) SearchMediaBySlugIn added in v2.7.0

func (m *MockMediaDBI) SearchMediaBySlugIn(
	ctx context.Context, systemID string, slugs []string, tags []database.TagFilter,
) ([]database.SearchResultWithCursor, error)

func (*MockMediaDBI) SearchMediaBySlugPrefix added in v2.7.0

func (m *MockMediaDBI) SearchMediaBySlugPrefix(
	ctx context.Context, systemID string, slugPrefix string, tags []database.TagFilter,
) ([]database.SearchResultWithCursor, error)

func (*MockMediaDBI) SearchMediaPathExact

func (m *MockMediaDBI) SearchMediaPathExact(
	systems []systemdefs.System, query string,
) ([]database.SearchResult, error)

Search methods

func (*MockMediaDBI) SearchMediaPathGlob

func (m *MockMediaDBI) SearchMediaPathGlob(systems []systemdefs.System, query string) ([]database.SearchResult, error)

func (*MockMediaDBI) SearchMediaWithFilters added in v2.7.0

func (m *MockMediaDBI) SearchMediaWithFilters(
	ctx context.Context,
	filters *database.SearchFilters,
) ([]database.SearchResultWithCursor, error)

func (*MockMediaDBI) SetBatchSize added in v2.7.0

func (m *MockMediaDBI) SetBatchSize(size int)

func (*MockMediaDBI) SetCachedSlugResolution added in v2.7.0

func (m *MockMediaDBI) SetCachedSlugResolution(
	ctx context.Context, systemID, slug string, tagFilters []database.TagFilter, mediaDBID int64, strategy string,
) error

func (*MockMediaDBI) SetIndexingStatus added in v2.7.0

func (m *MockMediaDBI) SetIndexingStatus(status string) error

func (*MockMediaDBI) SetIndexingSystems added in v2.7.0

func (m *MockMediaDBI) SetIndexingSystems(systemIDs []string) error

func (*MockMediaDBI) SetLastIndexedSystem added in v2.7.0

func (m *MockMediaDBI) SetLastIndexedSystem(systemID string) error

func (*MockMediaDBI) SetOptimizationStatus added in v2.7.0

func (m *MockMediaDBI) SetOptimizationStatus(status string) error

func (*MockMediaDBI) SetOptimizationStep added in v2.7.0

func (m *MockMediaDBI) SetOptimizationStep(step string) error

func (*MockMediaDBI) SystemIndexed

func (m *MockMediaDBI) SystemIndexed(system *systemdefs.System) bool

func (*MockMediaDBI) TrackBackgroundOperation added in v2.7.1

func (m *MockMediaDBI) TrackBackgroundOperation()

func (*MockMediaDBI) Truncate

func (m *MockMediaDBI) Truncate() error

func (*MockMediaDBI) TruncateSystems added in v2.7.0

func (m *MockMediaDBI) TruncateSystems(systemIDs []string) error

func (*MockMediaDBI) UnsafeGetSQLDb

func (m *MockMediaDBI) UnsafeGetSQLDb() *sql.DB

func (*MockMediaDBI) UpdateLastGenerated

func (m *MockMediaDBI) UpdateLastGenerated() error

func (*MockMediaDBI) Vacuum

func (m *MockMediaDBI) Vacuum() error

func (*MockMediaDBI) WaitForBackgroundOperations added in v2.7.0

func (m *MockMediaDBI) WaitForBackgroundOperations()

type MockUserDBI

type MockUserDBI struct {
	mock.Mock
}

MockUserDBI is a mock implementation of the UserDBI interface using testify/mock

func NewMockUserDBI

func NewMockUserDBI() *MockUserDBI

NewMockUserDBI creates a new mock UserDBI interface for testing.

Example usage:

func TestUserOperations(t *testing.T) {
	userDB := helpers.NewMockUserDBI()
	userDB.On("AddHistory", mock.MatchedBy(func(he database.HistoryEntry) bool {
		return he.TokenID != ""
	})).Return(nil)

	// Use userDB in your test
	err := MyFunction(userDB)
	require.NoError(t, err)
	userDB.AssertExpectations(t)
}

func (*MockUserDBI) AddHistory

func (m *MockUserDBI) AddHistory(entry *database.HistoryEntry) error

UserDBI specific methods

func (*MockUserDBI) AddInboxMessage added in v2.8.0

func (m *MockUserDBI) AddInboxMessage(msg *database.InboxMessage) (*database.InboxMessage, error)

func (*MockUserDBI) AddMapping

func (m *MockUserDBI) AddMapping(mapping *database.Mapping) error

func (*MockUserDBI) AddMediaHistory added in v2.7.0

func (m *MockUserDBI) AddMediaHistory(entry *database.MediaHistoryEntry) (int64, error)

func (*MockUserDBI) Allocate

func (m *MockUserDBI) Allocate() error

func (*MockUserDBI) CleanupHistory added in v2.7.0

func (m *MockUserDBI) CleanupHistory(retentionDays int) (int64, error)

func (*MockUserDBI) CleanupMediaHistory added in v2.7.0

func (m *MockUserDBI) CleanupMediaHistory(retentionDays int) (int64, error)

func (*MockUserDBI) Close

func (m *MockUserDBI) Close() error

func (*MockUserDBI) CloseHangingMediaHistory added in v2.7.0

func (m *MockUserDBI) CloseHangingMediaHistory() error

func (*MockUserDBI) CloseMediaHistory added in v2.7.0

func (m *MockUserDBI) CloseMediaHistory(dbid int64, endTime time.Time, playTime int) error

func (*MockUserDBI) DeleteAllInboxMessages added in v2.8.0

func (m *MockUserDBI) DeleteAllInboxMessages() (int64, error)

func (*MockUserDBI) DeleteInboxMessage added in v2.8.0

func (m *MockUserDBI) DeleteInboxMessage(id int64) error

func (*MockUserDBI) DeleteMapping

func (m *MockUserDBI) DeleteMapping(id int64) error

func (*MockUserDBI) GetAllMappings

func (m *MockUserDBI) GetAllMappings() ([]database.Mapping, error)

func (*MockUserDBI) GetDBPath

func (m *MockUserDBI) GetDBPath() string

func (*MockUserDBI) GetEnabledMappings

func (m *MockUserDBI) GetEnabledMappings() ([]database.Mapping, error)

func (*MockUserDBI) GetHistory

func (m *MockUserDBI) GetHistory(lastID int) ([]database.HistoryEntry, error)

func (*MockUserDBI) GetInboxMessages added in v2.8.0

func (m *MockUserDBI) GetInboxMessages() ([]database.InboxMessage, error)

func (*MockUserDBI) GetMapping

func (m *MockUserDBI) GetMapping(id int64) (database.Mapping, error)

func (*MockUserDBI) GetMediaHistory added in v2.7.0

func (m *MockUserDBI) GetMediaHistory(lastID, limit int) ([]database.MediaHistoryEntry, error)

func (*MockUserDBI) GetSupportedZapLinkHosts added in v2.8.0

func (m *MockUserDBI) GetSupportedZapLinkHosts() ([]string, error)

func (*MockUserDBI) GetZapLinkCache

func (m *MockUserDBI) GetZapLinkCache(url string) (string, error)

func (*MockUserDBI) GetZapLinkHost

func (m *MockUserDBI) GetZapLinkHost(host string) (found, zapScript bool, err error)

func (*MockUserDBI) HealTimestamps added in v2.7.0

func (m *MockUserDBI) HealTimestamps(bootUUID string, trueBootTime time.Time) (int64, error)

func (*MockUserDBI) MigrateUp

func (m *MockUserDBI) MigrateUp() error

func (*MockUserDBI) Open

func (m *MockUserDBI) Open() error

GenericDBI methods

func (*MockUserDBI) PruneExpiredZapLinkHosts added in v2.8.0

func (m *MockUserDBI) PruneExpiredZapLinkHosts(olderThan time.Duration) (int64, error)

func (*MockUserDBI) Truncate

func (m *MockUserDBI) Truncate() error

func (*MockUserDBI) UnsafeGetSQLDb

func (m *MockUserDBI) UnsafeGetSQLDb() *sql.DB

func (*MockUserDBI) UpdateMapping

func (m *MockUserDBI) UpdateMapping(id int64, mapping *database.Mapping) error

func (*MockUserDBI) UpdateMediaHistoryTime added in v2.7.0

func (m *MockUserDBI) UpdateMediaHistoryTime(dbid int64, playTime int) error

func (*MockUserDBI) UpdateZapLinkCache

func (m *MockUserDBI) UpdateZapLinkCache(url, zapscript string) error

func (*MockUserDBI) UpdateZapLinkHost

func (m *MockUserDBI) UpdateZapLinkHost(host string, zapscript int) error

func (*MockUserDBI) Vacuum

func (m *MockUserDBI) Vacuum() error

type MockWebSocketConnection

type MockWebSocketConnection struct {
	CloseError       error
	WriteError       error
	ReadError        error
	SentMessages     [][]byte
	ReceivedMessages [][]byte

	Closed bool
	// contains filtered or unexported fields
}

MockWebSocketConnection provides a mock implementation for testing

func NewMockWebSocketConnection

func NewMockWebSocketConnection() *MockWebSocketConnection

NewMockWebSocketConnection creates a new mock WebSocket connection

func (*MockWebSocketConnection) ClearSentMessages

func (m *MockWebSocketConnection) ClearSentMessages()

ClearSentMessages clears all sent messages

func (*MockWebSocketConnection) Close

func (m *MockWebSocketConnection) Close() error

Close simulates closing the connection

func (*MockWebSocketConnection) GetSentMessages

func (m *MockWebSocketConnection) GetSentMessages() [][]byte

GetSentMessages returns all sent messages (thread-safe copy)

func (*MockWebSocketConnection) QueueMessage

func (m *MockWebSocketConnection) QueueMessage(data []byte)

QueueMessage adds a message to the read queue

func (*MockWebSocketConnection) ReadMessage

func (m *MockWebSocketConnection) ReadMessage() (messageType int, data []byte, err error)

ReadMessage simulates reading a message

func (*MockWebSocketConnection) SetCloseError

func (m *MockWebSocketConnection) SetCloseError(err error)

SetCloseError sets an error to be returned on close operations

func (*MockWebSocketConnection) SetReadError

func (m *MockWebSocketConnection) SetReadError(err error)

SetReadError sets an error to be returned on read operations

func (*MockWebSocketConnection) SetWriteError

func (m *MockWebSocketConnection) SetWriteError(err error)

SetWriteError sets an error to be returned on write operations

func (*MockWebSocketConnection) WriteMessage

func (m *MockWebSocketConnection) WriteMessage(_ int, data []byte) error

WriteMessage simulates writing a message

type WebSocketMessage

type WebSocketMessage struct {
	Timestamp time.Time `json:"timestamp"`
	Error     error     `json:"error,omitempty"`
	Type      string    `json:"type"`
	SessionID string    `json:"sessionId,omitempty"`
	Data      []byte    `json:"data"`
}

WebSocketMessage captures a message sent or received during testing

type WebSocketTestServer

type WebSocketTestServer struct {
	Server *httptest.Server
	Melody *melody.Melody

	Messages []WebSocketMessage
	// contains filtered or unexported fields
}

WebSocketTestServer provides utilities for testing WebSocket connections

func NewWebSocketTestServer

func NewWebSocketTestServer(t *testing.T, handler func(*melody.Session, []byte)) *WebSocketTestServer

NewWebSocketTestServer creates a new WebSocket test server

func (*WebSocketTestServer) ClearMessages

func (wsts *WebSocketTestServer) ClearMessages()

ClearMessages clears all recorded messages (thread-safe)

func (*WebSocketTestServer) Close

func (wsts *WebSocketTestServer) Close()

Close shuts down the test server

func (*WebSocketTestServer) CreateWebSocketClient

func (wsts *WebSocketTestServer) CreateWebSocketClient() (*websocket.Conn, error)

CreateWebSocketClient creates a WebSocket client connected to the test server

func (*WebSocketTestServer) GetMessages

func (wsts *WebSocketTestServer) GetMessages() []WebSocketMessage

GetMessages returns all recorded messages (thread-safe)

func (*WebSocketTestServer) WaitForMessages

func (wsts *WebSocketTestServer) WaitForMessages(count int, timeout time.Duration) error

WaitForMessages waits for a specific number of messages with timeout

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL