main
1package testing
2
3import "github.com/stretchr/testify/assert"
4import "movies/domain"
5import "testing"
6
7func TestMovieLibrary(t *testing.T) {
8 subject := domain.MovieLibrary{}
9
10 pixar := domain.Studio{Name: "Pixar"}
11 disney := domain.Studio{Name: "Disney"}
12 castle_rock := domain.Studio{Name: "Castle Rock"}
13 miramax_films := domain.Studio{Name: "Miramax"}
14 regency_enterprises := domain.Studio{Name: "Regency"}
15
16 shawshank_redemption := domain.Movie{Title: "The Shawshank Redemption", Year: 1994, Studio: castle_rock}
17 chasing_amy := domain.Movie{Title: "Chasing Amy", Studio: miramax_films, Year: 1997}
18 man_on_fire := domain.Movie{Title: "Man on Fire", Studio: regency_enterprises, Year: 2004}
19 toy_story := domain.Movie{Title: "Toy Story", Studio: pixar, Year: 1995}
20 up := domain.Movie{Title: "Up", Studio: pixar, Year: 2006}
21 cars := domain.Movie{Title: "Cars", Studio: pixar, Year: 2009}
22 monsters_inc := domain.Movie{Title: "Monsters Inc.", Studio: pixar, Year: 2001}
23 fantasia := domain.Movie{Title: "Fantasia", Studio: disney, Year: 1940}
24 dumbo := domain.Movie{Title: "Dumbo", Studio: disney, Year: 1941}
25 pinocchio := domain.Movie{Title: "Pinocchio", Studio: disney, Year: 1940}
26
27 t.Run("Add", func(t *testing.T) {
28 t.Run("when adding a movie to the library", func(t *testing.T) {
29 subject.Add(shawshank_redemption)
30 subject.Add(chasing_amy)
31 subject.Add(man_on_fire)
32 subject.Add(toy_story)
33 subject.Add(up)
34 subject.Add(cars)
35 subject.Add(monsters_inc)
36 subject.Add(fantasia)
37 subject.Add(dumbo)
38 subject.Add(pinocchio)
39
40 t.Run("increases the total number of movies in the library", func(t *testing.T) {
41 assert.Equal(t, 10, subject.Count())
42 })
43
44 t.Run("does not allow duplicates", func(t *testing.T) {
45 subject.Add(man_on_fire)
46
47 assert.Equal(t, 10, subject.Count())
48 })
49 })
50 })
51
52 t.Run("Find", func(t *testing.T) {
53 subject.Add(shawshank_redemption)
54 subject.Add(chasing_amy)
55 subject.Add(man_on_fire)
56 subject.Add(toy_story)
57 subject.Add(up)
58 subject.Add(cars)
59 subject.Add(monsters_inc)
60 subject.Add(fantasia)
61 subject.Add(dumbo)
62 subject.Add(pinocchio)
63
64 t.Run("returns all Pixar movies", func(t *testing.T) {
65 movies := subject.FindAllMoviesByPixar()
66 expected := [...]domain.Movie{toy_story, cars, up, monsters_inc}
67
68 assert.ElementsMatch(t, expected, movies)
69 })
70
71 t.Run("returns all movies published by Pixar or Disney", func(t *testing.T) {
72 movies := subject.FindAllMoviesByPixarOrDisney()
73 expected := [...]domain.Movie{toy_story, cars, up, monsters_inc, fantasia, dumbo, pinocchio}
74
75 assert.ElementsMatch(t, expected, movies)
76 })
77
78 t.Run("returns all movies not published by Pixar", func(t *testing.T) {
79 movies := subject.FindAllMoviesNotByPixar()
80 expected := [...]domain.Movie{
81 chasing_amy,
82 dumbo,
83 fantasia,
84 man_on_fire,
85 pinocchio,
86 shawshank_redemption,
87 }
88
89 assert.ElementsMatch(t, expected, movies)
90 })
91
92 t.Run("returns all movies released after 2004", func(t *testing.T) {
93 movies := subject.FindAllMoviesPublishedAfter2004()
94 expected := [...]domain.Movie{cars, up}
95
96 assert.ElementsMatch(t, expected, movies)
97 })
98
99 t.Run("returns all movies released between 1982 and 2003 - inclusive", func(t *testing.T) {
100 movies := subject.FindAllMoviesPublishedBetween1982And2003()
101 expected := [...]domain.Movie{shawshank_redemption, chasing_amy, toy_story, monsters_inc}
102
103 assert.ElementsMatch(t, expected, movies)
104 })
105 })
106}