def testAddFilmWithModeration(self): added_film = AddedFilm(title='Test film', localized_title='Test film PL', release_year=2010, user=self.u1) added_film.save() added_film.directors.add(self.p1) added_film.directors.add(self.p2) added_film.production_country.add(self.c1) added_film.production_country.add(self.c2) added_film.save() AddedCharacter.objects.create(added_film=added_film, person=self.p1, character="Test character 1") AddedCharacter.objects.create(added_film=added_film, person=self.p2, character="Test character 2") AddedCharacter.objects.create(added_film=added_film, person=self.p3, character="Test character 3") self.assertEqual(len(added_film.get_actors()), 3) self.assertTrue(added_film.film is None) self.assertEqual(added_film.moderation_status, AddedFilm.STATUS_UNKNOWN) added_film.accept(self.u2) self.assertTrue(added_film.film is not None) self.assertEqual(added_film.moderation_status, AddedFilm.STATUS_ACCEPTED) film = added_film.film self.assertEqual(film.permalink, "test-film") self.assertTrue(self.p1 in film.top_directors()) self.assertTrue(self.p2 in film.top_directors()) self.assertEqual(film.get_localized_title(), "Test film PL") self.assertEqual(film.production_country_list, "USA,Poland") self.assertEqual(len(film.get_actors()), 3)
def testAddFilmWithModeration( self ): added_film = AddedFilm( title = 'Test film', localized_title='Test film PL', release_year = 2010, user = self.u1 ) added_film.save() added_film.directors.add( self.p1 ) added_film.directors.add( self.p2 ) added_film.production_country.add( self.c1 ) added_film.production_country.add( self.c2 ) added_film.save() AddedCharacter.objects.create( added_film=added_film, person=self.p1, character="Test character 1" ) AddedCharacter.objects.create( added_film=added_film, person=self.p2, character="Test character 2" ) AddedCharacter.objects.create( added_film=added_film, person=self.p3, character="Test character 3" ) self.assertEqual( len( added_film.get_actors() ), 3 ) self.assertTrue( added_film.film is None ) self.assertEqual( added_film.moderation_status, AddedFilm.STATUS_UNKNOWN ) added_film.accept( self.u2 ) self.assertTrue( added_film.film is not None ) self.assertEqual( added_film.moderation_status, AddedFilm.STATUS_ACCEPTED ) film = added_film.film self.assertEqual( film.permalink, "test-film" ) self.assertTrue( self.p1 in film.top_directors() ) self.assertTrue( self.p2 in film.top_directors() ) self.assertEqual( film.get_localized_title(), "Test film PL" ) self.assertEqual( film.production_country_list, "USA,Poland" ) self.assertEqual( len( film.get_actors() ), 3 )
class QueriesTestCase(TestCase): def setUp(self): User.objects.all().delete() Object.objects.all().delete() Film.objects.all().delete() FilmLog.objects.all().delete() Rating.objects.all().delete() Recommendation.objects.all().delete() Person.objects.all().delete() AddedCharacter.objects.all().delete() AddedFilm.objects.all().delete() # set up users self.u1 = User(username="******", email="*****@*****.**") self.u1.save() self.u2 = User.objects.create_user("root", "*****@*****.**", "root") self.u2.user_permissions.add(Permission.objects.get(codename="can_accept_added_films")) self.u2.save() self.u3 = User(username="******", email="*****@*****.**") self.u3.save() self.u4 = User(username="******", email="*****@*****.**") self.u4.save() self.u5 = User(username="******", email="*****@*****.**") self.u5.save() self.u6 = User(username="******", email="*****@*****.**") self.u6.save() # some persons self.p1 = Person(name="Clint", surname="Eastwood", imdb_code=None, type=Person.TYPE_PERSON) self.p1.save() self.p2 = Person(name="Sylvester", surname="Stallone", imdb_code=None, type=Person.TYPE_PERSON) self.p2.save() self.p3 = Person(name="Jack", surname="Mort", imdb_code=None, type=Person.TYPE_PERSON) self.p3.save() # set up films self.f1 = Film( type=1, permalink="przypadek", imdb_code=111, status=1, version=1, release_year=1999, title="Przypadek", popularity=20, popularity_month=10, ) self.f1.save() self.f2 = Film( type=1, permalink="wrestler", imdb_code=112, status=1, version=1, release_year=2008, title="Wrestler", popularity=10, popularity_month=1, ) self.f2.save() self.f3 = Film( type=1, permalink="american-history-x", imdb_code=113, status=1, version=1, release_year=1998, title="American History X", popularity=1, popularity_month=1, ) self.f3.save() self.f4 = Film( type=1, permalink="the-big-lebowski", imdb_code=114, status=1, version=1, release_year=1998, title="The Big Lebowski", popularity=1, popularity_month=1, ) self.f4.save() self.f5 = Film( type=1, permalink="the-lord-of-the-rings-the-fellowship-of-the-ring", imdb_code=115, status=1, version=1, release_year=2001, title="The Lord of the Rings: The Fellowship of the Ring", popularity=1, popularity_month=1, ) self.f5.save() self.f6 = Film( type=1, permalink="raiders-of-the-lost-ark", imdb_code=116, status=1, version=1, release_year=1981, title="Raiders of the Lost Ark", popularity=1, popularity_month=1, ) self.f6.save() self.f7 = Film( type=1, permalink="the-alien", imdb_code=117, status=1, version=1, release_year=1979, title="The Alien", popularity=1, popularity_month=1, ) self.f7.save() self.f8 = Film( type=1, permalink="terminator-2-judgment-day", imdb_code=118, status=1, version=1, release_year=1991, title="Terminator 2: Judgment Day", popularity=1, popularity_month=1, ) self.f8.save() self.f9 = Film( type=1, permalink="przypadek", imdb_code=119, status=1, version=1, release_year=1999, title="Przypadek", popularity=20, popularity_month=10, ) self.f9.save() self.f10 = Film( type=1, permalink="wrestler", imdb_code=120, status=1, version=1, release_year=2008, title="Wrestler", popularity=10, popularity_month=1, ) self.f10.save() self.f11 = Film( type=1, permalink="american-history-x", imdb_code=121, status=1, version=1, release_year=1998, title="American History X", popularity=1, popularity_month=1, ) self.f11.save() self.f12 = Film( type=1, permalink="the-big-lebowski", imdb_code=122, status=1, version=1, release_year=1998, title="The Big Lebowski", popularity=1, popularity_month=1, ) self.f12.save() self.f13 = Film( type=1, permalink="the-lord-of-the-rings-the-fellowship-of-the-ring", imdb_code=123, status=1, version=1, release_year=2001, title="The Lord of the Rings: The Fellowship of the Ring", popularity=1, popularity_month=1, ) self.f13.save() self.f14 = Film( type=1, permalink="raiders-of-the-lost-ark", imdb_code=124, status=1, version=1, release_year=1981, title="Raiders of the Lost Ark", popularity=1, popularity_month=1, ) self.f14.save() self.f15 = Film( type=1, permalink="the-alien", imdb_code=125, status=1, version=1, release_year=1979, title="The Alien", popularity=1, popularity_month=1, ) self.f15.save() self.f16 = Film( type=1, permalink="przypadek", imdb_code=126, status=1, version=1, release_year=1999, title="Przypadek", popularity=20, popularity_month=10, ) self.f16.save() self.f17 = Film( type=1, permalink="wrestler", imdb_code=127, status=1, version=1, release_year=2008, title="Wrestler", popularity=10, popularity_month=1, ) self.f17.save() self.f18 = Film( type=1, permalink="american-history-x", imdb_code=128, status=1, version=1, release_year=1998, title="American History X", popularity=1, popularity_month=1, ) self.f18.save() self.f19 = Film( type=1, permalink="the-big-lebowski", imdb_code=129, status=1, version=1, release_year=1998, title="The Big Lebowski", popularity=1, popularity_month=1, ) self.f19.save() self.f20 = Film( type=1, permalink="the-lord-of-the-rings-the-fellowship-of-the-ring", imdb_code=130, status=1, version=1, release_year=2001, title="The Lord of the Rings: The Fellowship of the Ring", popularity=1, popularity_month=1, ) self.f20.save() self.f21 = Film( type=1, permalink="raiders-of-the-lost-ark", imdb_code=131, status=1, version=1, release_year=1981, title="Raiders of the Lost Ark", popularity=1, popularity_month=1, ) self.f21.save() self.f22 = Film( type=1, permalink="the-alien", imdb_code=132, status=1, version=1, release_year=1979, title="The Alien", popularity=1, popularity_month=1, ) self.f22.save() self.f23 = Film( type=1, permalink="terminator-2-judgment-day", imdb_code=133, status=1, version=1, release_year=1991, title="Terminator 2: Judgment Day", popularity=1, popularity_month=1, ) self.f23.save() self.f24 = Film( type=1, permalink="przypadek", imdb_code=134, status=1, version=1, release_year=1999, title="Przypadek", popularity=20, popularity_month=10, ) self.f24.save() self.f25 = Film( type=1, permalink="wrestler", imdb_code=135, status=1, version=1, release_year=2008, title="Wrestler", popularity=10, popularity_month=1, ) self.f25.save() self.f26 = Film( type=1, permalink="american-history-x", imdb_code=136, status=1, version=1, release_year=1998, title="American History X", popularity=1, popularity_month=1, ) self.f26.save() self.f27 = Film( type=1, permalink="the-big-lebowski", imdb_code=137, status=1, version=1, release_year=1998, title="The Big Lebowski", popularity=1, popularity_month=1, ) self.f27.save() self.f28 = Film( type=1, permalink="the-lord-of-the-rings-the-fellowship-of-the-ring", imdb_code=138, status=1, version=1, release_year=2001, title="The Lord of the Rings: The Fellowship of the Ring", popularity=1, popularity_month=1, ) self.f28.save() self.f29 = Film( type=1, permalink="raiders-of-the-lost-ark", imdb_code=139, status=1, version=1, release_year=1981, title="Raiders of the Lost Ark", popularity=1, popularity_month=1, ) self.f29.save() self.f30 = Film( type=1, permalink="the-alien", imdb_code=140, status=1, version=1, release_year=1979, title="The Alien", popularity=1, popularity_month=1, ) self.f30.save() self.f31 = AddedFilm( title="Added film part 1", localized_title="Added film PL", release_year=2010, user=self.u1 ) self.f31.save() self.f31.directors.add(self.p1) self.f31.save() AddedCharacter.objects.create(added_film=self.f31, person=self.p3, character="Jack Mort") self.f31.accept(self.u2) self.f32 = AddedFilm( title="Added film part 2", localized_title="Added film PL", release_year=2010, user=self.u1 ) self.f32.save() self.f32.directors.add(self.p2) self.f32.save() AddedCharacter.objects.create(added_film=self.f32, person=self.p3, character="Jack Mort") self.f32.accept(self.u2) # tagging self.f1.save_tags("comedy drama horror animation mystery") self.f2.save_tags("comedy sci-fi thriller series") self.f3.save_tags("comedy") self.f4.save_tags("sci-fi") self.f5.save_tags("horror") self.f6.save_tags("thriller") self.f7.save_tags("drama") self.f8.save_tags("series") self.f9.save_tags("sci-fi") self.f10.save_tags("fantasy") self.f11.save_tags("mystery") self.f12.save_tags("action") self.f13.save_tags("adventure") self.f14.save_tags("animation") self.f15.save_tags("family") self.f16.save_tags("thriller") self.f17.save_tags("drama") self.f18.save_tags("series") self.f19.save_tags("sci-fi") self.f20.save_tags("fantasy") self.f21.save_tags("comedy") self.f22.save_tags("animation") self.f23.save_tags("comedy") self.f24.save_tags("sci-fi") self.f25.save_tags("horror") self.f26.save_tags("thriller") self.f27.save_tags("drama") self.f28.save_tags("series") self.f29.save_tags("sci-fi") self.f30.save_tags("fantasy") # First user ratings save_rating(self.f1, self.u1, 1) save_rating(self.f2, self.u1, 2) save_rating(self.f3, self.u1, 3) save_rating(self.f4, self.u1, 4) save_rating(self.f5, self.u1, 5) save_rating(self.f6, self.u1, 6) save_rating(self.f7, self.u1, 7) save_rating(self.f8, self.u1, 8) save_rating(self.f9, self.u1, 9) save_rating(self.f10, self.u1, 10) save_rating(self.f11, self.u1, 1) save_rating(self.f12, self.u1, 2) save_rating(self.f13, self.u1, 3) save_rating(self.f14, self.u1, 4) save_rating(self.f15, self.u1, 5) save_rating(self.f16, self.u1, 6) save_rating(self.f17, self.u1, 7) save_rating(self.f18, self.u1, 8) save_rating(self.f19, self.u1, 9) save_rating(self.f20, self.u1, 10) save_rating(self.f21, self.u1, 1) save_rating(self.f22, self.u1, 2) save_rating(self.f23, self.u1, 3) save_rating(self.f24, self.u1, 4) save_rating(self.f25, self.u1, 5) save_rating(self.f26, self.u1, 6) save_rating(self.f27, self.u1, 7) save_rating(self.f28, self.u1, 8) save_rating(self.f29, self.u1, 9) save_rating(self.f30, self.u1, 10) # Second user ratings - more than minimal common films requirement (15) save_rating(self.f1, self.u2, 1) save_rating(self.f2, self.u2, 2) save_rating(self.f3, self.u2, 3) save_rating(self.f4, self.u2, 4) save_rating(self.f5, self.u2, 5) save_rating(self.f6, self.u2, 6) save_rating(self.f7, self.u2, 7) save_rating(self.f8, self.u2, 8) save_rating(self.f9, self.u2, 9) save_rating(self.f10, self.u2, 10) save_rating(self.f11, self.u2, 1) # save_rating(self.f12, self.u2, 2) save_rating(self.f13, self.u2, 3) # save_rating(self.f14, self.u2, 4) save_rating(self.f15, self.u2, 5) # save_rating(self.f16, self.u2, 6) save_rating(self.f17, self.u2, 7) # save_rating(self.f18, self.u2, 8) save_rating(self.f19, self.u2, 9) # save_rating(self.f20, self.u2, 10) save_rating(self.f21, self.u2, 1) # save_rating(self.f22, self.u2, 2) save_rating(self.f23, self.u2, 3) # save_rating(self.f24, self.u2, 4) save_rating(self.f25, self.u2, 5) # save_rating(self.f26, self.u2, 6) save_rating(self.f27, self.u2, 7) # save_rating(self.f28, self.u2, 8) save_rating(self.f29, self.u2, 9) # save_rating(self.f30, self.u2, 10) # Third user ratings - equal with minimal common films requirement (15) # save_rating(self.f1, self.u3, 1) # save_rating(self.f2, self.u3, 2) # save_rating(self.f3, self.u3, 3) # save_rating(self.f4, self.u3, 4) # save_rating(self.f5, self.u3, 5) # save_rating(self.f6, self.u3, 6) # save_rating(self.f7, self.u3, 7) # save_rating(self.f8, self.u3, 8) # save_rating(self.f9, self.u3, 9) # save_rating(self.f10, self.u3, 10) # save_rating(self.f11, self.u3, 1) # save_rating(self.f12, self.u3, 2) # save_rating(self.f13, self.u3, 3) # save_rating(self.f14, self.u3, 4) # save_rating(self.f15, self.u3, 5) save_rating(self.f16, self.u3, 6) save_rating(self.f17, self.u3, 7) save_rating(self.f18, self.u3, 8) save_rating(self.f19, self.u3, 9) save_rating(self.f20, self.u3, 10) save_rating(self.f21, self.u3, 1) save_rating(self.f22, self.u3, 2) save_rating(self.f23, self.u3, 3) save_rating(self.f24, self.u3, 4) save_rating(self.f25, self.u3, 5) save_rating(self.f26, self.u3, 6) save_rating(self.f27, self.u3, 7) save_rating(self.f28, self.u3, 8) save_rating(self.f29, self.u3, 9) save_rating(self.f30, self.u3, 10) # Fourth user ratings - less than minimal films requirement # save_rating(self.f1, self.u4, 1) # save_rating(self.f2, self.u4, 2) # save_rating(self.f3, self.u4, 3) # save_rating(self.f4, self.u4, 4) # save_rating(self.f5, self.u4, 5) # save_rating(self.f6, self.u4, 6) # save_rating(self.f7, self.u4, 7) # save_rating(self.f8, self.u4, 8) # save_rating(self.f9, self.u4, 9) # save_rating(self.f10, self.u4, 10) # save_rating(self.f11, self.u4, 1) # save_rating(self.f12, self.u4, 2) # save_rating(self.f13, self.u4, 3) # save_rating(self.f14, self.u4, 4) # save_rating(self.f15, self.u4, 5) # save_rating(self.f16, self.u4, 6) # save_rating(self.f17, self.u4, 7) # save_rating(self.f18, self.u4, 8) # save_rating(self.f19, self.u4, 9) # save_rating(self.f20, self.u4, 10) save_rating(self.f21, self.u4, 1) save_rating(self.f22, self.u4, 2) save_rating(self.f23, self.u4, 3) save_rating(self.f24, self.u4, 4) save_rating(self.f25, self.u4, 5) save_rating(self.f26, self.u4, 6) save_rating(self.f27, self.u4, 7) save_rating(self.f28, self.u4, 8) save_rating(self.f29, self.u4, 9) save_rating(self.f30, self.u4, 10) # Fifth user ratings - the same films rated (1st and 5th user) but different # ratings # save_rating(self.f1, self.u5, 10) # save_rating(self.f2, self.u5, 9) # save_rating(self.f3, self.u5, 8) # save_rating(self.f4, self.u5, 7) # save_rating(self.f5, self.u5, 6) # save_rating(self.f6, self.u5, 5) # save_rating(self.f7, self.u5, 4) # save_rating(self.f8, self.u5, 3) # save_rating(self.f9, self.u5, 2) # save_rating(self.f10, self.u5, 1) # save_rating(self.f11, self.u5, 10) # save_rating(self.f12, self.u5, 9) # save_rating(self.f13, self.u5, 8) # save_rating(self.f14, self.u5, 7) # save_rating(self.f15, self.u5, 6) # save_rating(self.f16, self.u5, 5) # save_rating(self.f17, self.u5, 4) # save_rating(self.f18, self.u5, 3) # save_rating(self.f19, self.u5, 2) # save_rating(self.f20, self.u5, 1) # save_rating(self.f21, self.u5, 10) # save_rating(self.f22, self.u5, 9) # save_rating(self.f23, self.u5, 8) # save_rating(self.f24, self.u5, 7) # save_rating(self.f25, self.u5, 6) # save_rating(self.f26, self.u5, 5) # save_rating(self.f27, self.u5, 4) # save_rating(self.f28, self.u5, 3) # save_rating(self.f29, self.u5, 2) # save_rating(self.f30, self.u5, 1) # Sixth user ratings - the same films rated (1st and 5th user) but different # ratings save_rating(self.f1, self.u6, 10) save_rating(self.f2, self.u6, 10) save_rating(self.f3, self.u6, 10) save_rating(self.f4, self.u6, 10) save_rating(self.f5, self.u6, 10) save_rating(self.f6, self.u6, 10) save_rating(self.f7, self.u6, 10) save_rating(self.f8, self.u6, 10) save_rating(self.f9, self.u6, 10) save_rating(self.f10, self.u6, 10) save_rating(self.f11, self.u6, 10) save_rating(self.f12, self.u6, 10) save_rating(self.f13, self.u6, 10) save_rating(self.f14, self.u6, 10) save_rating(self.f15, self.u6, 10) save_rating(self.f16, self.u6, 10) save_rating(self.f17, self.u6, 10) save_rating(self.f18, self.u6, 10) save_rating(self.f19, self.u6, 10) save_rating(self.f20, self.u6, 10) save_rating(self.f21, self.u6, 10) save_rating(self.f22, self.u6, 10) save_rating(self.f23, self.u6, 10) save_rating(self.f24, self.u6, 10) save_rating(self.f25, self.u6, 10) save_rating(self.f26, self.u6, 10) save_rating(self.f27, self.u6, 10) save_rating(self.f28, self.u6, 10) save_rating(self.f29, self.u6, 10) save_rating(self.f30, self.u6, 10) @unittest.skipIf(not is_postgres, "sqlite is not supported yet") def test_get_recently_popular_films_query(self): print "Test get recently popular films query" """ Test for query which gets the most popular films for the rating machine. First it should return all films, then we rate one and in the second call it should only retrieve the other film. """ recom_helper = RecomHelper() film_helper = FilmHelper() u1_result = recom_helper.get_recently_popular_films_query(self.u1.id) self.assertEquals(len(u1_result), 2) u2_result = recom_helper.get_recently_popular_films_query(self.u2.id) self.assertEquals(len(u2_result), 12) film_with_director_and_actor = Film.objects.filter(title__startswith="Added film part 1") related_directors = film_helper.get_film_directors(film_with_director_and_actor[0]) related_characters = film_helper.get_film_actors(film_with_director_and_actor[0]) related_actors = [] for character in related_characters: actor = character.person related_actors.append(actor) POST = {} # TODO check why it starts breaking (form invalid) when form_id is set # POST['form_id'] = '1' POST["rating"] = "6" POST["object_id"] = str(self.f12.parent.id) POST["form_type"] = str(Rating.TYPE_FILM) POST["cancel_rating"] = "0" rating_form = RatingForm(POST) if rating_form.is_valid(): rating_helper.add_edit_rating(rating_form, self.u2) else: print "RATING FORM INVALID!" result = recom_helper.get_recently_popular_films_query(self.u2.id) self.assertEquals(len(result), 11) # test filtering result = recom_helper.get_recently_popular_films_query(self.u5.id) self.assertEquals(len(result), 32) result = recom_helper.get_recently_popular_films_query(self.u5.id, year_from="1990") self.assertEquals(len(result), 24) result = recom_helper.get_recently_popular_films_query(self.u5.id, year_to="2000") self.assertEquals(len(result), 22) result = recom_helper.get_recently_popular_films_query(self.u5.id, year_from="1990", year_to="2000") self.assertEquals(len(result), 14) result = recom_helper.get_recently_popular_films_query(self.u5.id, popularity="10") self.assertEquals(len(result), 8) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from="1990", year_to="2000", popularity="10" ) self.assertEquals(len(result), 4) rated_films = [self.f1.id, self.f3.id, self.f5.id, self.f7.id, self.f9.id] result = recom_helper.get_recently_popular_films_query(self.u5.id, rated_films=rated_films) self.assertEquals(len(result), 27) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from="1990", year_to="2000", rated_films=rated_films, popularity="10" ) self.assertEquals(len(result), 2) result = recom_helper.get_recently_popular_films_query(self.u5.id, related_director=related_directors) self.assertEquals(len(result), 1) result = recom_helper.get_recently_popular_films_query(self.u5.id, related_actor=related_actors) self.assertEquals(len(result), 2) result = recom_helper.get_recently_popular_films_query( self.u5.id, related_director=related_directors, related_actor=related_actors ) self.assertEquals(len(result), 1) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from="1990", year_to="2011", related_director=related_directors, related_actor=related_actors, ) self.assertEquals(len(result), 1) @unittest.skipIf(not is_postgres, "postgres dependend") def test_get_best_psi_films_queryset_alg2(self): """ Test for query that retrieves top recommendations. First it should return all films, then we rate one and in the second call it should only retrieve the other film. """ recom_helper = RecomHelper() film_helper = FilmHelper() # no recommendations yet, the result should be 0 result = recom_helper.get_best_psi_films_queryset_alg2(self.u4.id) self.assertEquals(len(result), 0) # simulate generating recommendations (for all films) and test again, it should retrieve all films r1 = Recommendation() r1.guess_rating_alg2 = 7 r1.film = self.f19 r1.user = self.u4 r1.save() r2 = Recommendation() r2.guess_rating_alg2 = 8 r2.film = self.f20 r2.user = self.u4 r2.save() result = recom_helper.get_best_psi_films_queryset_alg2(self.u4.id) self.assertEquals(len(result), 2) # rate one film, it should be removed from the list POST = {} # TODO check why it starts breaking (form invalid) when form_id is set # POST['form_id'] = '1' POST["rating"] = "6" POST["object_id"] = str(self.f20.parent.id) POST["form_type"] = str(Rating.TYPE_FILM) POST["cancel_rating"] = "0" rating_form = RatingForm(POST) if rating_form.is_valid(): rating_helper.add_edit_rating(rating_form, self.u4) else: print "RATING FORM INVALID!" result = recom_helper.get_recently_popular_films_query(self.u4.id) self.assertEquals(len(result), 21) def test_get_best_tci_users(self): """ Test for query that retrieves top users (based on common taste). """ do_create_comparators() recom_helper = RecomHelper() result = recom_helper.get_best_tci_users(self.u1) self.assertEquals(len(result), 3) def test_enrich_query_with_tags(self): print "Test enrich query with tags" recom_helper = RecomHelper() film_helper = FilmHelper() comedies = recom_helper.get_films_for_tag("comedy") scifis = recom_helper.get_films_for_tag("sci-fi") horrors = recom_helper.get_films_for_tag("horror") thrillers = recom_helper.get_films_for_tag("thriller") dramas = recom_helper.get_films_for_tag("drama") fantasies = recom_helper.get_films_for_tag("fantasy") mysteries = recom_helper.get_films_for_tag("mystery") animations = recom_helper.get_films_for_tag("animation") series = recom_helper.get_films_for_tag("series") self.assertEquals(len(comedies), 5) self.assertEquals(len(scifis), 6) self.assertEquals(len(horrors), 3) self.assertEquals(len(thrillers), 4) self.assertEquals(len(dramas), 4) self.assertEquals(len(fantasies), 3) self.assertEquals(len(mysteries), 2) self.assertEquals(len(animations), 3) self.assertEquals(len(series), 4) def test_get_all_ratings(self): recom_helper = RecomHelper() film_helper = FilmHelper() film_with_director_and_actor = Film.objects.filter(title__startswith="Added film part 2") related_directors = film_helper.get_film_directors(film_with_director_and_actor[0]) related_characters = film_helper.get_film_actors(film_with_director_and_actor[0]) related_actors = [] for character in related_characters: actor = character.person related_actors.append(actor) non_rated_films = Film.objects.filter(rating__isnull=True, title__startswith="Added") POST = {} # POST['form_id'] = '1' POST["rating"] = "6" POST["object_id"] = str(non_rated_films[1].parent.id) POST["form_type"] = str(Rating.TYPE_FILM) POST["cancel_rating"] = "0" rating_form = RatingForm(POST) if rating_form.is_valid(): rating_helper.add_edit_rating(rating_form, self.u1) else: print "RATING FORM INVALID!" all_ratings = recom_helper.get_all_ratings(self.u1.id) self.assertEquals(len(all_ratings), 31) director_ratings = recom_helper.get_all_ratings(self.u1.id, related_director=related_directors) self.assertEquals(len(director_ratings), 1) actor_ratings = recom_helper.get_all_ratings(self.u1.id, related_actor=related_actors) self.assertEquals(len(actor_ratings), 1) from_ratings = recom_helper.get_all_ratings(self.u1.id, year_from=1990) self.assertEquals(len(from_ratings), 23) to_ratings = recom_helper.get_all_ratings(self.u1.id, year_to=2000) self.assertEquals(len(to_ratings), 22) popularity_ratings = recom_helper.get_all_ratings(self.u1.id, popularity=5) self.assertEquals(len(popularity_ratings), 8) tag_ratings = recom_helper.get_all_ratings(self.u1.id, tags="comedy") self.assertEquals(len(tag_ratings), 5) def test_cache_count_ratings(self): recom_helper = RecomHelper() ratings_count = recom_helper.count_ratings(self.u3.id) self.assertEquals(ratings_count, 15) save_rating(self.f1, self.u3, 1) ratings_count = recom_helper.count_ratings(self.u3.id) self.assertEquals(ratings_count, 16) def tearDown(self): User.objects.all().delete() Object.objects.all().delete() Film.objects.all().delete() FilmLog.objects.all().delete() Rating.objects.all().delete() Recommendation.objects.all().delete() Person.objects.all().delete() AddedCharacter.objects.all().delete() AddedFilm.objects.all().delete()
class QueriesTestCase(TestCase): def setUp(self): User.objects.all().delete() Object.objects.all().delete() Film.objects.all().delete() FilmLog.objects.all().delete() Rating.objects.all().delete() Recommendation.objects.all().delete() Person.objects.all().delete() AddedCharacter.objects.all().delete() AddedFilm.objects.all().delete() # set up users self.u1 = User(username='******', email='*****@*****.**') self.u1.save() self.u2 = User.objects.create_user("root", "*****@*****.**", "root") self.u2.user_permissions.add( Permission.objects.get(codename="can_accept_added_films")) self.u2.save() self.u3 = User(username='******', email='*****@*****.**') self.u3.save() self.u4 = User(username='******', email='*****@*****.**') self.u4.save() self.u5 = User(username='******', email='*****@*****.**') self.u5.save() self.u6 = User(username='******', email='*****@*****.**') self.u6.save() # some persons self.p1 = Person(name="Clint", surname="Eastwood", imdb_code=None, type=Person.TYPE_PERSON) self.p1.save() self.p2 = Person(name="Sylvester", surname="Stallone", imdb_code=None, type=Person.TYPE_PERSON) self.p2.save() self.p3 = Person(name="Jack", surname="Mort", imdb_code=None, type=Person.TYPE_PERSON) self.p3.save() # set up films self.f1 = Film(type=1, permalink='przypadek', imdb_code=111, status=1, version=1, release_year=1999, title='Przypadek', popularity=20, popularity_month=10) self.f1.save() self.f2 = Film(type=1, permalink='wrestler', imdb_code=112, status=1, version=1, release_year=2008, title='Wrestler', popularity=10, popularity_month=1) self.f2.save() self.f3 = Film(type=1, permalink='american-history-x', imdb_code=113, status=1, version=1, release_year=1998, title='American History X', popularity=1, popularity_month=1) self.f3.save() self.f4 = Film(type=1, permalink='the-big-lebowski', imdb_code=114, status=1, version=1, release_year=1998, title='The Big Lebowski', popularity=1, popularity_month=1) self.f4.save() self.f5 = Film( type=1, permalink='the-lord-of-the-rings-the-fellowship-of-the-ring', imdb_code=115, status=1, version=1, release_year=2001, title='The Lord of the Rings: The Fellowship of the Ring', popularity=1, popularity_month=1) self.f5.save() self.f6 = Film(type=1, permalink='raiders-of-the-lost-ark', imdb_code=116, status=1, version=1, release_year=1981, title='Raiders of the Lost Ark', popularity=1, popularity_month=1) self.f6.save() self.f7 = Film(type=1, permalink='the-alien', imdb_code=117, status=1, version=1, release_year=1979, title='The Alien', popularity=1, popularity_month=1) self.f7.save() self.f8 = Film(type=1, permalink='terminator-2-judgment-day', imdb_code=118, status=1, version=1, release_year=1991, title='Terminator 2: Judgment Day', popularity=1, popularity_month=1) self.f8.save() self.f9 = Film(type=1, permalink='przypadek', imdb_code=119, status=1, version=1, release_year=1999, title='Przypadek', popularity=20, popularity_month=10) self.f9.save() self.f10 = Film(type=1, permalink='wrestler', imdb_code=120, status=1, version=1, release_year=2008, title='Wrestler', popularity=10, popularity_month=1) self.f10.save() self.f11 = Film(type=1, permalink='american-history-x', imdb_code=121, status=1, version=1, release_year=1998, title='American History X', popularity=1, popularity_month=1) self.f11.save() self.f12 = Film(type=1, permalink='the-big-lebowski', imdb_code=122, status=1, version=1, release_year=1998, title='The Big Lebowski', popularity=1, popularity_month=1) self.f12.save() self.f13 = Film( type=1, permalink='the-lord-of-the-rings-the-fellowship-of-the-ring', imdb_code=123, status=1, version=1, release_year=2001, title='The Lord of the Rings: The Fellowship of the Ring', popularity=1, popularity_month=1) self.f13.save() self.f14 = Film(type=1, permalink='raiders-of-the-lost-ark', imdb_code=124, status=1, version=1, release_year=1981, title='Raiders of the Lost Ark', popularity=1, popularity_month=1) self.f14.save() self.f15 = Film(type=1, permalink='the-alien', imdb_code=125, status=1, version=1, release_year=1979, title='The Alien', popularity=1, popularity_month=1) self.f15.save() self.f16 = Film(type=1, permalink='przypadek', imdb_code=126, status=1, version=1, release_year=1999, title='Przypadek', popularity=20, popularity_month=10) self.f16.save() self.f17 = Film(type=1, permalink='wrestler', imdb_code=127, status=1, version=1, release_year=2008, title='Wrestler', popularity=10, popularity_month=1) self.f17.save() self.f18 = Film(type=1, permalink='american-history-x', imdb_code=128, status=1, version=1, release_year=1998, title='American History X', popularity=1, popularity_month=1) self.f18.save() self.f19 = Film(type=1, permalink='the-big-lebowski', imdb_code=129, status=1, version=1, release_year=1998, title='The Big Lebowski', popularity=1, popularity_month=1) self.f19.save() self.f20 = Film( type=1, permalink='the-lord-of-the-rings-the-fellowship-of-the-ring', imdb_code=130, status=1, version=1, release_year=2001, title='The Lord of the Rings: The Fellowship of the Ring', popularity=1, popularity_month=1) self.f20.save() self.f21 = Film(type=1, permalink='raiders-of-the-lost-ark', imdb_code=131, status=1, version=1, release_year=1981, title='Raiders of the Lost Ark', popularity=1, popularity_month=1) self.f21.save() self.f22 = Film(type=1, permalink='the-alien', imdb_code=132, status=1, version=1, release_year=1979, title='The Alien', popularity=1, popularity_month=1) self.f22.save() self.f23 = Film(type=1, permalink='terminator-2-judgment-day', imdb_code=133, status=1, version=1, release_year=1991, title='Terminator 2: Judgment Day', popularity=1, popularity_month=1) self.f23.save() self.f24 = Film(type=1, permalink='przypadek', imdb_code=134, status=1, version=1, release_year=1999, title='Przypadek', popularity=20, popularity_month=10) self.f24.save() self.f25 = Film(type=1, permalink='wrestler', imdb_code=135, status=1, version=1, release_year=2008, title='Wrestler', popularity=10, popularity_month=1) self.f25.save() self.f26 = Film(type=1, permalink='american-history-x', imdb_code=136, status=1, version=1, release_year=1998, title='American History X', popularity=1, popularity_month=1) self.f26.save() self.f27 = Film(type=1, permalink='the-big-lebowski', imdb_code=137, status=1, version=1, release_year=1998, title='The Big Lebowski', popularity=1, popularity_month=1) self.f27.save() self.f28 = Film( type=1, permalink='the-lord-of-the-rings-the-fellowship-of-the-ring', imdb_code=138, status=1, version=1, release_year=2001, title='The Lord of the Rings: The Fellowship of the Ring', popularity=1, popularity_month=1) self.f28.save() self.f29 = Film(type=1, permalink='raiders-of-the-lost-ark', imdb_code=139, status=1, version=1, release_year=1981, title='Raiders of the Lost Ark', popularity=1, popularity_month=1) self.f29.save() self.f30 = Film(type=1, permalink='the-alien', imdb_code=140, status=1, version=1, release_year=1979, title='The Alien', popularity=1, popularity_month=1) self.f30.save() self.f31 = AddedFilm(title='Added film part 1', localized_title='Added film PL', release_year=2010, user=self.u1) self.f31.save() self.f31.directors.add(self.p1) self.f31.save() AddedCharacter.objects.create(added_film=self.f31, person=self.p3, character="Jack Mort") self.f31.accept(self.u2) self.f32 = AddedFilm(title='Added film part 2', localized_title='Added film PL', release_year=2010, user=self.u1) self.f32.save() self.f32.directors.add(self.p2) self.f32.save() AddedCharacter.objects.create(added_film=self.f32, person=self.p3, character="Jack Mort") self.f32.accept(self.u2) #tagging self.f1.save_tags('comedy drama horror animation mystery') self.f2.save_tags('comedy sci-fi thriller series') self.f3.save_tags('comedy') self.f4.save_tags('sci-fi') self.f5.save_tags('horror') self.f6.save_tags('thriller') self.f7.save_tags('drama') self.f8.save_tags('series') self.f9.save_tags('sci-fi') self.f10.save_tags('fantasy') self.f11.save_tags('mystery') self.f12.save_tags('action') self.f13.save_tags('adventure') self.f14.save_tags('animation') self.f15.save_tags('family') self.f16.save_tags('thriller') self.f17.save_tags('drama') self.f18.save_tags('series') self.f19.save_tags('sci-fi') self.f20.save_tags('fantasy') self.f21.save_tags('comedy') self.f22.save_tags('animation') self.f23.save_tags('comedy') self.f24.save_tags('sci-fi') self.f25.save_tags('horror') self.f26.save_tags('thriller') self.f27.save_tags('drama') self.f28.save_tags('series') self.f29.save_tags('sci-fi') self.f30.save_tags('fantasy') #First user ratings save_rating(self.f1, self.u1, 1) save_rating(self.f2, self.u1, 2) save_rating(self.f3, self.u1, 3) save_rating(self.f4, self.u1, 4) save_rating(self.f5, self.u1, 5) save_rating(self.f6, self.u1, 6) save_rating(self.f7, self.u1, 7) save_rating(self.f8, self.u1, 8) save_rating(self.f9, self.u1, 9) save_rating(self.f10, self.u1, 10) save_rating(self.f11, self.u1, 1) save_rating(self.f12, self.u1, 2) save_rating(self.f13, self.u1, 3) save_rating(self.f14, self.u1, 4) save_rating(self.f15, self.u1, 5) save_rating(self.f16, self.u1, 6) save_rating(self.f17, self.u1, 7) save_rating(self.f18, self.u1, 8) save_rating(self.f19, self.u1, 9) save_rating(self.f20, self.u1, 10) save_rating(self.f21, self.u1, 1) save_rating(self.f22, self.u1, 2) save_rating(self.f23, self.u1, 3) save_rating(self.f24, self.u1, 4) save_rating(self.f25, self.u1, 5) save_rating(self.f26, self.u1, 6) save_rating(self.f27, self.u1, 7) save_rating(self.f28, self.u1, 8) save_rating(self.f29, self.u1, 9) save_rating(self.f30, self.u1, 10) #Second user ratings - more than minimal common films requirement (15) save_rating(self.f1, self.u2, 1) save_rating(self.f2, self.u2, 2) save_rating(self.f3, self.u2, 3) save_rating(self.f4, self.u2, 4) save_rating(self.f5, self.u2, 5) save_rating(self.f6, self.u2, 6) save_rating(self.f7, self.u2, 7) save_rating(self.f8, self.u2, 8) save_rating(self.f9, self.u2, 9) save_rating(self.f10, self.u2, 10) save_rating(self.f11, self.u2, 1) #save_rating(self.f12, self.u2, 2) save_rating(self.f13, self.u2, 3) #save_rating(self.f14, self.u2, 4) save_rating(self.f15, self.u2, 5) #save_rating(self.f16, self.u2, 6) save_rating(self.f17, self.u2, 7) #save_rating(self.f18, self.u2, 8) save_rating(self.f19, self.u2, 9) #save_rating(self.f20, self.u2, 10) save_rating(self.f21, self.u2, 1) #save_rating(self.f22, self.u2, 2) save_rating(self.f23, self.u2, 3) #save_rating(self.f24, self.u2, 4) save_rating(self.f25, self.u2, 5) #save_rating(self.f26, self.u2, 6) save_rating(self.f27, self.u2, 7) #save_rating(self.f28, self.u2, 8) save_rating(self.f29, self.u2, 9) #save_rating(self.f30, self.u2, 10) # Third user ratings - equal with minimal common films requirement (15) #save_rating(self.f1, self.u3, 1) #save_rating(self.f2, self.u3, 2) #save_rating(self.f3, self.u3, 3) #save_rating(self.f4, self.u3, 4) #save_rating(self.f5, self.u3, 5) #save_rating(self.f6, self.u3, 6) #save_rating(self.f7, self.u3, 7) #save_rating(self.f8, self.u3, 8) #save_rating(self.f9, self.u3, 9) #save_rating(self.f10, self.u3, 10) #save_rating(self.f11, self.u3, 1) #save_rating(self.f12, self.u3, 2) #save_rating(self.f13, self.u3, 3) #save_rating(self.f14, self.u3, 4) #save_rating(self.f15, self.u3, 5) save_rating(self.f16, self.u3, 6) save_rating(self.f17, self.u3, 7) save_rating(self.f18, self.u3, 8) save_rating(self.f19, self.u3, 9) save_rating(self.f20, self.u3, 10) save_rating(self.f21, self.u3, 1) save_rating(self.f22, self.u3, 2) save_rating(self.f23, self.u3, 3) save_rating(self.f24, self.u3, 4) save_rating(self.f25, self.u3, 5) save_rating(self.f26, self.u3, 6) save_rating(self.f27, self.u3, 7) save_rating(self.f28, self.u3, 8) save_rating(self.f29, self.u3, 9) save_rating(self.f30, self.u3, 10) # Fourth user ratings - less than minimal films requirement #save_rating(self.f1, self.u4, 1) #save_rating(self.f2, self.u4, 2) #save_rating(self.f3, self.u4, 3) #save_rating(self.f4, self.u4, 4) #save_rating(self.f5, self.u4, 5) #save_rating(self.f6, self.u4, 6) #save_rating(self.f7, self.u4, 7) #save_rating(self.f8, self.u4, 8) #save_rating(self.f9, self.u4, 9) #save_rating(self.f10, self.u4, 10) #save_rating(self.f11, self.u4, 1) #save_rating(self.f12, self.u4, 2) #save_rating(self.f13, self.u4, 3) #save_rating(self.f14, self.u4, 4) #save_rating(self.f15, self.u4, 5) #save_rating(self.f16, self.u4, 6) #save_rating(self.f17, self.u4, 7) #save_rating(self.f18, self.u4, 8) #save_rating(self.f19, self.u4, 9) #save_rating(self.f20, self.u4, 10) save_rating(self.f21, self.u4, 1) save_rating(self.f22, self.u4, 2) save_rating(self.f23, self.u4, 3) save_rating(self.f24, self.u4, 4) save_rating(self.f25, self.u4, 5) save_rating(self.f26, self.u4, 6) save_rating(self.f27, self.u4, 7) save_rating(self.f28, self.u4, 8) save_rating(self.f29, self.u4, 9) save_rating(self.f30, self.u4, 10) # Fifth user ratings - the same films rated (1st and 5th user) but different # ratings #save_rating(self.f1, self.u5, 10) #save_rating(self.f2, self.u5, 9) #save_rating(self.f3, self.u5, 8) #save_rating(self.f4, self.u5, 7) #save_rating(self.f5, self.u5, 6) #save_rating(self.f6, self.u5, 5) #save_rating(self.f7, self.u5, 4) #save_rating(self.f8, self.u5, 3) #save_rating(self.f9, self.u5, 2) #save_rating(self.f10, self.u5, 1) #save_rating(self.f11, self.u5, 10) #save_rating(self.f12, self.u5, 9) #save_rating(self.f13, self.u5, 8) #save_rating(self.f14, self.u5, 7) #save_rating(self.f15, self.u5, 6) #save_rating(self.f16, self.u5, 5) #save_rating(self.f17, self.u5, 4) #save_rating(self.f18, self.u5, 3) #save_rating(self.f19, self.u5, 2) #save_rating(self.f20, self.u5, 1) #save_rating(self.f21, self.u5, 10) #save_rating(self.f22, self.u5, 9) #save_rating(self.f23, self.u5, 8) #save_rating(self.f24, self.u5, 7) #save_rating(self.f25, self.u5, 6) #save_rating(self.f26, self.u5, 5) #save_rating(self.f27, self.u5, 4) #save_rating(self.f28, self.u5, 3) #save_rating(self.f29, self.u5, 2) #save_rating(self.f30, self.u5, 1) # Sixth user ratings - the same films rated (1st and 5th user) but different # ratings save_rating(self.f1, self.u6, 10) save_rating(self.f2, self.u6, 10) save_rating(self.f3, self.u6, 10) save_rating(self.f4, self.u6, 10) save_rating(self.f5, self.u6, 10) save_rating(self.f6, self.u6, 10) save_rating(self.f7, self.u6, 10) save_rating(self.f8, self.u6, 10) save_rating(self.f9, self.u6, 10) save_rating(self.f10, self.u6, 10) save_rating(self.f11, self.u6, 10) save_rating(self.f12, self.u6, 10) save_rating(self.f13, self.u6, 10) save_rating(self.f14, self.u6, 10) save_rating(self.f15, self.u6, 10) save_rating(self.f16, self.u6, 10) save_rating(self.f17, self.u6, 10) save_rating(self.f18, self.u6, 10) save_rating(self.f19, self.u6, 10) save_rating(self.f20, self.u6, 10) save_rating(self.f21, self.u6, 10) save_rating(self.f22, self.u6, 10) save_rating(self.f23, self.u6, 10) save_rating(self.f24, self.u6, 10) save_rating(self.f25, self.u6, 10) save_rating(self.f26, self.u6, 10) save_rating(self.f27, self.u6, 10) save_rating(self.f28, self.u6, 10) save_rating(self.f29, self.u6, 10) save_rating(self.f30, self.u6, 10) @unittest.skipIf(not is_postgres, "sqlite is not supported yet") def test_get_recently_popular_films_query(self): print "Test get recently popular films query" """ Test for query which gets the most popular films for the rating machine. First it should return all films, then we rate one and in the second call it should only retrieve the other film. """ recom_helper = RecomHelper() film_helper = FilmHelper() u1_result = recom_helper.get_recently_popular_films_query(self.u1.id) self.assertEquals(len(u1_result), 2) u2_result = recom_helper.get_recently_popular_films_query(self.u2.id) self.assertEquals(len(u2_result), 12) film_with_director_and_actor = Film.objects.filter( title__startswith="Added film part 1") related_directors = film_helper.get_film_directors( film_with_director_and_actor[0]) related_characters = film_helper.get_film_actors( film_with_director_and_actor[0]) related_actors = [] for character in related_characters: actor = character.person related_actors.append(actor) POST = {} # TODO check why it starts breaking (form invalid) when form_id is set #POST['form_id'] = '1' POST['rating'] = '6' POST['object_id'] = str(self.f12.parent.id) POST['form_type'] = str(Rating.TYPE_FILM) POST['cancel_rating'] = '0' rating_form = RatingForm(POST) if rating_form.is_valid(): rating_helper.add_edit_rating(rating_form, self.u2) else: print "RATING FORM INVALID!" result = recom_helper.get_recently_popular_films_query(self.u2.id) self.assertEquals(len(result), 11) # test filtering result = recom_helper.get_recently_popular_films_query(self.u5.id) self.assertEquals(len(result), 32) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from='1990') self.assertEquals(len(result), 24) result = recom_helper.get_recently_popular_films_query(self.u5.id, year_to='2000') self.assertEquals(len(result), 22) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from='1990', year_to='2000') self.assertEquals(len(result), 14) result = recom_helper.get_recently_popular_films_query(self.u5.id, popularity='10') self.assertEquals(len(result), 8) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from='1990', year_to='2000', popularity='10') self.assertEquals(len(result), 4) rated_films = [ self.f1.id, self.f3.id, self.f5.id, self.f7.id, self.f9.id ] result = recom_helper.get_recently_popular_films_query( self.u5.id, rated_films=rated_films) self.assertEquals(len(result), 27) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from='1990', year_to='2000', rated_films=rated_films, popularity='10') self.assertEquals(len(result), 2) result = recom_helper.get_recently_popular_films_query( self.u5.id, related_director=related_directors) self.assertEquals(len(result), 1) result = recom_helper.get_recently_popular_films_query( self.u5.id, related_actor=related_actors) self.assertEquals(len(result), 2) result = recom_helper.get_recently_popular_films_query( self.u5.id, related_director=related_directors, related_actor=related_actors) self.assertEquals(len(result), 1) result = recom_helper.get_recently_popular_films_query( self.u5.id, year_from='1990', year_to='2011', related_director=related_directors, related_actor=related_actors) self.assertEquals(len(result), 1) # @unittest.skipIf(not is_postgres, "postgres dependend") # def test_get_best_psi_films_queryset_alg2(self): # """ # Test for query that retrieves top recommendations. # First it should return all films, then we rate one and in the second call # it should only retrieve the other film. # """ # # recom_helper = RecomHelper() # film_helper = FilmHelper() # # # no recommendations yet, the result should be 0 # result = recom_helper.get_best_psi_films_queryset_alg2(self.u4.id) # self.assertEquals(len(result), 0) # # # simulate generating recommendations (for all films) and test again, it should retrieve all films # r1 = Recommendation() # r1.guess_rating_alg2 = 7 # r1.film = self.f19 # r1.user = self.u4 # r1.save() # r2 = Recommendation() # r2.guess_rating_alg2 = 8 # r2.film = self.f20 # r2.user = self.u4 # r2.save() # result = recom_helper.get_best_psi_films_queryset_alg2(self.u4.id) # self.assertEquals(len(result), 2) # # # rate one film, it should be removed from the list # POST = {} # # TODO check why it starts breaking (form invalid) when form_id is set # #POST['form_id'] = '1' # POST['rating'] = '6' # POST['object_id'] = str(self.f20.parent.id) # POST['form_type'] = str(Rating.TYPE_FILM) # POST['cancel_rating'] = '0' # rating_form = RatingForm(POST) # if rating_form.is_valid(): # rating_helper.add_edit_rating(rating_form, self.u4) # else: # print "RATING FORM INVALID!" # # result = recom_helper.get_recently_popular_films_query(self.u4.id) # self.assertEquals(len(result), 21) @unittest.skip("temporary disabled") def test_get_best_tci_users(self): """ Test for query that retrieves top users (based on common taste). """ do_create_comparators() recom_helper = RecomHelper() result = recom_helper.get_best_tci_users(self.u1) print "result -->", result self.assertEquals(len(result), 4) def test_enrich_query_with_tags(self): print "Test enrich query with tags" recom_helper = RecomHelper() film_helper = FilmHelper() comedies = recom_helper.get_films_for_tag('comedy') scifis = recom_helper.get_films_for_tag('sci-fi') horrors = recom_helper.get_films_for_tag('horror') thrillers = recom_helper.get_films_for_tag('thriller') dramas = recom_helper.get_films_for_tag('drama') fantasies = recom_helper.get_films_for_tag('fantasy') mysteries = recom_helper.get_films_for_tag('mystery') animations = recom_helper.get_films_for_tag('animation') series = recom_helper.get_films_for_tag('series') self.assertEquals(len(comedies), 5) self.assertEquals(len(scifis), 6) self.assertEquals(len(horrors), 3) self.assertEquals(len(thrillers), 4) self.assertEquals(len(dramas), 4) self.assertEquals(len(fantasies), 3) self.assertEquals(len(mysteries), 2) self.assertEquals(len(animations), 3) self.assertEquals(len(series), 4) def test_get_all_ratings(self): recom_helper = RecomHelper() film_helper = FilmHelper() film_with_director_and_actor = Film.objects.filter( title__startswith="Added film part 2") related_directors = film_helper.get_film_directors( film_with_director_and_actor[0]) related_characters = film_helper.get_film_actors( film_with_director_and_actor[0]) related_actors = [] for character in related_characters: actor = character.person related_actors.append(actor) non_rated_films = Film.objects.filter(rating__isnull=True, title__startswith="Added") POST = {} #POST['form_id'] = '1' POST['rating'] = '6' POST['object_id'] = str(non_rated_films[1].parent.id) POST['form_type'] = str(Rating.TYPE_FILM) POST['cancel_rating'] = '0' rating_form = RatingForm(POST) if rating_form.is_valid(): rating_helper.add_edit_rating(rating_form, self.u1) else: print "RATING FORM INVALID!" all_ratings = recom_helper.get_all_ratings(self.u1.id) self.assertEquals(len(all_ratings), 31) director_ratings = recom_helper.get_all_ratings( self.u1.id, related_director=related_directors) self.assertEquals(len(director_ratings), 1) actor_ratings = recom_helper.get_all_ratings( self.u1.id, related_actor=related_actors) self.assertEquals(len(actor_ratings), 1) from_ratings = recom_helper.get_all_ratings(self.u1.id, year_from=1990) self.assertEquals(len(from_ratings), 23) to_ratings = recom_helper.get_all_ratings(self.u1.id, year_to=2000) self.assertEquals(len(to_ratings), 22) popularity_ratings = recom_helper.get_all_ratings(self.u1.id, popularity=5) self.assertEquals(len(popularity_ratings), 8) tag_ratings = recom_helper.get_all_ratings(self.u1.id, tags='comedy') self.assertEquals(len(tag_ratings), 5) def test_cache_count_ratings(self): recom_helper = RecomHelper() ratings_count = recom_helper.count_ratings(self.u3.id) self.assertEquals(ratings_count, 15) save_rating(self.f1, self.u3, 1) ratings_count = recom_helper.count_ratings(self.u3.id) self.assertEquals(ratings_count, 16) def tearDown(self): User.objects.all().delete() Object.objects.all().delete() Film.objects.all().delete() FilmLog.objects.all().delete() Rating.objects.all().delete() Recommendation.objects.all().delete() Person.objects.all().delete() AddedCharacter.objects.all().delete() AddedFilm.objects.all().delete()