You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.8 KiB
Go
91 lines
1.8 KiB
Go
3 years ago
|
package test
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
"path"
|
||
|
"os"
|
||
|
// "io"
|
||
|
"github.com/spf13/afero"
|
||
|
"caj-larsson/bog/domain"
|
||
|
)
|
||
|
|
||
|
|
||
|
type MockBogFile struct {
|
||
|
filename string
|
||
|
file afero.File
|
||
|
}
|
||
|
|
||
|
func (f MockBogFile) Path() string {
|
||
|
return f.filename
|
||
|
}
|
||
|
|
||
|
func (f MockBogFile) Size() int64 {
|
||
|
stat, _ := f.file.Stat()
|
||
|
return int64(stat.Size())
|
||
|
}
|
||
|
|
||
|
func (f MockBogFile) Read(p []byte) (int, error) {
|
||
|
return f.file.Read(p)
|
||
|
}
|
||
|
|
||
|
func (f MockBogFile) Write(p []byte) (int, error) {
|
||
|
return f.file.Write(p)
|
||
|
}
|
||
|
|
||
|
func (f MockBogFile) Close() error {
|
||
|
return f.file.Close()
|
||
|
}
|
||
|
|
||
|
func (f MockBogFile) Seek(offset int64, whence int) (int64, error) {
|
||
|
return f.file.Seek(offset, whence)
|
||
|
}
|
||
|
|
||
|
func (f MockBogFile) Modified() time.Time {
|
||
|
stat, _ := f.file.Stat()
|
||
|
return stat.ModTime()
|
||
|
}
|
||
|
|
||
|
// The actual repository
|
||
|
type MockFileRepository struct {
|
||
|
fs afero.Fs
|
||
|
}
|
||
|
|
||
|
func NewMockFileRepository() domain.FileDataRepository {
|
||
|
return MockFileRepository { afero.NewMemMapFs() }
|
||
|
}
|
||
|
|
||
|
func (r MockFileRepository) Create(filename string, user_agent_label string) (domain.BogInFile, error) {
|
||
|
abs_path := path.Join( filename, user_agent_label)
|
||
|
dir := path.Dir(abs_path)
|
||
|
r.fs.MkdirAll(dir, 0750)
|
||
|
file, err := r.fs.OpenFile(abs_path, os.O_RDWR|os.O_CREATE, 0644)
|
||
|
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
bf := MockBogFile {filename, file}
|
||
|
|
||
|
return bf, nil
|
||
|
}
|
||
|
|
||
|
func (r MockFileRepository) Open(filename string, user_agent_label string) (domain.BogOutFile, error) {
|
||
|
abs_path := path.Join(filename, user_agent_label)
|
||
|
|
||
|
dir := path.Dir(abs_path)
|
||
|
r.fs.MkdirAll(dir, 0750)
|
||
|
file, err := r.fs.OpenFile(abs_path, os.O_RDONLY, 0644)
|
||
|
|
||
|
if err != nil {
|
||
|
return nil, domain.ErrNotExists
|
||
|
}
|
||
|
|
||
|
bf := MockBogFile {filename, file}
|
||
|
return bf, nil
|
||
|
}
|
||
|
|
||
|
func (r MockFileRepository) Delete(filename string, user_agent_label string) {
|
||
|
abs_path := path.Join(filename, user_agent_label)
|
||
|
r.fs.Remove(abs_path)
|
||
|
}
|