| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package test
- import (
- "errors"
- "strings"
- "github.com/porter-dev/porter/internal/models"
- "github.com/porter-dev/porter/internal/repository"
- "gorm.io/gorm"
- )
- const (
- CreateSessionMethod string = "create_session_0"
- SelectSessionMethod string = "select_session_0"
- )
- // SessionRepository uses gorm.DB for querying the database
- type SessionRepository struct {
- canQuery bool
- failingMethods string
- sessions []*models.Session
- }
- // NewSessionRepository returns pointer to repo along with the db
- func NewSessionRepository(canQuery bool, failingMethods ...string) repository.SessionRepository {
- return &SessionRepository{canQuery, strings.Join(failingMethods, ","), []*models.Session{}}
- }
- // CreateSession must take in Key, Data, and ExpiresAt as arguments.
- func (repo *SessionRepository) CreateSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery || strings.Contains(repo.failingMethods, CreateSessionMethod) {
- return nil, errors.New("Cannot write database")
- }
- // make sure key doesn't exist
- for _, s := range repo.sessions {
- if s.Key == session.Key {
- return nil, errors.New("Cannot write database")
- }
- }
- sessions := repo.sessions
- sessions = append(sessions, session)
- repo.sessions = sessions
- session.ID = uint(len(repo.sessions))
- return session, nil
- }
- // UpdateSession updates only the Data field using Key as selector.
- func (repo *SessionRepository) UpdateSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- var oldSession *models.Session
- for _, s := range repo.sessions {
- if s.Key == session.Key {
- oldSession = s
- }
- }
- if oldSession != nil {
- oldSession.Data = session.Data
- return oldSession, nil
- }
- return nil, gorm.ErrRecordNotFound
- }
- // DeleteSession deletes a session by Key
- func (repo *SessionRepository) DeleteSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery {
- return nil, errors.New("Cannot write database")
- }
- if int(session.ID-1) >= len(repo.sessions) || repo.sessions[session.ID-1] == nil {
- return nil, gorm.ErrRecordNotFound
- }
- index := int(session.ID - 1)
- repo.sessions[index] = nil
- return session, nil
- }
- // SelectSession returns a session with matching key
- func (repo *SessionRepository) SelectSession(session *models.Session) (*models.Session, error) {
- if !repo.canQuery || strings.Contains(repo.failingMethods, SelectSessionMethod) {
- return nil, errors.New("Cannot write database")
- }
- for _, s := range repo.sessions {
- if s.Key == session.Key {
- return s, nil
- }
- }
- return nil, gorm.ErrRecordNotFound
- }
|