import unittest from gemini import payload_gemini, extrair_resposta class TestGemini(unittest.TestCase): def test_catalogo_limita_ids_da_reacao(self): payload=payload_gemini([],[],'Vamos festejar!',[dict(id=7,receita=dict(nome='Festa',motivo='Conquista'))]) self.assertEqual(payload['generationConfig']['responseSchema']['properties']['reacao']['enum'],['0','7']) def test_nao_envia_perguntas_sem_resposta_de_chamadas_falhas(self): payload=payload_gemini([{'role':'user','content':'pergunta que falhou'}],[],'pergunta atual') self.assertEqual(len(payload['contents']),1) self.assertEqual(payload['contents'][0]['parts'][0]['text'],'pergunta atual') def test_contexto_e_memoria_sem_chave_no_payload(self): payload=payload_gemini([{'role':'user','content':'Está bravo?'},{'role':'assistant','content':'Não!'}],[{'texto':'Meu nome é Jullio'}],'Oi') self.assertEqual(payload['contents'][-1]['parts'][0]['text'],'Oi') self.assertEqual(payload['contents'][1]['role'],'model') self.assertIn('Jullio',str(payload['systemInstruction'])) self.assertNotIn('api_key',str(payload)) def test_conteudo_ignora_thought_e_exige_json(self): data={'candidates':[{'content':{'parts':[{'text':'segredo','thought':True},{'text':'{"texto":"Oi!","gesto":"feliz"}'}]}}]} self.assertEqual(extrair_resposta(data),{'texto':'Oi!','gesto':'feliz'}) with self.assertRaises(ValueError):extrair_resposta({'candidates':[]})