Esempio n. 1
0
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"
Esempio n. 2
0
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")
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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
Esempio n. 9
0
    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!")