from unittest import TestCase

from movies import MovieDatabase, Movie
from main import MoviesApp


class TestCreateMovie(TestCase):
    def test_create_movie_inserts_movies(self):
        url = MovieDatabase.construct_in_memory_url()
        movie_database = MovieDatabase(url)
        movie_database.ensure_tables_exist()
        session = movie_database.create_session()
        MoviesApp._create_movie(session, 'Example', 4000000, 290000000)
        actual = session.query(Movie).filter(Movie.title == 'Example').first()
        self.assertIsNotNone(actual)

    def test_create_movie_inserts_one_movie(self):
        url = MovieDatabase.construct_in_memory_url()
        movie_database = MovieDatabase(url)
        movie_database.ensure_tables_exist()
        session = movie_database.create_session()
        MoviesApp._create_movie(session, 'Example', 4000000, 290000000)
        actual = session.query(Movie).filter(Movie.title == 'Example').count()
        self.assertEqual(actual, 1)

    def test_create_movie_inserts_correct_dollar_figures(self):
        url = MovieDatabase.construct_in_memory_url()
        movie_database = MovieDatabase(url)
        movie_database.ensure_tables_exist()
        session = movie_database.create_session()
        MoviesApp._create_movie(session, 'Example', 4000000, 290000000)
        actual = session.query(Movie).filter(Movie.title == 'Example').first()
        self.assertEqual(actual.budget, 4000000)
        self.assertEqual(actual.gross_revenue, 290000000)