Files
leadradar/backend/tests/test_leads.py
T

84 lines
3.4 KiB
Python

from unittest.mock import patch
def test_search_maps_endpoint(client, user_headers):
with patch('app.services.geocoding_service.GeocodingService.get_location_by_cep') as mock_geo:
mock_geo.return_value = {
'cep': '01310100',
'logradouro': 'Avenida Paulista',
'bairro': 'Bela Vista',
'cidade': 'São Paulo',
'uf': 'SP',
'formatted_cep': '01310-100'
}
response = client.post('/api/v1/leads/search-maps', headers=user_headers, json={
'cep': '01310-100',
'ramo': 'Padaria',
'max_results': 5
})
assert response.status_code == 200
data = response.get_json()
assert 'summary' in data
assert data['summary']['created_count'] >= 1
def test_update_lead_status_and_interaction(client, user_headers):
# Primeiro dispara busca para criar lead
with patch('app.services.geocoding_service.GeocodingService.get_location_by_cep') as mock_geo:
mock_geo.return_value = {
'cep': '01310100', 'logradouro': 'Avenida Paulista', 'bairro': 'Bela Vista',
'cidade': 'São Paulo', 'uf': 'SP', 'formatted_cep': '01310-100'
}
client.post('/api/v1/leads/search-maps', headers=user_headers, json={'cep': '01310-100', 'ramo': 'Padaria'})
# Listar leads
list_res = client.get('/api/v1/leads', headers=user_headers)
assert list_res.status_code == 200
leads = list_res.get_json()['leads']
assert len(leads) > 0
lead_id = leads[0]['id']
# Atualizar status para 'contatado'
update_res = client.put(f'/api/v1/leads/{lead_id}', headers=user_headers, json={
'status_funil': 'contatado',
'notas': 'Primeiro contato realizado via WhatsApp.'
})
assert update_res.status_code == 200
assert update_res.get_json()['status_funil'] == 'contatado'
# Verificar historico de interacoes
detail_res = client.get(f'/api/v1/leads/{lead_id}', headers=user_headers)
assert detail_res.status_code == 200
detail = detail_res.get_json()
assert len(detail['interacoes']) >= 2
types = [i['tipo'] for i in detail['interacoes']]
assert 'status_change' in types
def test_opt_out_lgpd(client, user_headers):
# Criar lead
with patch('app.services.geocoding_service.GeocodingService.get_location_by_cep') as mock_geo:
mock_geo.return_value = {
'cep': '01310100', 'logradouro': 'Rua Teste', 'bairro': 'Centro',
'cidade': 'São Paulo', 'uf': 'SP', 'formatted_cep': '01310-100'
}
client.post('/api/v1/leads/search-maps', headers=user_headers, json={'cep': '01310-100', 'ramo': 'Farmácia'})
list_res = client.get('/api/v1/leads', headers=user_headers)
lead_id = list_res.get_json()['leads'][0]['id']
# Opt-out
opt_res = client.post(f'/api/v1/leads/{lead_id}/opt-out', headers=user_headers)
assert opt_res.status_code == 200
assert opt_res.get_json()['lead']['status_funil'] == 'opt_out'
def test_export_leads(client, user_headers):
# Exportar CSV
csv_res = client.get('/api/v1/leads/export?format=csv', headers=user_headers)
assert csv_res.status_code == 200
assert 'text/csv' in csv_res.content_type
# Exportar JSON
json_res = client.get('/api/v1/leads/export?format=json', headers=user_headers)
assert json_res.status_code == 200
assert isinstance(json_res.get_json(), list)