Upgrade to Pro — share decks privately, control downloads, hide ads and more …

新人の私が_君_修正早いね_と言ってもらえた話.pdf

mizzsugar
June 12, 2019
1.2k

 新人の私が_君_修正早いね_と言ってもらえた話.pdf

mizzsugar

June 12, 2019
Tweet

More Decks by mizzsugar

Transcript

  1. class TestExtractExamees(TestCase): @classmethod def setUpTestData(cls): """テスト用のデータを作成 長いので省略 """ ... def

    test_iter_birthday_month_employees(self): actual = medical_checkup.core.extract_examinee.iter_birthday_month_employees(today=datetime.date(2019, 5, 1)) actual_list = list(actual) with self.subTest('5月が誕生日である社員がリストに入ってる'): self.assertTrue( employee.types.Employee( id=self.emp_1.id, birthday=datetime.date(1990, 5, 10), gender=employee.types.Gender(1), is_manager=False ) and employee.types.Employee( id=self.emp_2.id, birthday=datetime.date(1980, 5, 11), gender=employee.types.Gender(0), is_manager=True ) in actual_list )
  2. ) with self.subTest('5月が誕生日でない社員がリストに入っている'): self.assertFalse( employee.types.Employee( id=self.emp_3.id, birthday=datetime.date(1980, 6, 11), gender=employee.types.Gender(0),

    is_manager=True ) in actual_list ) self.assertFalse( employee.types.Employee( id=self.emp_4.id, birthday=datetime.date(1980, 6, 12), gender=employee.types.Gender(1), is_manager=True ) in actual_list ) @classmethod def tearDownClass(cls): pass
  3. def test_iter_reexamine_employees(self): # 前月(このテストでは2019年5月)の定期健康診断において,再検査が必要と判定された従業員のみがリストに入っている actual = medical_checkup.core.extract_examinee.iter_reexamine_employees( conducted_year=2019, conducted_month=5 )

    actual_list = list(actual) with self.subTest('前月の定期健康診断を受けて再検査必要な従業員が抽出されている'): self.assertTrue( employee.types.Employee( id=self.emp_5.id, birthday=datetime.date(1980,5,11), gender=employee.types.Gender(0), is_manager=True ) in actual_list ) with self.subTest('前月の定期健康診断を受けて再検査不要な従業員が抽出されていない'): self.assertTrue( employee.types.Employee( id=self.emp_6.id, birthday=datetime.date(1980,5,11), gender=employee.types.Gender(0), is_manager=True ) in actual_list
  4. gender=employee.types.Gender(0), is_manager=True ) in actual_list ) with self.subTest('前月の定期健康診断を受けて再検査不要な従業員が抽出されていない'): self.assertFalse( employee.types.Employee(

    id=self.emp_6.id, birthday=datetime.date(1980,5,11), gender=employee.types.Gender(0), is_manager=True ) in actual_list ) with self.subTest('前月以前に定期健身を受けた従業員は抽出されない'): self.assertFalse( employee.types.Employee( id=self.emp_7.id, birthday=datetime.date(1980,5,11), gender=employee.types.Gender(0), is_manager=True ) in actual_list )
  5. Viewに全てをまとめるとこうなります。 import datetime from django.http import HttpRespons import employee.models.employee def

    show_examiees_fat_controller(request): examinees = [ { 'id': emp.id, 'birthday': emp.birthday } for emp in employee.models.employee.Employee.objects.all() if emp.birthday.month==datetime.date.today().month ] return HttpResponse( { 'examinees': examinees } status=200, content_type='application/json' )
  6. def show_examiees_fat_controller(request): # 当月誕生日の人 employees = [ { 'id': emp.id,

    'birthday': emp.birthday } for emp in employee.models.employee.Employee.objects.all() if emp.birthday.month==datetime.date.today().month ] # 前月を定義 last_month = datetime.date.today() - relativedelta(month=1) # 前月の検査で再検査が必要と言われた人 re_exam_employees = [ { 'id': mc.employee.id, 'birthday': mc.employee.birthday } for mc in medical_checkup.models.checkup.MedicalCheckUp.objecsts.all() if mc.conducted_year==last_month.year and mc.conducted_month==last_month.month and mc.need_reexamination ] # 当月誕生日の人と前月の検査で再検査が必要と言われた人の配列を結合 employees += re_exam_employees return HttpResponse(
  7. # (1)1 当月が誕生月である従業員を抽出する。 def iter_birthday_month_employees(today: datetime.date)->Iterator[employee.types.Employee]: """ today: 基本的にはdatetime.date.today()が入ります """

    return ( emp for emp in employee.models.employee.Manager.iter_all() if emp.birthday.month==today.month ) # (1)2 前月の定期健康診断において,再検査が必要と判定された従業員を抽出する。 def iter_reexamine_employees(conducted_year: int, conducted_month: int) -> Iterator[employee.types.Employee]: return ( mc.employee for mc in medical_checkup.models.checkup.Manager.iter_all() if mc.conducted_year==conducted_year and mc.conducted_month==conducted_month and mc.need_reexamination ) # (1)と(2)を合わせたメソッド。View関数内にはこちらをいれる def extract_examiee(today: datetime.date) -> Iterator[employee.types.Employee]: last_month = today - relativedelta(month=1) conducted_year = last_month.year conducted_month = last_month.month return itertools.chain( iter_birthday_month_employees((today)), iter_reexamine_employees(conducted_year, conducted_year) ) service.py
  8. views.py def show_examiees_fat_controller(request): # 対象者を抽出するメソッド employees = [ asdict(emp) for

    emp in extract_examiee(datetime.date.today()) ] return HttpResponse( { 'employees': employees } status=200, content_type='application/json' )