import unittest
from unittest.mock import patch
from matching import score
import server

class Tests(unittest.TestCase):
 def test_junior_not_best_for_experienced(self):
  job={'title':'SDET-1','description':'Java Selenium automation','location':'Bengaluru','remote':False}
  result=score(job,['java','selenium'],'QA Automation','Bengaluru',5)
  self.assertFalse(result['eligible']);self.assertLessEqual(result['score'],39)
 def test_sdet2_remains_eligible(self):
  job={'title':'SDET-II','description':'Java Selenium automation','location':'Bengaluru','remote':False}
  result=score(job,['java','selenium'],'SDET II','Bengaluru',5)
  self.assertTrue(result['eligible'])
 def test_retry_only_failed_queries(self):
  calls=[]
  def fake(query,pages,cursor=None,allow_cache=True):
   calls.append(query)
   return {'jobs':[],'retrieved':0,'cursor':None,'cached':False}
  with patch.object(server,'fetch_one',side_effect=fake):
   jobs,errors,stats,cursors=server.fetch_jsearch('SDET II','Bengaluru',3,1,only_indices=[1],allow_cache=False)
  self.assertEqual(len(calls),1)
  self.assertEqual(stats[0]['query_index'],1)
  self.assertFalse(errors)
 def test_partial_results_preserved(self):
  def fake(query,pages,cursor=None,allow_cache=True):
   if query.startswith('QA automation engineer'): raise TimeoutError('simulated')
   return {'jobs':[{'id':query,'url':'https://example.org/'+str(len(query)),'title':'SDET II'}],'retrieved':1,'cursor':None,'cached':False}
  with patch.object(server,'fetch_one',side_effect=fake):
   jobs,errors,stats,cursors=server.fetch_jsearch('SDET II','Bengaluru',3,1)
  self.assertEqual(len(errors),1);self.assertEqual(len(jobs),2)

if __name__=='__main__':unittest.main()
