diff --git a/blogposts/blogposts.go b/blogposts/blogposts.go index 95a33a4..f959fc9 100644 --- a/blogposts/blogposts.go +++ b/blogposts/blogposts.go @@ -1,15 +1,9 @@ package blogposts import ( - "io" "io/fs" ) -type Post struct { - Title, Description, Body string - Tags []string -} - func NewPostsFromFS(fileSystem fs.FS) ([]Post, error) { dir, err := fs.ReadDir(fileSystem, ".") if err != nil { @@ -25,25 +19,3 @@ func NewPostsFromFS(fileSystem fs.FS) ([]Post, error) { } return posts, nil } - -func getPost(fileSystem fs.FS, fileName string) (Post, error) { - postFile, err := fileSystem.Open(fileName) - if err != nil { - return Post{}, err - } - defer postFile.Close() - - return newPost(postFile) -} - -// NOTE: Does newPost have to be coupled to an fs.File ? -// Do we use all the methods and data from this type? What do we really need? -func newPost(postFile io.Reader) (Post, error) { - postData, err := io.ReadAll(postFile) - if err != nil { - return Post{}, err - } - - post := Post{Title: string(postData)[7:]} - return post, nil -} diff --git a/blogposts/blogposts_test.go b/blogposts/blogposts_test.go index dd0e7e0..051b4b9 100644 --- a/blogposts/blogposts_test.go +++ b/blogposts/blogposts_test.go @@ -33,7 +33,11 @@ func TestNewBlogPosts(t *testing.T) { got := posts[0] want := Post{Title: "Post 1"} + assertPost(t, got, want) +} +func assertPost(t testing.TB, got Post, want Post) { + t.Helper() if !reflect.DeepEqual(got, want) { t.Errorf("got %+v, want %+v", got, want) } diff --git a/blogposts/post.go b/blogposts/post.go new file mode 100644 index 0000000..1af4b00 --- /dev/null +++ b/blogposts/post.go @@ -0,0 +1,33 @@ +package blogposts + +import ( + "io" + "io/fs" +) + +type Post struct { + Title, Description, Body string + Tags []string +} + +func getPost(fileSystem fs.FS, fileName string) (Post, error) { + postFile, err := fileSystem.Open(fileName) + if err != nil { + return Post{}, err + } + defer postFile.Close() + + return newPost(postFile) +} + +// NOTE: Does newPost have to be coupled to an fs.File ? +// Do we use all the methods and data from this type? What do we really need? +func newPost(postFile io.Reader) (Post, error) { + postData, err := io.ReadAll(postFile) + if err != nil { + return Post{}, err + } + + post := Post{Title: string(postData)[7:]} + return post, nil +}