Commit eb937ea

mo khan <mo.khan@gmail.com>
2020-11-15 01:54:14
feat: find movies created by Pixar
1 parent 3549de8
Changed files (2)
domain/movie_library.go
@@ -15,6 +15,26 @@ func (self *MovieLibrary) Find(fn Predicate) *Movie {
 	return nil
 }
 
+func (self *MovieLibrary) FindAll(fn Predicate) []Movie {
+	items := []Movie{}
+
+	for i := range self.Movies {
+		movie := self.Movies[i]
+
+		if fn(movie) {
+			items = append(items, movie)
+		}
+	}
+
+	return items
+}
+
+func (self *MovieLibrary) FindAllMoviesByPixar() []Movie {
+	return self.FindAll(func(x Movie) bool {
+		return x.Studio.Name == "Pixar"
+	})
+}
+
 func (self *MovieLibrary) Add(movie Movie) {
 	found := self.Find(func(x Movie) bool {
 		return x.Equals(movie)
test/unit/movie_library_test.go
@@ -48,4 +48,24 @@ func TestMovieLibrary(t *testing.T) {
 			})
 		})
 	})
+
+	t.Run("Find", func(t *testing.T) {
+		subject.Add(shawshank_redemption)
+		subject.Add(chasing_amy)
+		subject.Add(man_on_fire)
+		subject.Add(toy_story)
+		subject.Add(up)
+		subject.Add(cars)
+		subject.Add(monsters_inc)
+		subject.Add(fantasia)
+		subject.Add(dumbo)
+		subject.Add(pinocchio)
+
+		t.Run("returns all Pixar movies", func(t *testing.T) {
+			movies := subject.FindAllMoviesByPixar()
+			expected := [...]domain.Movie{toy_story, cars, up, monsters_inc}
+
+			assert.ElementsMatch(t, expected, movies)
+		})
+	})
 }