I passed this stage, but I’m trying to write a unit test for this stage. Here’s my function.
type NewReader func(r io.Reader) (io.ReadCloser, error)
func catFileCommand(fileSystem fs.FS, newReader NewReader, hash string) string {
path := filepath.Join(hash[:2], hash[2:])
f, _ := fileSystem.Open(path)
r, _ := newReader(f)
b, _ := io.ReadAll(r)
parts := strings.Split(string(b), "\x00")
return parts[1]
}
For the test I would like to create a function I could use in place of zlib.NewReader such that it no decompression is done. The raw string is just returned.
My test looks like this:
package main
import (
"testing"
"testing/fstest"
)
func TestCatFileCommand(t *testing.T) {
fileSystem := fstest.MapFS{
"e8/8f7a929cd70b0274c4ea33b209c97fa845fdbc": {Data: []byte("blob 11\x00hello world")},
}
hash := "e88f7a929cd70b0274c4ea33b209c97fa845fdbc"
got := catFileCommand(fileSystem, <pass-through>, hash)
want := "hello world"
if got != want {
t.Errorf("got %s, want %s", got, want)
}
}
// TODO: need some type of pass through fake for zlib.NewReader to make this test work