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())
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)
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)
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)
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)
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)
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)
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)
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])
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)
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)
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
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)
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], )
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)
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=[]
def test_str(self): str_test = "Mon test" tender = TenderFactory(title=str_test) self.assertEqual(str(tender), str_test)
def test_not_empty_deadline(self): tender = TenderFactory() tender.deadline_date = None self.assertRaises(IntegrityError, tender.save)
def test_by_user_queryset(self): user = UserFactory() TenderFactory(author=user) TenderFactory() self.assertEqual(Tender.objects.by_user(user).count(), 1)
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)