Import source: handler/fs/fs
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
//go:build unit
|
||||
// +build unit
|
||||
|
||||
package fs_test
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"reactor-crw/handler/fs"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
type pathResolverMock struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
func (m *pathResolverMock) CreateFolder(name string) error {
|
||||
args := m.Called(name)
|
||||
return args.Error(0)
|
||||
}
|
||||
|
||||
func (m *pathResolverMock) CreateFile(name string) (io.WriteCloser, error) {
|
||||
args := m.Called(name)
|
||||
return args.Get(0).(io.WriteCloser), args.Error(1)
|
||||
}
|
||||
|
||||
func (m *pathResolverMock) Remove(name string) {
|
||||
_ = m.Called(name)
|
||||
}
|
||||
|
||||
type transportMock struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
func (m *transportMock) FetchData(url string) (io.ReadCloser, error) {
|
||||
args := m.Called(url)
|
||||
return args.Get(0).(io.ReadCloser), args.Error(1)
|
||||
}
|
||||
|
||||
func TestNewFileSaver(t *testing.T) {
|
||||
pr := pathResolverMock{}
|
||||
trp := transportMock{}
|
||||
|
||||
t.Log("Given the need to create a file saver handler.")
|
||||
{
|
||||
t.Log("When baseFolder is incorrect.")
|
||||
{
|
||||
pr.On("CreateFolder", "baseFolder").Return(errors.New("error"))
|
||||
_, err := fs.NewFileSaver(&pr, &trp, "baseFolder")
|
||||
require.Error(t, err, "Expected an error during create folder")
|
||||
pr.ExpectedCalls = []*mock.Call{}
|
||||
}
|
||||
|
||||
t.Log("When all data correct.")
|
||||
{
|
||||
pr.On("CreateFolder", "baseFolder").Return(nil)
|
||||
_, err := fs.NewFileSaver(&pr, &trp, "baseFolder")
|
||||
require.NoError(t, err, "Wasn't expected an error on new creating file saver")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFileSaver_Process(t *testing.T) {
|
||||
tmlFile, _ := ioutil.TempFile(os.TempDir(), "file-title.txt")
|
||||
|
||||
pr := pathResolverMock{}
|
||||
pr.On("CreateFolder", "baseFolder").Return(nil)
|
||||
pr.On("Remove", mock.Anything)
|
||||
|
||||
trp := transportMock{}
|
||||
|
||||
p := make(chan int, 1)
|
||||
e := make(chan error, 1)
|
||||
|
||||
fileSaver, _ := fs.NewFileSaver(&pr, &trp, "baseFolder")
|
||||
|
||||
t.Log("Given the need to process data.")
|
||||
{
|
||||
t.Log("When transport returns an error.")
|
||||
{
|
||||
trp.On("FetchData", "file-title.txt").Return(tmlFile, errors.New("error")).Once()
|
||||
|
||||
fileSaver.Process("file-title.txt", p, e)
|
||||
require.Error(t, <-e, "Expected an error during create file")
|
||||
<-p
|
||||
}
|
||||
|
||||
t.Log("When path resolver returns an error.")
|
||||
{
|
||||
trp.On("FetchData", "file-title.txt").Return(tmlFile, nil).Once()
|
||||
pr.On("CreateFile", "file-title.txt").Return(tmlFile, errors.New("error")).Once()
|
||||
|
||||
fileSaver.Process("file-title.txt", p, e)
|
||||
require.Error(t, <-e, "Expected an error during create file")
|
||||
<-p
|
||||
}
|
||||
|
||||
t.Log("When cannot save the data.")
|
||||
{
|
||||
trp.On("FetchData", "file-title.txt").Return(tmlFile, nil).Once()
|
||||
pr.On("CreateFile", "file-title.txt").Return(tmlFile, nil).Once()
|
||||
pr.On("Remove", mock.Anything)
|
||||
|
||||
fileSaver.Process("file-title.txt", p, e)
|
||||
require.Error(t, <-e, "Expected an error file copying")
|
||||
<-p
|
||||
}
|
||||
|
||||
t.Log("When all data correct.")
|
||||
{
|
||||
tmlFile, _ = ioutil.TempFile(os.TempDir(), "new-file-title.txt")
|
||||
|
||||
trp.On("FetchData", "new-file-title.txt").Return(tmlFile, nil).Once()
|
||||
pr.On("CreateFile", "new-file-title.txt").Return(tmlFile, nil).Once()
|
||||
|
||||
fileSaver.Process("new-file-title.txt", p, e)
|
||||
select {
|
||||
case err := <-e:
|
||||
require.NoError(t, err, "Wasn't expected an error on new file process")
|
||||
case <-p:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user