mirror of
https://github.com/alexedwards/scs.git
synced 2025-07-13 01:00:17 +02:00
162 lines
3.9 KiB
Go
162 lines
3.9 KiB
Go
package mockstore
|
|
|
|
import (
|
|
"bytes"
|
|
"time"
|
|
)
|
|
|
|
type expectedDelete struct {
|
|
inputToken string
|
|
returnErr error
|
|
}
|
|
|
|
type expectedFind struct {
|
|
inputToken string
|
|
returnB []byte
|
|
returnFound bool
|
|
returnErr error
|
|
}
|
|
|
|
type expectedCommit struct {
|
|
inputToken string
|
|
inputB []byte
|
|
inputExpiry time.Time
|
|
returnErr error
|
|
}
|
|
|
|
type expectedAll struct {
|
|
returnMB map[string][]byte
|
|
returnErr error
|
|
}
|
|
|
|
type MockStore struct {
|
|
deleteExpectations []expectedDelete
|
|
findExpectations []expectedFind
|
|
commitExpectations []expectedCommit
|
|
allExpectations []expectedAll
|
|
}
|
|
|
|
func (m *MockStore) ExpectDelete(token string, err error) {
|
|
m.deleteExpectations = append(m.deleteExpectations, expectedDelete{
|
|
inputToken: token,
|
|
returnErr: err,
|
|
})
|
|
}
|
|
|
|
// Delete implements the Store interface
|
|
func (m *MockStore) Delete(token string) (err error) {
|
|
var (
|
|
indexToRemove int
|
|
expectationFound bool
|
|
)
|
|
for i, expectation := range m.deleteExpectations {
|
|
if expectation.inputToken == token {
|
|
indexToRemove = i
|
|
expectationFound = true
|
|
break
|
|
}
|
|
}
|
|
if !expectationFound {
|
|
panic("store.Delete called unexpectedly")
|
|
}
|
|
|
|
errToReturn := m.deleteExpectations[indexToRemove].returnErr
|
|
m.deleteExpectations = m.deleteExpectations[:indexToRemove+copy(m.deleteExpectations[indexToRemove:], m.deleteExpectations[indexToRemove+1:])]
|
|
|
|
return errToReturn
|
|
}
|
|
|
|
func (m *MockStore) ExpectFind(token string, b []byte, found bool, err error) {
|
|
m.findExpectations = append(m.findExpectations, expectedFind{
|
|
inputToken: token,
|
|
returnB: b,
|
|
returnFound: found,
|
|
returnErr: err,
|
|
})
|
|
}
|
|
|
|
// Find implements the Store interface
|
|
func (m *MockStore) Find(token string) (b []byte, found bool, err error) {
|
|
var (
|
|
indexToRemove int
|
|
expectationFound bool
|
|
)
|
|
for i, expectation := range m.findExpectations {
|
|
if expectation.inputToken == token {
|
|
indexToRemove = i
|
|
expectationFound = true
|
|
break
|
|
}
|
|
}
|
|
if !expectationFound {
|
|
panic("store.Find called unexpectedly")
|
|
}
|
|
|
|
valueToReturn := m.findExpectations[indexToRemove]
|
|
m.findExpectations = m.findExpectations[:indexToRemove+copy(m.findExpectations[indexToRemove:], m.findExpectations[indexToRemove+1:])]
|
|
|
|
return valueToReturn.returnB, valueToReturn.returnFound, valueToReturn.returnErr
|
|
}
|
|
|
|
func (m *MockStore) ExpectCommit(token string, b []byte, expiry time.Time, err error) {
|
|
m.commitExpectations = append(m.commitExpectations, expectedCommit{
|
|
inputToken: token,
|
|
inputB: b,
|
|
inputExpiry: expiry,
|
|
returnErr: err,
|
|
})
|
|
}
|
|
|
|
// Commit implements the Store interface
|
|
func (m *MockStore) Commit(token string, b []byte, expiry time.Time) (err error) {
|
|
var (
|
|
indexToRemove int
|
|
expectationFound bool
|
|
)
|
|
for i, expectation := range m.commitExpectations {
|
|
if expectation.inputToken == token && bytes.Equal(expectation.inputB, b) && expectation.inputExpiry == expiry {
|
|
indexToRemove = i
|
|
expectationFound = true
|
|
break
|
|
}
|
|
}
|
|
if !expectationFound {
|
|
panic("store.Commit called unexpectedly")
|
|
}
|
|
|
|
errToReturn := m.commitExpectations[indexToRemove].returnErr
|
|
m.commitExpectations = m.commitExpectations[:indexToRemove+copy(m.commitExpectations[indexToRemove:], m.commitExpectations[indexToRemove+1:])]
|
|
|
|
return errToReturn
|
|
}
|
|
|
|
func (m *MockStore) ExpectAll(mb map[string][]byte, err error) {
|
|
m.allExpectations = append(m.allExpectations, expectedAll{
|
|
returnMB: mb,
|
|
returnErr: err,
|
|
})
|
|
}
|
|
|
|
// All implements the IterableStore interface
|
|
func (m *MockStore) All() (map[string][]byte, error) {
|
|
var (
|
|
indexToRemove int
|
|
expectationFound bool
|
|
)
|
|
for i, expectation := range m.allExpectations {
|
|
if len(expectation.returnMB) == 3 {
|
|
indexToRemove = i
|
|
expectationFound = true
|
|
break
|
|
}
|
|
}
|
|
if !expectationFound {
|
|
panic("store.All called unexpectedly")
|
|
}
|
|
|
|
valueToReturn := m.allExpectations[indexToRemove]
|
|
m.allExpectations = m.allExpectations[:indexToRemove+copy(m.allExpectations[indexToRemove:], m.allExpectations[indexToRemove+1:])]
|
|
|
|
return valueToReturn.returnMB, valueToReturn.returnErr
|
|
}
|