def setUp(self): db = FakeDb().build() self.time_sheet_storage = TimeSheetsStorage(db) self.employee_storage = EmployeesStorage(db) self.calculator = VacationCalculator() reporter = ExcelReporter() self.use_case = ReporterUseCase(self.employee_storage, self.time_sheet_storage, self.calculator, reporter)
def test_update_time_sheet(self): ts_storage = TimeSheetsStorage(FakeDb().build()) e_storage = EmployeesStorage(FakeDb().build()) e_provider = EmployeeProvider() ts_provider = TimeSheetProvider() e_use_case = GetEmployeeUseCase(e_provider, e_storage) calculator = VacationCalculator() use_case = UpdateTimeSheetUseCase(ts_provider, e_use_case, calculator, ts_storage) use_case.update_time_sheet(0, sheet=fixtures.load('february'), norm=19) saved_time_sheet = ts_storage.find_by_id(0) self.assertEqual(saved_time_sheet.id, 0) self.assertEqual(saved_time_sheet.sheet, fixtures.load('february')) self.assertEqual(saved_time_sheet.norm, 19) self.assertNotEqual(saved_time_sheet.vacation, 1.0) use_case.update_time_sheet_for(0, 2019, 1, sheet=fixtures.load('full_january')) saved_time_sheet = ts_storage.find_first_by(employee_id=0, year=2019, month=1) self.assertEqual(saved_time_sheet.employee_id, 0) self.assertEqual(saved_time_sheet.sheet, fixtures.load('full_january')) self.assertEqual(saved_time_sheet.norm, 19) self.assertNotEqual(saved_time_sheet.vacation, 1.0)
class TestProvideEmployeeUseCase(unittest.TestCase): def setUp(self): db = FakeDb().build() self.time_sheet_storage = TimeSheetsStorage(db) self.employee_storage = EmployeesStorage(db) self.calculator = VacationCalculator() reporter = ExcelReporter() self.use_case = ReporterUseCase(self.employee_storage, self.time_sheet_storage, self.calculator, reporter) def test_get_report_data(self): data = self.use_case.get_data(datetime(2018, 1, 1)) employees = self.employee_storage.find_by(activated=True) time_sheets = self.time_sheet_storage.get_all() expected_columns_count = 6 self.assertEqual(data.__len__(), expected_columns_count) expected_names = [employee.name for employee in employees] self.assertEqual(data['ФИО'], expected_names) expected_worked_days = [ self.calculator.calculate_days_worked(time_sheet) for time_sheet in time_sheets ] self.assertEqual(data['Отработано дней'], expected_worked_days) expected_norms = [time_sheet.norm for time_sheet in time_sheets] self.assertEqual(data['Норма рабочих дней'], expected_norms) expected_month_vac = [ time_sheet.vacation for time_sheet in time_sheets ] self.assertEqual(data['Зачислено отпускных дней'], expected_month_vac) expected_used_vac = [ self.calculator.calculate_used_vacation(time_sheet) for time_sheet in time_sheets ] self.assertEqual(data['Использовано отпускных дней'], expected_used_vac) expected_total_vacation = [employee.vacation for employee in employees] self.assertEqual(data['Всего отпускных дней'], expected_total_vacation) def test_get_report(self): path = self.use_case.get_formed_report_by_date(datetime(2018, 1, 1)) report_path = '{}/reports/{}.xlsx'.format(ROOT_APP_PATH, '1.2018') self.assertEqual(path, report_path) os.remove(path)
def test_update_one_day(self): ts_storage = TimeSheetsStorage(FakeDb().build()) e_storage = EmployeesStorage(FakeDb().build()) e_provider = EmployeeProvider() ts_provider = TimeSheetProvider() e_use_case = GetEmployeeUseCase(e_provider, e_storage) calculator = VacationCalculator() use_case = UpdateTimeSheetUseCase(ts_provider, e_use_case, calculator, ts_storage) use_case.update_day_mark(0, 1, 0.5) saved_time_sheet = ts_storage.find_by_id(0) self.assertEqual(saved_time_sheet.sheet[0], 0.5) self.assertNotEqual(saved_time_sheet.vacation, 1.0)
def test_update_time_sheet_for_not_exist(self): ts_storage = TimeSheetsStorage(FakeDb().build()) e_storage = EmployeesStorage(FakeDb().build()) e_provider = EmployeeProvider() ts_provider = TimeSheetProvider() e_use_case = GetEmployeeUseCase(e_provider, e_storage) calculator = VacationCalculator() use_case = UpdateTimeSheetUseCase(ts_provider, e_use_case, calculator, ts_storage) try: ts_storage.find_first_by(employee_id=3, year=2019, month=5) raise Exception('Time sheet should not exist') except NotFoundError: pass use_case.update_time_sheet_for(employee_id=3, year=2019, month=5, sheet=fixtures.load('february')) saved_time_sheet = ts_storage.find_first_by(employee_id=3, year=2019, month=5) self.assertEqual(saved_time_sheet.sheet, fixtures.load('february'))
def test_calculate_with_full_time_sheet(self): time_sheet = self.january_time_sheet calculator = VacationCalculator() time_sheet.rate = RateCalculator.MIN_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 3.29) time_sheet.rate = RateCalculator.DAYS_FOR_3_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 2.88) time_sheet.rate = RateCalculator.DAYS_FOR_2_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 2.56) time_sheet.rate = RateCalculator.MAX_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 2.3)
def test_calculate_with_compensation_sheet(self): time_sheet = self.january_time_sheet time_sheet.sheet = fixtures.load("compensation_january") calculator = VacationCalculator() time_sheet.rate = RateCalculator.MIN_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 3.29) time_sheet.rate = RateCalculator.DAYS_FOR_3_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 2.88) time_sheet.rate = RateCalculator.DAYS_FOR_2_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 2.56) time_sheet.rate = RateCalculator.MAX_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 2.3)
def test_calculate_with_half_time_sheet(self): time_sheet = self.january_time_sheet time_sheet.sheet = fixtures.load("half_january") calculator = VacationCalculator() time_sheet.rate = RateCalculator.MIN_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, -5.86) time_sheet.rate = RateCalculator.DAYS_FOR_3_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, -6.12) time_sheet.rate = RateCalculator.DAYS_FOR_2_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, -6.33) time_sheet.rate = RateCalculator.MAX_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, -6.5)
def test_calculate_with_full_sheet(self): time_sheet = self.january_time_sheet time_sheet.sheet = fixtures.load("full_january") calculator = VacationCalculator() time_sheet.rate = RateCalculator.MIN_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 4.43) time_sheet.rate = RateCalculator.DAYS_FOR_3_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 3.88) time_sheet.rate = RateCalculator.DAYS_FOR_2_YEARS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 3.44) time_sheet.rate = RateCalculator.MAX_DAYS time_sheet = calculator.calculate_vacation(time_sheet) self.assertEqual(time_sheet.vacation, 3.1)
def test_calculate_with_half_time_sheet_for_day(self): time_sheet = self.january_time_sheet time_sheet.sheet = fixtures.load("half_january") calculator = VacationCalculator() time_sheet.rate = RateCalculator.MIN_DAYS time_sheet = calculator.calculate_vacation(time_sheet, 12) self.assertEqual(time_sheet.vacation, 2.14) self.assertEqual(time_sheet.norm, 23) time_sheet.rate = RateCalculator.DAYS_FOR_3_YEARS time_sheet = calculator.calculate_vacation(time_sheet, 12) self.assertEqual(time_sheet.vacation, 1.88) self.assertEqual(time_sheet.norm, 23) time_sheet.rate = RateCalculator.DAYS_FOR_2_YEARS time_sheet = calculator.calculate_vacation(time_sheet, 12) self.assertEqual(time_sheet.vacation, 1.67) self.assertEqual(time_sheet.norm, 23) time_sheet.rate = RateCalculator.MAX_DAYS time_sheet = calculator.calculate_vacation(time_sheet, 12) self.assertEqual(time_sheet.vacation, 1.5) self.assertEqual(time_sheet.norm, 23)
def create_app(self): if self.app is None: self.app = App() if self.db is None: self.db = DbBuilder().build() self.to_hash = ToHash() self.tokenizer = Tokenizer() self.vacation_calculator = VacationCalculator() self.employee_storage = EmployeesStorage(self.db) self.time_sheet_storage = TimeSheetsStorage(self.db) self.employee_provider = EmployeeProvider() self.time_sheet_provider = TimeSheetProvider() self.app.get_employee_use_case = GetEmployeeUseCase(self.employee_provider, self.employee_storage) self.app.get_employees_use_case = GetAllEmployeeUseCase(self.employee_provider, self.employee_storage) self.app.create_employee_use_case = CreateEmployeeUseCase(self.employee_provider, self.employee_storage, self.tokenizer, self.to_hash) self.app.check_employee_use_case = CheckEmployeeUseCase(self.employee_provider, self.employee_storage, self.tokenizer, self.to_hash) self.app.check_admin_rights_use_case = CheckAdminRightsUseCase(self.employee_storage) self.app.register_employee_use_case = RegisterEmployeeUseCase(self.employee_provider, self.employee_storage) self.app.update_employee_use_case = UpdateEmployeeUseCase(self.to_hash, self.employee_provider, self.employee_storage) self.app.admin_rights_employee_use_case = AdminRightsEmployeeUseCase(self.employee_provider, self.employee_storage) self.app.get_time_sheet_use_case = GetTimeSheetUseCase(self.time_sheet_provider, self.app.get_employee_use_case, self.time_sheet_storage) self.app.get_time_sheets_use_case = GetTimeSheetsUseCase(self.time_sheet_provider, self.app.get_employee_use_case, self.time_sheet_storage) self.app.create_time_sheet_use_case = CreateTimeSheetUseCase(self.time_sheet_provider, self.time_sheet_storage) self.app.update_time_sheet_use_case = UpdateTimeSheetUseCase(self.time_sheet_provider, self.app.get_employee_use_case, self.vacation_calculator, self.time_sheet_storage) self.app.close_time_sheet_use_case = CloseTimeSheetUseCase(self.time_sheet_provider, self.time_sheet_storage) self.app.calculate_vacation_use_case = CalculateVacationUseCase(self.vacation_calculator, self.employee_storage, self.time_sheet_storage) self.registration_employee_controller = RegistrationEmployeeController( self.app.create_employee_use_case) self.authentication_employee_controller = AuthenticationEmployeeController( self.app.check_employee_use_case) self.get_employee_profile_controller = ProfileController( self.app.get_employee_use_case, self.app.check_employee_use_case, self.app.update_employee_use_case) self.accept_employee_controller = AcceptEmployeeController( self.app.check_admin_rights_use_case, self.app.register_employee_use_case) self.employee_controller = GetEmployeeController(self.app.get_employee_use_case) self.get_employees_controller = GetEmployeesController(self.app.get_employees_use_case) self.time_sheet_controller = TimeSheetController( self.app.get_time_sheet_use_case, self.app.update_time_sheet_use_case ) self.day_of_time_sheet_controller = DayOfTimeSheetController( self.app.get_time_sheet_use_case, self.app.update_time_sheet_use_case ) self.employee_time_sheets_controller = EmployeeTimeSheetsController( self.app.get_time_sheets_use_case, self.app.update_time_sheet_use_case) self.get_employees_time_sheets_controller = GetEmployeesTimeSheetsController( self.app.get_time_sheets_use_case) self.calculate_vacation_controller = VacationCalculatorController( self.app.calculate_vacation_use_case) self._init_routes() return self.app