Example #1
0
 def setUpTestData(cls):
     cls.siae_1 = SiaeFactory(name="ZZ ESI")
     cls.siae_2 = SiaeFactory(name="ABC Insertion")
     cls.siae_3 = SiaeFactory(name="Une autre structure")
     cls.user_siae_1 = UserFactory(kind=User.KIND_SIAE,
                                   siaes=[cls.siae_1, cls.siae_2])
     cls.user_siae_2 = UserFactory(kind=User.KIND_SIAE, siaes=[cls.siae_3])
     cls.user_buyer_1 = UserFactory(kind=User.KIND_BUYER)
     cls.user_buyer_2 = UserFactory(kind=User.KIND_BUYER)
     cls.user_partner = UserFactory(kind=User.KIND_PARTNER)
     cls.tender_1 = TenderFactory(author=cls.user_buyer_1)
     cls.tender_2 = TenderFactory(author=cls.user_buyer_2)
     cls.tendersiae_1_1 = TenderSiae.objects.create(
         tender=cls.tender_1,
         siae=cls.siae_1,
         contact_click_date=timezone.now())
     cls.tendersiae_1_2 = TenderSiae.objects.create(tender=cls.tender_1,
                                                    siae=cls.siae_2)
     cls.tendersiae_1_3 = TenderSiae.objects.create(
         tender=cls.tender_1,
         siae=cls.siae_3,
         contact_click_date=timezone.now() - timedelta(hours=1))
     cls.tendersiae_2_1 = TenderSiae.objects.create(
         tender=cls.tender_2,
         siae=cls.siae_2,
         contact_click_date=timezone.now())
Example #2
0
 def test_no_siaes(self):
     tender = TenderFactory(sectors=[SectorFactory()],
                            perimeters=self.perimeters)
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 0)
     tender_marseille = TenderFactory(
         sectors=self.sectors,
         perimeters=[
             PerimeterFactory(
                 coords=Point(43.35101634452076, 5.379616625955892))
         ])
     siae_found_list_marseille = Siae.objects.filter_with_tender(
         tender_marseille)
     self.assertEqual(len(siae_found_list_marseille), 0)
     siae = SiaeFactory(is_active=True,
                        department="75",
                        geo_range=GEO_RANGE_COUNTRY)
     siae_found_list_marseille = Siae.objects.filter_with_tender(
         tender_marseille)
     self.assertEqual(len(siae_found_list_marseille), 0)
     # add sector
     siae.sectors.add(self.sectors[0])
     siae_found_list_marseille = Siae.objects.filter_with_tender(
         tender_marseille)
     self.assertEqual(len(siae_found_list_marseille), 1)
     opportunities_for_siae = Tender.objects.filter_with_siae(
         siae_found_list_marseille[:1])
     #
     self.assertEqual(len(opportunities_for_siae), 1)
Example #3
0
 def test_in_perimeters_queryset(self):
     # create the Perimeters
     auvergne_rhone_alpes_perimeter = PerimeterFactory(
         name="Auvergne-Rhône-Alpes",
         kind=Perimeter.KIND_REGION,
         insee_code="R84")
     isere_perimeter = PerimeterFactory(name="Isère",
                                        kind=Perimeter.KIND_DEPARTMENT,
                                        insee_code="38",
                                        region_code="84")
     grenoble_perimeter = PerimeterFactory(
         name="Grenoble",
         kind=Perimeter.KIND_CITY,
         insee_code="38185",
         department_code="38",
         region_code="84",
         post_codes=["38000", "38100", "38700"],
         # coords=Point(5.7301, 45.1825),
     )
     chamrousse_perimeter = PerimeterFactory(
         name="Chamrousse",
         kind=Perimeter.KIND_CITY,
         insee_code="38567",
         department_code="38",
         region_code="84",
         post_codes=["38410"],
         # coords=Point(5.8862, 45.1106),
     )
     TenderFactory(perimeters=[auvergne_rhone_alpes_perimeter])
     TenderFactory(perimeters=[isere_perimeter])
     TenderFactory(perimeters=[grenoble_perimeter])
     TenderFactory(perimeters=[chamrousse_perimeter])
     TenderFactory(perimeters=[grenoble_perimeter, chamrousse_perimeter])
     # self.assertEqual(Tender.objects.in_perimeters().count(), 5)
     self.assertEqual(
         Tender.objects.in_perimeters(
             post_code="38000",
             department="38",
             region="Auvergne-Rhône-Alpes").count(), 4)
     self.assertEqual(
         Tender.objects.in_perimeters(
             post_code="38100",
             department="38",
             region="Auvergne-Rhône-Alpes").count(), 4)
     self.assertEqual(
         Tender.objects.in_perimeters(
             post_code="38190",
             department="38",
             region="Auvergne-Rhône-Alpes").count(), 2)
     self.assertEqual(
         Tender.objects.in_perimeters(
             post_code="01300",
             department="01",
             region="Auvergne-Rhône-Alpes").count(), 1)
     self.assertEqual(
         Tender.objects.in_perimeters(post_code="29000",
                                      department="29",
                                      region="Bretagne").count(), 0)
Example #4
0
 def test_in_sectors_queryset(self):
     sector_1 = SectorFactory(name="Un secteur")
     sector_2 = SectorFactory(name="Un deuxieme secteur")
     sector_3 = SectorFactory(name="Autre")
     TenderFactory()
     TenderFactory(sectors=[sector_1, sector_2])
     self.assertEqual(Tender.objects.in_sectors([]).count(), 2)
     self.assertEqual(Tender.objects.in_sectors([sector_1]).count(), 1)
     self.assertEqual(
         Tender.objects.in_sectors([sector_1, sector_2]).count(), 1)
     self.assertEqual(
         Tender.objects.in_sectors([sector_1, sector_3]).count(), 1)
     self.assertEqual(Tender.objects.in_sectors([sector_3]).count(), 0)
Example #5
0
 def test_tender_perimeters_and_amount_matching(self):
     tender = TenderFactory(
         perimeters=[self.auvergne_rhone_alpes_perimeter],
         amount=AMOUNT_RANGE_0)
     result = match_tender_for_partners(tender)
     self.assertEqual(
         len(result), 2 + 3
     )  # partners with (perimeters=[] or aura) & (amount_in empty or >=AMOUNT_RANGE_0)
     tender_3 = TenderFactory(perimeters=[self.isere_perimeter],
                              amount=AMOUNT_RANGE_2)
     result = match_tender_for_partners(tender_3)
     self.assertEqual(
         len(result), 3 + 3
     )  # partners with (perimeters=[] or isere overlap) & (amount_in empty or >=AMOUNT_RANGE_2)
Example #6
0
 def test_tender_country_and_amount_matching(self):
     tender = TenderFactory(is_country_area=True, amount=AMOUNT_RANGE_0)
     result = match_tender_for_partners(tender)
     self.assertEqual(
         len(result), 4
     )  # partners with perimeters=[] & (amount_in empty or >=AMOUNT_RANGE_0)
     tender = TenderFactory(is_country_area=True, amount=AMOUNT_RANGE_2)
     result = match_tender_for_partners(tender)
     self.assertEqual(
         len(result), 3
     )  # partners with perimeters=[] & (amount_in empty or >=AMOUNT_RANGE_2)
     tender = TenderFactory(is_country_area=True, amount=AMOUNT_RANGE_4)
     result = match_tender_for_partners(tender)
     self.assertEqual(
         len(result), 1
     )  # partners with perimeters=[] & (amount_in empty or >=AMOUNT_RANGE_4)
Example #7
0
 def test_matching_siae_presta_type(self):
     tender = TenderFactory(presta_type=[],
                            sectors=self.sectors,
                            perimeters=self.perimeters)
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 2)
     tender = TenderFactory(presta_type=[siae_constants.PRESTA_BUILD],
                            sectors=self.sectors,
                            perimeters=self.perimeters)
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 2)
     tender = TenderFactory(presta_type=[siae_constants.PRESTA_PREST],
                            sectors=self.sectors,
                            perimeters=self.perimeters)
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 1)
Example #8
0
 def test_with_siae_country(self):
     # add Siae with geo_range_country
     tender = TenderFactory(sectors=self.sectors,
                            perimeters=self.perimeters)
     siae_country = SiaeFactory(is_active=True, geo_range=GEO_RANGE_COUNTRY)
     siae_country.sectors.add(self.sectors[0])
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 2 + 1)
Example #9
0
 def setUpTestData(cls):
     cls.siae = SiaeFactory(name="ZZ ESI")
     cls.user_siae_1 = UserFactory(kind=User.KIND_SIAE, siaes=[cls.siae])
     cls.user_siae_2 = UserFactory(kind=User.KIND_SIAE)
     cls.user_buyer_1 = UserFactory(kind=User.KIND_BUYER)
     cls.user_buyer_2 = UserFactory(kind=User.KIND_BUYER)
     cls.user_partner = UserFactory(kind=User.KIND_PARTNER)
     cls.tender = TenderFactory(author=cls.user_buyer_1, siaes=[cls.siae])
Example #10
0
 def test_with_siae_department(self):
     # add Siae with geo_range_department (75)
     tender = TenderFactory(sectors=self.sectors,
                            perimeters=self.perimeters)
     siae_department = SiaeFactory(is_active=True,
                                   department="75",
                                   geo_range=GEO_RANGE_DEPARTMENT)
     siae_department.sectors.add(self.sectors[0])
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 2 + 1)
Example #11
0
 def test_with_no_contact_email(self):
     tender = TenderFactory(sectors=self.sectors,
                            perimeters=self.perimeters)
     siae = SiaeFactory(is_active=True,
                        geo_range=GEO_RANGE_COUNTRY,
                        contact_email="",
                        sectors=[self.sectors[0]])
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 2 + 0)
     opportunities_for_siae = Tender.objects.filter_with_siae([siae])
     self.assertEqual(len(opportunities_for_siae), 1)
Example #12
0
 def test_tender_perimeters_matching(self):
     tender = TenderFactory(
         perimeters=[self.auvergne_rhone_alpes_perimeter])
     result = match_tender_for_partners(tender)
     self.assertEqual(len(result),
                      4 + 1)  # partners with perimeters=[] + aura
     tender = TenderFactory(perimeters=[self.rhone_perimeter])
     result = match_tender_for_partners(tender)
     self.assertEqual(len(result), 4 + 1 +
                      1)  # partners with perimeters=[] + isere + aura
     tender = TenderFactory(
         perimeters=[self.isere_perimeter, self.rhone_perimeter])
     result = match_tender_for_partners(tender)
     self.assertEqual(len(result), 4 + 2 +
                      1)  # partners with perimeters=[] + isere/rhone + aura
     tender = TenderFactory(perimeters=[self.grenoble_perimeter])
     result = match_tender_for_partners(tender)
     self.assertEqual(
         len(result), 4 + 1 + 2 +
         1)  # partners with perimeters=[] + grenoble + isere/rhone + aura
Example #13
0
 def test_with_siae_stats_queryset(self):
     siae_1 = SiaeFactory()
     siae_2 = SiaeFactory()
     siae_3 = SiaeFactory()
     siae_4 = SiaeFactory()
     tender_with_siae = TenderFactory(siaes=[siae_1])
     TenderSiae.objects.create(tender=tender_with_siae,
                               siae=siae_2,
                               email_send_date=timezone.now())
     TenderSiae.objects.create(tender=tender_with_siae,
                               siae=siae_3,
                               email_send_date=timezone.now(),
                               detail_display_date=timezone.now())
     TenderSiae.objects.create(
         tender=tender_with_siae,
         siae=siae_4,
         email_send_date=timezone.now(),
         detail_display_date=timezone.now(),
         contact_click_date=timezone.now(),
     )
     tender_without_siae = TenderFactory()
     self.assertEqual(Tender.objects.count(), 2)
     tender_with_siae = Tender.objects.with_siae_stats().first()
     self.assertEqual(tender_with_siae.siaes.count(), 4)
     self.assertEqual(tender_with_siae.siae_count, 4)
     self.assertEqual(tender_with_siae.siae_email_send_count, 3)
     self.assertEqual(tender_with_siae.siae_detail_display_count, 2)
     self.assertEqual(tender_with_siae.siae_contact_click_count, 1)
     self.assertEqual(
         tender_with_siae.siae_contact_click_since_last_seen_date_count, 1)
     tender_without_siae = Tender.objects.with_siae_stats().last()
     self.assertEqual(tender_without_siae.siaes.count(), 0)
     self.assertEqual(tender_without_siae.siae_count, 0)
     self.assertEqual(tender_without_siae.siae_email_send_count, 0)
     self.assertEqual(tender_without_siae.siae_detail_display_count, 0)
     self.assertEqual(tender_without_siae.siae_contact_click_count, 0)
     self.assertEqual(
         tender_without_siae.siae_contact_click_since_last_seen_date_count,
         0)
Example #14
0
 def setUpTestData(cls):
     perimeter = PerimeterFactory(post_codes=["43705"],
                                  insee_code="06",
                                  name="Auvergne-Rhône-Alpes")
     cls.user_siae_1 = UserFactory(kind=User.KIND_SIAE)
     cls.siae = SiaeFactory(post_code=perimeter.post_codes[0])
     cls.user_siae_2 = UserFactory(kind=User.KIND_SIAE, siaes=[cls.siae])
     cls.user_buyer_1 = UserFactory(kind=User.KIND_BUYER)
     cls.user_buyer_2 = UserFactory(kind=User.KIND_BUYER)
     cls.user_partner = UserFactory(kind=User.KIND_PARTNER)
     cls.tender = TenderFactory(author=cls.user_buyer_1,
                                validated_at=date.today(),
                                perimeters=[perimeter])
     cls.tender_2 = TenderFactory(author=cls.user_buyer_1,
                                  deadline_date=date.today() -
                                  timedelta(days=5),
                                  perimeters=[perimeter])
     cls.tender_3 = TenderFactory(
         author=cls.user_buyer_1,
         validated_at=date.today(),
         deadline_date=date.today() - timedelta(days=5),
         perimeters=[perimeter],
     )
Example #15
0
 def test_matching_siae_sectors(self):
     tender = TenderFactory(sectors=self.sectors)
     siae_found_list = Siae.objects.filter_with_tender(tender)
     self.assertEqual(len(siae_found_list), 2)
Example #16
0
 def test_tender_country_matching(self):
     tender = TenderFactory(is_country_area=True)
     result = match_tender_for_partners(tender)
     self.assertEqual(len(result), 4)  # partners with perimeters=[]
Example #17
0
 def test_str(self):
     str_test = "Mon test"
     tender = TenderFactory(title=str_test)
     self.assertEqual(str(tender), str_test)
Example #18
0
 def test_not_empty_deadline(self):
     tender = TenderFactory()
     tender.deadline_date = None
     self.assertRaises(IntegrityError, tender.save)
Example #19
0
 def test_by_user_queryset(self):
     user = UserFactory()
     TenderFactory(author=user)
     TenderFactory()
     self.assertEqual(Tender.objects.by_user(user).count(), 1)
Example #20
0
    def test_migrate_amount_to_select(self):
        # the migrations can't be imported directly, it's a syntax error.
        migration = import_module(
            "lemarche.tenders.migrations.0006_alter_tender_amount")

        tender_amount_none = TenderFactory(amount=None)
        tender_amount_range_0 = TenderFactory(amount=randint(0, 25000 - 1))
        tender_amount_range_1 = TenderFactory(
            amount=randint(25000, 100000 - 1))
        tender_amount_range_2 = TenderFactory(
            amount=randint(100000, 1000000 - 1))
        tender_amount_range_3 = TenderFactory(
            amount=randint(1000000, 5000000 - 1))
        tender_amount_range_4 = TenderFactory(
            amount=randint(5000000, 10000000))

        migration.update_amount(apps, None)

        tender_amount_none.refresh_from_db()
        tender_amount_range_0.refresh_from_db()
        tender_amount_range_1.refresh_from_db()
        tender_amount_range_2.refresh_from_db()
        tender_amount_range_3.refresh_from_db()
        tender_amount_range_4.refresh_from_db()

        self.assertIsNone(tender_amount_none.amount)
        self.assertEqual(tender_amount_range_0.amount, AMOUNT_RANGE_0)
        self.assertEqual(tender_amount_range_1.amount, AMOUNT_RANGE_1)
        self.assertEqual(tender_amount_range_2.amount, AMOUNT_RANGE_2)
        self.assertEqual(tender_amount_range_3.amount, AMOUNT_RANGE_3)
        self.assertEqual(tender_amount_range_4.amount, AMOUNT_RANGE_4)

        # test reverse method
        migration.reverse_update_amount(apps, None)
        tender_amount_range_0.refresh_from_db()
        self.assertEqual(int(tender_amount_range_0.amount), 24999)