def test_delete_old_programmes(): france_3 = Chaines(id_chaine="france_3", nom="FRANCE 3") france_3.save() prog = Programmes( titre_informatif="Manon des sources", chaines_id=france_3.id, date_debut=make_aware(datetime.datetime.now() - timedelta(7)), date_fin=make_aware(datetime.datetime.now() - timedelta(8)), url="https://www.programme-tv.net/programme/autre/r1549568936-pause/", ) prog.save() prog_2 = Programmes( titre_informatif="Jean de Florette", chaines_id=france_3.id, date_debut=make_aware(datetime.datetime.now() + timedelta(8)), date_fin=make_aware(datetime.datetime.now() + timedelta(9)), ) prog_2.save() assert len(Programmes.objects.all()) == 2 assert Programmes.objects.all()[0].titre_informatif == "Manon des sources" call_command("delete_programmes") assert len(Programmes.objects.all()) == 1 assert Programmes.objects.all()[0].titre_informatif == "Jean de Florette"
def test_bad_package_name(db_feed, capsys): france5 = Chaines(id_chaine="47.api-tel.programme-tv.net", nom="FRANCE 5") france5.save() db_feed.populate("freeeeeeeeee") out, err = capsys.readouterr() assert (out == "You have to choose one of these selected packages: free," "sfr, bouygues or tnt\n")
def test_populate_package_bouygues(db_feed): arte = Chaines(id_chaine="7_test", nom="ARTE") arte.save() db_feed.populate("bouygues") bouquet = BouquetTv.objects.get(nom="bouygues") arte = Chaines.objects.get(nom="ARTE") bouquets_chaines = BouquetsChaines.objects.all() assert bouquet.nom == "bouygues" assert arte.bouquettv_set.all()[0].nom == "bouygues" assert bouquets_chaines[0].numero == 7
def test_populate_package_tnt(db_feed): france5 = Chaines(id_chaine="5_test", nom="FRANCE 5") france5.save() db_feed.populate("tnt") bouquet = BouquetTv.objects.get(nom="tnt") france5 = Chaines.objects.get(nom="FRANCE 5") bouquets_chaines = BouquetsChaines.objects.all() assert bouquet.nom == "tnt" assert france5.bouquettv_set.all()[0].nom == "tnt" assert bouquets_chaines[0].numero == 5
def test_populate_package_sfr(db_feed): france2 = Chaines(id_chaine="2_test", nom="FRANCE 2") france2.save() db_feed.populate("sfr") bouquet = BouquetTv.objects.get(nom="sfr") france2 = Chaines.objects.get(nom="FRANCE 2") bouquets_chaines = BouquetsChaines.objects.all() assert bouquet.nom == "sfr" assert france2.bouquettv_set.all()[0].nom == "sfr" assert bouquets_chaines[0].numero == 2
def test_populate_package_free(db_feed): tf1 = Chaines(id_chaine="1_test", nom="TF1") tf1.save() db_feed.populate("free") bouquet = BouquetTv.objects.get(nom="free") tf1 = Chaines.objects.get(nom="TF1") bouquets_chaines = BouquetsChaines.objects.all() assert bouquet.nom == "free" assert tf1.bouquettv_set.all()[0].nom == "free" assert bouquets_chaines[0].numero == 1
def setUp(self): self.client = Client() self.france_3 = Chaines(id_chaine="france_3", nom="FRANCE 3") self.france_3.save() user = User( username="******", first_name="Mell", email="*****@*****.**", password="******", ) user.save() self.recherche = Recherche( recherche="manon des sources", max_resultats=3, utilisateur_id=user.id, ) self.recherche.save() self.recherche.chaines.add(self.france_3.id) specific_search = RechercheSpecifique(recherche_id=self.recherche.id) specific_search.save() self.recherche_2 = Recherche( recherche="fleurette", max_resultats=3, utilisateur_id=user.id, ) self.recherche_2.save() self.recherche_2.chaines.add(self.france_3.id) specific_search = RechercheSpecifique(recherche_id=self.recherche_2.id) specific_search.save()
def test_search_programmes_with_a_recherche_field(db_feed): france_3 = Chaines(id_chaine="france_3", nom="FRANCE 3") france_3.save() user = User( username="******", first_name="Mell", email="*****@*****.**", password="******", ) user.save() recherche = Recherche( recherche="manon des sources", max_resultats=3, utilisateur_id=user.id, date_creation=make_aware(datetime.datetime.now()), ) recherche.save() recherche.chaines.add(france_3.id) specific_search = RechercheSpecifique(recherche_id=recherche.id) specific_search.save() prog = Programmes( titre_informatif="Manon des sources", chaines_id=france_3.id, date_debut=make_aware(datetime.datetime.now() + timedelta(7)), date_fin=make_aware(datetime.datetime.now() + timedelta(8)), ) prog.save() db_feed.search_progs() assert recherche.programmes.all()[0].id == prog.id
def populate(self, file): """Populate the db with the channels and programmes. The time sent by the teleloisirs API display 60mn instead of 1 hour and cannot be use by datetime hence the quick fix removing 1mn. Categories with '/' have been removed to simplify coding""" with open(file, "r") as broadcast: data = json.load(broadcast) for channel in data["channels"]: try: chan = Chaines( id_chaine=channel["id"], nom=channel["nom"], icon=channel.get("icon"), url=channel.get("url"), ) except KeyError: print("The channel could not be inserted in the DB") continue if len(Chaines.objects.filter(id_chaine=channel["id"])) == 0: self.save(chan) print(f"The channel {chan.nom} has been inserted in the DB") else: print( f"The channel {chan.nom} has already been inserted" "in the DB" ) for programme in data["programmes"]: try: chaine = Chaines.objects.get(id_chaine=programme["channel"]) except ObjectDoesNotExist: print( "The programme doesn't have a channel registered" "in the DB" ) continue date_d, date_f = programme.get("start", ""), programme.get( "stop", "" ) try: date_de = [ int(date_d[4:12][i : i + 2]) for i in range(0, 8, 2) ] date_de.insert(0, int(date_d[:4])) if date_de[4] == 60: date_de[4] = 59 date_deb = datetime( date_de[0], date_de[1], date_de[2], date_de[3], date_de[4] ) + timedelta(hours=1) date_deb = make_aware(date_deb) except (ValueError, TypeError): continue try: date_fi = [ int(date_f[4:12][i : i + 2]) for i in range(0, 8, 2) ] date_fi.insert(0, int(date_f[:4])) if date_fi[4] == 60: date_fi[4] = 59 date_fin = datetime( date_fi[0], date_fi[1], date_fi[2], date_fi[3], date_fi[4] ) + timedelta(hours=1) date_fin = make_aware(date_fin) except (ValueError, TypeError): continue date_realisation = programme.get("date") if date_realisation is not None: try: date_realisation = int(date_realisation) except ValueError: continue prog = Programmes( titre_informatif=programme.get("sub-title"), description=programme.get("desc"), date_realisation=date_realisation, icon=programme.get("icon"), url=programme.get("url"), public=programme.get("public"), aide_sourd=programme.get("audio_subtitles"), note=programme.get("note"), critique=programme.get("review"), date_debut=date_deb, date_fin=date_fin, chaines_id=chaine.id, ) try: self.save(prog) except (ValidationError, TypeError, ValueError, DataError): continue try: pro = Programmes.objects.get( date_debut=date_deb, date_fin=date_fin, chaines_id=chaine.id, ) except MultipleObjectsReturned: prog.delete() print("Programme already in the DB!") continue titles = programme.get("titles") if titles is not None: for title in titles: titre = Titres(programmes_id=pro.id, nom=title) self.save(titre) directors = programme.get("directors") if directors is not None: for director in directors: realisateur = Realisateur( programmes_id=pro.id, nom=director ) self.save(realisateur) writers = programme.get("writers") if writers is not None: for writer in writers: scenariste = Scenariste(programmes_id=pro.id, nom=writer) self.save(scenariste) actors = programme.get("actors") if actors is not None: for actor in actors: acteur = Acteurs( programmes_id=pro.id, nom=actor["actor"], role=actor.get("role"), ) self.save(acteur) episode_num = programme.get("episode-num") if episode_num is not None: try: episodes = re.split(r"\.", episode_num) serie = re.split("/", episodes[0])[0] episode = re.split("/", episodes[1])[0] partie = re.split("/", episodes[2])[0] if serie == "": serie = None else: serie = int(serie) if episode == "": episode = None else: episode = int(episode) if partie == "": partie = None else: partie = int(partie) except ValueError: continue series = Series( programmes_id=pro.id, serie=serie, episode=episode, partie=partie, ) self.save(series) composers = programme.get("composers") if composers is not None: for composer in composers: compositeur = Compositeurs( programmes_id=pro.id, nom=composer ) self.save(compositeur) categories = programme.get("categories") if categories is not None: for categorie in categories: if len(Categories.objects.filter(nom=categorie)) != 0: cat = Categories.objects.get(nom=categorie) cat.programmes.add(pro.id) elif ( categorie.find("/") == -1 and len(Categories.objects.filter(nom=categorie)) == 0 ): cat = Categories(nom=categorie) try: self.save(cat) cat.programmes.add(pro.id) print( f"The categorie {categorie} has been inserted" "in the DB." ) except (ValidationError, TypeError, ValueError): continue countries = programme.get("countries") if countries is not None: for countrie in countries: if len(PaysRealisation.objects.filter(nom=countrie)) != 0: pays = PaysRealisation.objects.get(nom=countrie) pays.programmes.add(pro.id) elif ( countrie.find("/") == -1 and len(PaysRealisation.objects.filter(nom=countrie)) == 0 ): pays = PaysRealisation(nom=countrie) try: self.save(pays) pays.programmes.add(pro.id) print( f"The countrie {countrie} has been inserted" "in the DB." ) except (ValidationError, TypeError, ValueError): continue
class TestSendEmails(TestCase): @freeze_time("Jan 14th, 2020") def setUp(self): self.client = Client() self.france_3 = Chaines(id_chaine="france_3", nom="FRANCE 3") self.france_3.save() user = User( username="******", first_name="Mell", email="*****@*****.**", password="******", ) user.save() self.recherche = Recherche( recherche="manon des sources", max_resultats=3, utilisateur_id=user.id, ) self.recherche.save() self.recherche.chaines.add(self.france_3.id) specific_search = RechercheSpecifique(recherche_id=self.recherche.id) specific_search.save() self.recherche_2 = Recherche( recherche="fleurette", max_resultats=3, utilisateur_id=user.id, ) self.recherche_2.save() self.recherche_2.chaines.add(self.france_3.id) specific_search = RechercheSpecifique(recherche_id=self.recherche_2.id) specific_search.save() def test_send_email_one_programme_match_one_search_of_one_user(self): prog = Programmes( titre_informatif="Manon des sources", chaines_id=self.france_3.id, date_debut=make_aware(datetime.datetime.now() + timedelta(8)), date_fin=make_aware(datetime.datetime.now() + timedelta(9)), url= "https://www.programme-tv.net/programme/autre/r1549568936-pause/", ) prog.save() titre_prog = Titres.objects.create( programmes_id=prog.id, nom="La Manon", ) titre_prog.save() self.recherche.programmes.add(prog.id) call_command("send_emails") assert (mail.outbox[0].subject == "Un programme correspond à votre recherche!") def test_send_email_two_programmes_match_one_search_of_one_user(self): prog = Programmes( titre_informatif="Manon des sources", chaines_id=self.france_3.id, date_debut=make_aware(datetime.datetime.now() + timedelta(8)), date_fin=make_aware(datetime.datetime.now() + timedelta(9)), ) prog.save() titre_prog = Titres.objects.create( programmes_id=prog.id, nom="La Manon", ) titre_prog.save() prog_2 = Programmes( description="Manon des sources", chaines_id=self.france_3.id, date_debut=make_aware(datetime.datetime.now() + timedelta(9)), date_fin=make_aware(datetime.datetime.now() + timedelta(10)), ) prog_2.save() titre_prog_2 = Titres.objects.create( programmes_id=prog_2.id, nom="Manon_2", ) titre_prog_2.save() self.recherche.programmes.add(prog.id) self.recherche.programmes.add(prog_2.id) call_command("send_emails") assert (mail.outbox[0].subject == "Des programmes correspondent à votre recherche!") def test_send_email_two_programmes_match_two_searches_of_one_user(self): prog = Programmes( titre_informatif="Manon des sources", chaines_id=self.france_3.id, date_debut=make_aware(datetime.datetime.now() + timedelta(8)), date_fin=make_aware(datetime.datetime.now() + timedelta(9)), ) prog.save() titre_prog = Titres.objects.create( programmes_id=prog.id, nom="La Manon", ) titre_prog.save() prog_2 = Programmes( description="jean de ...", chaines_id=self.france_3.id, date_debut=make_aware(datetime.datetime.now() + timedelta(9)), date_fin=make_aware(datetime.datetime.now() + timedelta(10)), ) prog_2.save() titre_prog_2 = Titres.objects.create( programmes_id=prog_2.id, nom="jean de fleurette", ) titre_prog_2.save() self.recherche.programmes.add(prog.id) self.recherche_2.programmes.add(prog_2.id) call_command("send_emails") assert (mail.outbox[0].subject == "Des programmes correspondent à vos recherches!")