def __init__(self):
     self._movies = WatchList()
     self._users = list()
     self._actors = list()
     self._directors = list()
     self._genres = list()
     self._reviews = list()
     self._i = iter(self._movies)
def test_remove():
    watchlist = WatchList()
    watchlist.remove_movie(Movie("Moana", 2016))

    assert watchlist.size() == 0

    watchlist.add_movie(Movie("Moana", 2016))
    watchlist.remove_movie(Movie("Moana", 2016))

    assert watchlist.size() == 0
def test_add():
    watchlist = WatchList()
    watchlist.add_movie("hello world")

    assert watchlist.size() == 0

    watchlist = WatchList()
    watchlist.add_movie(Movie("Moana", 2016))

    assert watchlist.size() == 1
def test_selection():
    watchlist = WatchList()
    watchlist.add_movie(Movie("Moana", 2016))
    watchlist.add_movie(Movie("Avengers: Endgame", 2019))

    assert watchlist.select_movie_to_watch(1) == Movie("Avengers: Endgame",
                                                       2019)

    assert watchlist.select_movie_to_watch(2) == None
def test_iteration():
    watchlist = WatchList()
    movies = [
        Movie("Moana", 2016),
        Movie("Avengers: Endgame", 2019),
        Movie("Ladybird", 2017)
    ]
    for movie in movies:
        watchlist.add_movie(movie)
    iterator = iter(watchlist)

    assert next(iterator) == Movie("Moana", 2016)
    assert next(iterator) == Movie("Avengers: Endgame", 2019)
    assert next(iterator) == Movie("Ladybird", 2017)

    with pytest.raises(StopIteration):
        next(iterator)
class MemoryRepository(AbstractRepository):
    def __init__(self):
        self._movies = WatchList()
        self._users = list()
        self._actors = list()
        self._directors = list()
        self._genres = list()
        self._reviews = list()
        self._i = iter(self._movies)

    def add_user(self, user: User):
        self._users.append(user)

    def get_user(self, username) -> User:
        user = None
        for u in self._users:
            if u.user_name == username:
                user = u
        return user

    def add_movie(self, movie: Movie):
        self._movies.add_movie(movie)

    def get_movie(self, index: int) -> Movie:
        return self._movies.select_movie_to_watch(index)

    def get_movie_by_page(self, page: int):
        return self._movies.select_movie_by_page(page)

    def get_page_of_previous_movie(self, movie: Movie):
        pre_page = movie.page - 1
        if pre_page < 0:
            return 0
        else:
            return pre_page

    def get_page_of_next_movie(self, movie: Movie):
        return (movie.page + 1)

    def get_number_of_movies(self):
        return self._movies.size()

    def get_first_movie(self) -> Movie:
        return self._movies.first_movie_in_watchlist()

    def get_last_movie(self) -> Movie:
        return self._movies.last_movie_in_watchlist()

    def get_next_movie(self):
        return next(self._i)

    def add_actor(self, actor: Actor):
        self._actors.append(actor)

    def get_actor(self) -> List[Actor]:
        return self._actors

    def add_director(self, director: Director):
        self._directors.append(director)

    def get_director(self) -> List[Director]:
        return self._directors

    def add_genre(self, genre: Genre):
        self._genres.append(genre)

    def get_genre(self) -> List[Genre]:
        return self._genres
def test_repeated_add():
    watchlist = WatchList()
    watchlist.add_movie(Movie("Moana", 2016))
    watchlist.add_movie(Movie("Moana", 2016))
    assert watchlist.size() == 1
def watchlist():
    return WatchList()
def test_first_select():
    watchlist = WatchList()
    watchlist.add_movie(Movie("Moana", 2016))

    assert watchlist.first_movie_in_watchlist() == Movie("Moana", 2016)