Skip to content

Commit 2050263

Browse files
v3.0 (feat): add fs package to handle user directory and cmf inner directory
1 parent 1d7a490 commit 2050263

File tree

4 files changed

+250
-33
lines changed

4 files changed

+250
-33
lines changed

fs/fs.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package fs
2+
3+
import (
4+
"errors"
5+
"io/ioutil"
6+
"os"
7+
)
8+
9+
// GetFileFromVirtualFSError vfs.ReadFileSync fail
10+
const GetFileFromVirtualFSError = "open file from vfs error"
11+
12+
// GetFileFromFSError ioutil.ReadFile fail
13+
const GetFileFromFSError = "open file from user fs error"
14+
15+
type fs struct {
16+
vfs VFS
17+
}
18+
19+
// VFS VirtualFS main object
20+
type VFS interface {
21+
ReadFile(path string) ([]byte, error)
22+
}
23+
24+
// FS file system interface
25+
type FS interface {
26+
GetFileFromVirtualFS(path string) (string, error)
27+
GetFileFromFS(path string) (string, error)
28+
GetCurrentDirectory() (string, error)
29+
}
30+
31+
// NewFs return new file system with virtual file system
32+
func NewFs(vfs VFS) FS {
33+
return &fs{
34+
vfs: vfs,
35+
}
36+
}
37+
38+
// GetFileFromVirtualFS return a file from virtual fs
39+
func (vfs *fs) GetFileFromVirtualFS(path string) (string, error) {
40+
file, err := vfs.vfs.ReadFile(path)
41+
if err != nil {
42+
return "", errors.New(GetFileFromVirtualFSError)
43+
}
44+
45+
return string(file), nil
46+
}
47+
48+
// GetFileFromFS return a file from user fs
49+
func (vfs *fs) GetFileFromFS(path string) (string, error) {
50+
file, err := ioutil.ReadFile(path)
51+
if err != nil {
52+
return "", errors.New(GetFileFromFSError)
53+
}
54+
55+
return string(file), nil
56+
}
57+
58+
// GetCurrentDirectory return user current directory
59+
func (vfs *fs) GetCurrentDirectory() (string, error) {
60+
path, err := os.Getwd()
61+
if err != nil {
62+
return "", errors.New(GetFileFromFSError)
63+
}
64+
65+
return path, nil
66+
}

fs/fs_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package fs_test
2+
3+
import (
4+
"errors"
5+
"os"
6+
"testing"
7+
8+
"github.com/golang/mock/gomock"
9+
. "github.com/onsi/ginkgo"
10+
. "github.com/onsi/gomega"
11+
12+
"github.com/walmartdigital/commit-message-formatter/fs"
13+
"github.com/walmartdigital/commit-message-formatter/mocks"
14+
)
15+
16+
var ctrl *gomock.Controller
17+
18+
func TestAll(t *testing.T) {
19+
ctrl = gomock.NewController(t)
20+
defer ctrl.Finish()
21+
22+
RegisterFailHandler(Fail)
23+
RunSpecs(t, "fs tests")
24+
}
25+
26+
var _ = Describe("fs package", func() {
27+
var (
28+
fakeVFS *mocks.MockVFS
29+
)
30+
31+
BeforeEach(func() {
32+
fakeVFS = mocks.NewMockVFS(ctrl)
33+
})
34+
35+
It("should return a file from VirtualFS", func() {
36+
fakeVFS.EXPECT().ReadFile(gomock.Any().String()).Return([]byte{}, nil).Times(1)
37+
38+
vfs := fs.NewFs(fakeVFS)
39+
file, err := vfs.GetFileFromVirtualFS(gomock.Any().String())
40+
41+
Expect(vfs).ToNot(BeNil())
42+
Expect(err).To(BeNil())
43+
Expect(file).To(Equal(""))
44+
})
45+
46+
It("should not return a file from VirtualFS when readFile fails", func() {
47+
fakeVFS.EXPECT().ReadFile(gomock.Any().String()).Return([]byte(""), errors.New(gomock.Any().String())).Times(1)
48+
49+
vfs := fs.NewFs(fakeVFS)
50+
file, err := vfs.GetFileFromVirtualFS(gomock.Any().String())
51+
52+
Expect(vfs).ToNot(BeNil())
53+
Expect(file).To(Equal(""))
54+
Expect(err).To(Equal(errors.New(fs.GetFileFromVirtualFSError)))
55+
})
56+
57+
It("should return a file from user FS", func() {
58+
59+
vfs := fs.NewFs(fakeVFS)
60+
folder, _ := os.Getwd()
61+
filePath := folder + "/fs.go"
62+
file, err := vfs.GetFileFromFS(filePath)
63+
64+
Expect(vfs).ToNot(BeNil())
65+
Expect(err).To(BeNil())
66+
Expect(file).ToNot(Equal(""))
67+
})
68+
})

mocks/fs.go

Lines changed: 116 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packrd/packed-packr.go

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)