Documentation
¶
Overview ¶
Package mocks provides mock implementations for DynamORM interfaces.
This package solves the common issue of having to implement all 26+ methods of the core.Query interface when writing unit tests. Instead of discovering missing methods through trial and error, you can use these pre-built mocks.
Installation ¶
Import the mocks package in your test files:
import "github.com/pay-theory/dynamorm/pkg/mocks"
Basic Usage ¶
The most common use case is mocking database queries:
func TestUserService(t *testing.T) {
// Create mocks
mockDB := new(mocks.MockDB)
mockQuery := new(mocks.MockQuery)
// Setup expectations
mockDB.On("Model", &User{}).Return(mockQuery)
mockQuery.On("Where", "ID", "=", "123").Return(mockQuery)
mockQuery.On("First", mock.Anything).Return(nil)
// Use in your service
service := NewUserService(mockDB)
user, err := service.GetUser("123")
// Assert expectations were met
mockDB.AssertExpectations(t)
mockQuery.AssertExpectations(t)
}
Chaining Methods ¶
Query methods typically return themselves to allow chaining:
mockQuery.On("Where", "Status", "=", "active").Return(mockQuery)
mockQuery.On("OrderBy", "CreatedAt", "DESC").Return(mockQuery)
mockQuery.On("Limit", 10).Return(mockQuery)
mockQuery.On("All", mock.Anything).Return(nil)
Working with Results ¶
To return data from queries, use mock.Run to populate the destination:
users := []User{{ID: "1", Name: "Alice"}, {ID: "2", Name: "Bob"}}
mockQuery.On("All", mock.Anything).Run(func(args mock.Arguments) {
dest := args.Get(0).(*[]User)
*dest = users
}).Return(nil)
Error Handling ¶
To simulate errors:
mockQuery.On("First", mock.Anything).Return(errors.New("not found"))
Update Operations ¶
For update operations with the builder pattern:
mockUpdateBuilder := new(mocks.MockUpdateBuilder)
mockQuery.On("UpdateBuilder").Return(mockUpdateBuilder)
mockUpdateBuilder.On("Set", "Status", "completed").Return(mockUpdateBuilder)
mockUpdateBuilder.On("Execute").Return(nil)
Tips ¶
1. Use mock.Anything when you don't need to assert on specific arguments 2. Use mock.MatchedBy for custom argument matching 3. Always assert expectations were met with AssertExpectations 4. Return the mock itself for chainable methods 5. Use Run to modify output parameters before returning
Package mocks provides mock implementations for DynamORM interfaces. These mocks are designed to be used with github.com/stretchr/testify/mock for unit testing applications that use DynamORM.
Index ¶
- type DB
- type MockDB
- type MockQuery
- func (m *MockQuery) All(dest any) error
- func (m *MockQuery) AllPaginated(dest any) (*core.PaginatedResult, error)
- func (m *MockQuery) BatchCreate(items any) error
- func (m *MockQuery) BatchGet(keys []any, dest any) error
- func (m *MockQuery) Count() (int64, error)
- func (m *MockQuery) Create() error
- func (m *MockQuery) Cursor(cursor string) core.Query
- func (m *MockQuery) Delete() error
- func (m *MockQuery) Filter(field string, op string, value any) core.Query
- func (m *MockQuery) FilterGroup(fn func(core.Query)) core.Query
- func (m *MockQuery) First(dest any) error
- func (m *MockQuery) Index(indexName string) core.Query
- func (m *MockQuery) Limit(limit int) core.Query
- func (m *MockQuery) Offset(offset int) core.Query
- func (m *MockQuery) OrFilter(field string, op string, value any) core.Query
- func (m *MockQuery) OrFilterGroup(fn func(core.Query)) core.Query
- func (m *MockQuery) OrderBy(field string, order string) core.Query
- func (m *MockQuery) ParallelScan(segment int32, totalSegments int32) core.Query
- func (m *MockQuery) Scan(dest any) error
- func (m *MockQuery) ScanAllSegments(dest any, totalSegments int32) error
- func (m *MockQuery) Select(fields ...string) core.Query
- func (m *MockQuery) SetCursor(cursor string) error
- func (m *MockQuery) Update(fields ...string) error
- func (m *MockQuery) UpdateBuilder() core.UpdateBuilder
- func (m *MockQuery) Where(field string, op string, value any) core.Query
- func (m *MockQuery) WithContext(ctx context.Context) core.Query
- type MockUpdateBuilder
- func (m *MockUpdateBuilder) Add(field string, value any) core.UpdateBuilder
- func (m *MockUpdateBuilder) AppendToList(field string, values any) core.UpdateBuilder
- func (m *MockUpdateBuilder) Condition(field string, operator string, value any) core.UpdateBuilder
- func (m *MockUpdateBuilder) ConditionExists(field string) core.UpdateBuilder
- func (m *MockUpdateBuilder) ConditionNotExists(field string) core.UpdateBuilder
- func (m *MockUpdateBuilder) ConditionVersion(currentVersion int64) core.UpdateBuilder
- func (m *MockUpdateBuilder) Decrement(field string) core.UpdateBuilder
- func (m *MockUpdateBuilder) Delete(field string, value any) core.UpdateBuilder
- func (m *MockUpdateBuilder) Execute() error
- func (m *MockUpdateBuilder) ExecuteWithResult(result any) error
- func (m *MockUpdateBuilder) Increment(field string) core.UpdateBuilder
- func (m *MockUpdateBuilder) PrependToList(field string, values any) core.UpdateBuilder
- func (m *MockUpdateBuilder) Remove(field string) core.UpdateBuilder
- func (m *MockUpdateBuilder) RemoveFromListAt(field string, index int) core.UpdateBuilder
- func (m *MockUpdateBuilder) ReturnValues(option string) core.UpdateBuilder
- func (m *MockUpdateBuilder) Set(field string, value any) core.UpdateBuilder
- func (m *MockUpdateBuilder) SetIfNotExists(field string, value any, defaultValue any) core.UpdateBuilder
- func (m *MockUpdateBuilder) SetListElement(field string, index int, value any) core.UpdateBuilder
- type Query
- type UpdateBuilder
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type MockDB ¶
MockDB is a mock implementation of the core.DB interface. It can be used for unit testing code that depends on DynamORM.
Example usage:
mockDB := new(mocks.MockDB)
mockQuery := new(mocks.MockQuery)
mockDB.On("Model", &User{}).Return(mockQuery)
mockQuery.On("Where", "ID", "=", "123").Return(mockQuery)
mockQuery.On("First", mock.Anything).Return(nil)
func (*MockDB) AutoMigrate ¶
AutoMigrate creates or updates tables based on the given models
func (*MockDB) Transaction ¶
Transaction executes a function within a database transaction
type MockQuery ¶
MockQuery is a mock implementation of the core.Query interface. It can be used for unit testing code that depends on DynamORM queries.
Example usage:
mockQuery := new(mocks.MockQuery)
mockQuery.On("Where", "ID", "=", "123").Return(mockQuery)
mockQuery.On("First", mock.Anything).Return(nil)
func (*MockQuery) AllPaginated ¶
func (m *MockQuery) AllPaginated(dest any) (*core.PaginatedResult, error)
AllPaginated retrieves all matching items with pagination metadata
func (*MockQuery) BatchCreate ¶
BatchCreate creates multiple items
func (*MockQuery) FilterGroup ¶
FilterGroup adds a group of filters with AND logic
func (*MockQuery) OrFilterGroup ¶
OrFilterGroup adds a group of filters with OR logic
func (*MockQuery) ParallelScan ¶
ParallelScan configures parallel scanning
func (*MockQuery) ScanAllSegments ¶
ScanAllSegments performs parallel scan across all segments
func (*MockQuery) UpdateBuilder ¶
func (m *MockQuery) UpdateBuilder() core.UpdateBuilder
UpdateBuilder returns a builder for complex update operations
type MockUpdateBuilder ¶
MockUpdateBuilder is a mock implementation of the core.UpdateBuilder interface. It can be used for unit testing code that uses DynamORM's update builder pattern.
Example usage:
mockUpdateBuilder := new(mocks.MockUpdateBuilder)
mockUpdateBuilder.On("Set", "status", "active").Return(mockUpdateBuilder)
mockUpdateBuilder.On("Execute").Return(nil)
func (*MockUpdateBuilder) Add ¶
func (m *MockUpdateBuilder) Add(field string, value any) core.UpdateBuilder
Add performs atomic addition (for numbers) or adds to a set
func (*MockUpdateBuilder) AppendToList ¶
func (m *MockUpdateBuilder) AppendToList(field string, values any) core.UpdateBuilder
AppendToList appends values to the end of a list
func (*MockUpdateBuilder) Condition ¶
func (m *MockUpdateBuilder) Condition(field string, operator string, value any) core.UpdateBuilder
Condition adds a condition that must be met for the update to succeed
func (*MockUpdateBuilder) ConditionExists ¶
func (m *MockUpdateBuilder) ConditionExists(field string) core.UpdateBuilder
ConditionExists adds a condition that the field must exist
func (*MockUpdateBuilder) ConditionNotExists ¶
func (m *MockUpdateBuilder) ConditionNotExists(field string) core.UpdateBuilder
ConditionNotExists adds a condition that the field must not exist
func (*MockUpdateBuilder) ConditionVersion ¶
func (m *MockUpdateBuilder) ConditionVersion(currentVersion int64) core.UpdateBuilder
ConditionVersion adds optimistic locking based on version
func (*MockUpdateBuilder) Decrement ¶
func (m *MockUpdateBuilder) Decrement(field string) core.UpdateBuilder
Decrement decrements a numeric field by 1
func (*MockUpdateBuilder) Delete ¶
func (m *MockUpdateBuilder) Delete(field string, value any) core.UpdateBuilder
Delete removes values from a set
func (*MockUpdateBuilder) Execute ¶
func (m *MockUpdateBuilder) Execute() error
Execute performs the update operation
func (*MockUpdateBuilder) ExecuteWithResult ¶
func (m *MockUpdateBuilder) ExecuteWithResult(result any) error
ExecuteWithResult performs the update and returns the result
func (*MockUpdateBuilder) Increment ¶
func (m *MockUpdateBuilder) Increment(field string) core.UpdateBuilder
Increment increments a numeric field by 1
func (*MockUpdateBuilder) PrependToList ¶
func (m *MockUpdateBuilder) PrependToList(field string, values any) core.UpdateBuilder
PrependToList prepends values to the beginning of a list
func (*MockUpdateBuilder) Remove ¶
func (m *MockUpdateBuilder) Remove(field string) core.UpdateBuilder
Remove removes an attribute from the item
func (*MockUpdateBuilder) RemoveFromListAt ¶
func (m *MockUpdateBuilder) RemoveFromListAt(field string, index int) core.UpdateBuilder
RemoveFromListAt removes an element at a specific index from a list
func (*MockUpdateBuilder) ReturnValues ¶
func (m *MockUpdateBuilder) ReturnValues(option string) core.UpdateBuilder
ReturnValues specifies what values to return after the update
func (*MockUpdateBuilder) Set ¶
func (m *MockUpdateBuilder) Set(field string, value any) core.UpdateBuilder
Set updates a field to a new value
func (*MockUpdateBuilder) SetIfNotExists ¶
func (m *MockUpdateBuilder) SetIfNotExists(field string, value any, defaultValue any) core.UpdateBuilder
SetIfNotExists sets a field value only if it doesn't already exist
func (*MockUpdateBuilder) SetListElement ¶
func (m *MockUpdateBuilder) SetListElement(field string, index int, value any) core.UpdateBuilder
SetListElement sets a specific element in a list
type UpdateBuilder ¶
type UpdateBuilder = MockUpdateBuilder
UpdateBuilder is an alias for MockUpdateBuilder to allow shorter declarations