from django.test import TestCase from model_mommy import mommy from .models import LeadSource, Lead class LeadSourceTest(TestCase): def test_str_name(self): # Arrange lead_source = mommy.make( LeadSource, name='Downtown billboard', incoming_number='+15555555555') # Assert self.assertEqual(str(lead_source), 'Downtown billboard - +15555555555') def test_str_no_name(self): # Arrange lead_source = mommy.make( LeadSource, incoming_number='+15555555555') # Assert self.assertEqual(str(lead_source), '(not yet named) - +15555555555') def test_get_leads_per_source(self): # Arrange lead_source_1 = mommy.make( LeadSource, name='Downtown billboard', incoming_number='+15555555555') mommy.make(Lead, source=lead_source_1, phone_number='+16666666666') lead_source_2 = mommy.make( LeadSource, name='Uptown billboard', incoming_number='+17777777777') mommy.make(Lead, source=lead_source_2, phone_number='+18888888888') mommy.make(Lead, source=lead_source_2, phone_number='+19999999999') # Act data = LeadSource.objects.get_leads_per_source() # Assert self.assertEqual(data, [{'name': 'Downtown billboard', 'lead__count': 1}, { 'name': 'Uptown billboard', 'lead__count': 2}]) class LeadTest(TestCase): def test_str(self): # Arrange lead_source = mommy.make( LeadSource, name='Downtown billboard', incoming_number='+15555555555') lead = mommy.make( Lead, source=lead_source, phone_number='+16666666666') # Assert self.assertEqual(str(lead), '{0}, {1} at {2}'.format( lead.city, lead.state, lead.timestamp)) def test_get_leads_per_city(self): # Arrange lead_source = mommy.make( LeadSource, name='Downtown billboard', incoming_number='+15555555555') mommy.make(Lead, source=lead_source, phone_number='+16666666666', city='Washington') mommy.make(Lead, source=lead_source, phone_number='+17777777777', city='Washington') mommy.make(Lead, source=lead_source, phone_number='+18888888888', city='San Francisco') # Act data = Lead.objects.get_leads_per_city() # Assert self.assertEqual(data, [{'city': 'San Francisco', 'id__count': 1}, { 'city': 'Washington', 'id__count': 2}])