def test_register_employee_without_balance_vacation(self): employee = EmployeeProvider.create_simple("Some Name", "some_password", "*****@*****.**") now_date = datetime.now() employee = EmployeeProvider.register(employee=employee, employment_date=now_date) self.assertIsNotNone(employee) self.assertEqual(employee.registration_date.year, now_date.year) self.assertEqual(employee.registration_date.month, now_date.month) self.assertEqual(employee.registration_date.day, now_date.day) self.assertEqual(employee.employment_date, now_date) self.assertEqual(employee.vacation, 0)
def test_update_employee(self): serialized_employee = fixtures.load("unactivated_user") employee = EmployeeProvider.deserialize(serialized_employee) employee = EmployeeProvider.update_with(employee, name="New Name") self.assertEqual(employee.name, "New Name") employee = EmployeeProvider.update_with(employee, employment_date=datetime( 2019, 1, 30)) self.assertEqual(employee.employment_date, datetime(2019, 1, 30)) self.assertEqual(employee.rate, RateCalculator.MAX_DAYS) employee = EmployeeProvider.update_with(employee, email="*****@*****.**") self.assertEqual(employee.email, "*****@*****.**") employee = EmployeeProvider.update_with(employee, password="******") self.assertEqual(employee.password, "new_password") employee = EmployeeProvider.activate(employee) self.assertEqual(employee.activated, True) employee = EmployeeProvider.deactivate(employee) self.assertEqual(employee.activated, False) self.assertEqual(employee.is_admin, False) employee = EmployeeProvider.set_balance_vac(employee, 10) self.assertEqual(employee.vacation, 10)
def test_register_employee_without_balance_vacation(self): serialized_employee = fixtures.load("unaccepted_user") employee = EmployeeProvider.deserialize(serialized_employee) now_date = datetime.now() employee = EmployeeProvider.register(employee=employee, employment_date=now_date) self.assertIsNotNone(employee) self.assertEqual(employee.acceptance_date.year, now_date.year) self.assertEqual(employee.acceptance_date.month, now_date.month) self.assertEqual(employee.acceptance_date.day, now_date.day) self.assertEqual(employee.employment_date, now_date) self.assertEqual(employee.activated, True) self.assertEqual(employee.is_admin, False) self.assertEqual(employee.vacation, 0)
def test_update_employee(self): to_hash = FakeToHash() storage = EmployeesStorage(FakeDb().build()) controller = EmployeeProvider() use_case = UpdateEmployeeUseCase(to_hash, controller, storage) use_case.update_employee(0, name="new name", old_password="******", new_password="******", email="*****@*****.**") saved_employee = storage.find_by_id(0) self.assertIsNotNone(saved_employee.password) self.assertEqual(saved_employee.name, "new name") self.assertEqual(saved_employee.email, "*****@*****.**") self.assertEqual(saved_employee.activated, True) try: use_case.update_employee(employee_id=0, old_password="******", new_password="******") raise Exception('Updating must be break') except UpdatingError: pass try: use_case.update_employee(employee_id=0, email="*****@*****.**") raise Exception('Updating must be break') except EmailIsBusyError: pass
def test_get_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) use_case = GetTimeSheetUseCase(ts_provider, e_use_case, ts_storage) time_sheet = use_case.get_for_employee(employee_id=0, year=2019, month=1) self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheet = use_case.get_by_id(time_sheet_id=0) self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23)
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)
def test_create_employee(self): employee = EmployeeProvider.create_simple("Some Name", "some_password", "*****@*****.**") self.assertIsNotNone(employee) self.assertEqual(employee.id, 0) self.assertEqual(employee.name, "Some Name") self.assertEqual(employee.password, "some_password") self.assertEqual(employee.email, "*****@*****.**") self.assertEqual(employee.activated, False)
def test_serialize_unaccepted_employee(self): employee = fixtures.load_instance("unaccepted_user", Employee) serialized_employee = EmployeeProvider.serialize(employee) self.assertIsNotNone(serialized_employee) self.assertEqual(serialized_employee['id'], 1) self.assertEqual(serialized_employee['name'], 'Unregistered User') self.assertEqual(serialized_employee['email'], '*****@*****.**') self.assertIsNone(serialized_employee['employment_date']) self.assertIsNone(serialized_employee['vacation']) self.assertFalse(serialized_employee['activated']) self.assertFalse(serialized_employee['is_admin'])
def test_save_employees(self): storage = EmployeesStorage(FakeDb().build()) employee = EmployeeProvider.create_simple("some name", "some password", "*****@*****.**") storage.save(employee) saved_employee = storage.find_by_email("*****@*****.**") self.assertIsNotNone(saved_employee) self.assertEqual(saved_employee.id, employee.id) self.assertEqual(saved_employee.name, employee.name) self.assertEqual(saved_employee.email, employee.email) self.assertEqual(saved_employee.password, employee.password)
def build(self): session = super().build() admin_user = EmployeeProvider.deserialize(fixtures.load("admin_user")) unaccepted_user = EmployeeProvider.deserialize( fixtures.load("unaccepted_user")) user_with_vacation = EmployeeProvider.deserialize( fixtures.load("user_with_vacation")) session.add(admin_user) session.add(unaccepted_user) session.add(user_with_vacation) session.commit() january_ts = TimeSheetProvider.deserialize( fixtures.load('january_time_sheet')) half_january_ts = TimeSheetProvider.deserialize( fixtures.load('half_january_time_sheet')) session.add(january_ts) session.add(half_january_ts) session.commit() return session
def test_get_all_employee(self): storage = EmployeesStorage(FakeDb().build()) controller = EmployeeProvider() use_case = GetAllEmployeeUseCase(controller, storage) employees = use_case.get_employees() self.assertEqual(employees.__len__(), 3) saved_employee = employees[0] self.assertEqual(saved_employee['name'], "admin") self.assertEqual(saved_employee['email'], "*****@*****.**") self.assertEqual(saved_employee['activated'], True) self.assertEqual(saved_employee['vacation'], 1.0)
def test_register_employee(self): storage = EmployeesStorage(FakeDb().build()) controller = EmployeeProvider() use_case = RegisterEmployeeUseCase(controller, storage) now = datetime.now() serialized_employee = fixtures.load("unaccepted_user") use_case.register_employee(serialized_employee["id"], employment_date=now) saved_employee = storage.find_by_email(serialized_employee["email"]) self.assertEqual(saved_employee.employment_date, now) self.assertEqual(saved_employee.vacation, 0) self.assertEqual(saved_employee.activated, True)
def test_get_employee(self): storage = EmployeesStorage(FakeDb().build()) controller = EmployeeProvider() use_case = GetEmployeeUseCase(controller, storage) saved_employee = use_case.get_employee(employee_id=0) self.assertEqual(saved_employee['name'], "admin") self.assertEqual(saved_employee['email'], "*****@*****.**") self.assertEqual(saved_employee['activated'], True) saved_employee = use_case.get_employee_by_email("*****@*****.**") self.assertEqual(saved_employee['name'], "admin") self.assertEqual(saved_employee['email'], "*****@*****.**") self.assertEqual(saved_employee['activated'], True)
def test_deserialize_unaccepted_employee(self): serialized_employee = fixtures.load("unaccepted_user") employee = EmployeeProvider.deserialize(serialized_employee) self.assertIsNotNone(employee) self.assertEqual(employee.id, 1) self.assertEqual(employee.name, 'Unregistered User') self.assertEqual(employee.password, 'user') self.assertEqual(employee.email, '*****@*****.**') self.assertFalse(employee.activated) self.assertFalse(employee.is_admin) self.assertIsNone(employee.vacation) self.assertIsNone(employee.employment_date) self.assertIsNone(employee.acceptance_date)
def test_serialize_employee(self): employee = fixtures.load_instance("unactivated_user", Employee) employee.employment_date = datetime(2019, 1, 1) employee.acceptance_date = datetime(2019, 1, 1) serialized_employee = EmployeeProvider.serialize(employee) self.assertIsNotNone(serialized_employee) self.assertEqual(serialized_employee['id'], 2) self.assertEqual(serialized_employee['name'], 'Unactivated User') self.assertEqual(serialized_employee['email'], '*****@*****.**') self.assertEqual("2019.01.01", serialized_employee['employment_date']) self.assertEqual("2019.01.01", serialized_employee['acceptance_date']) self.assertEqual(serialized_employee['vacation'], 1.0) self.assertEqual(serialized_employee['activated'], False) self.assertEqual(serialized_employee['is_admin'], False)
def test_deserialize_employee(self): serialized_employee = fixtures.load("unactivated_user") employee = EmployeeProvider.deserialize(serialized_employee) self.assertIsNotNone(employee) self.assertEqual(employee.id, 2) self.assertEqual(employee.name, 'Unactivated User') self.assertEqual(employee.password, 'user') self.assertEqual(employee.email, '*****@*****.**') self.assertEqual(datetime(2019, 1, 1), employee.employment_date) self.assertEqual(datetime(2019, 1, 1), employee.acceptance_date) self.assertEqual(employee.vacation, 1.0) self.assertEqual(employee.activated, False) self.assertEqual(employee.is_admin, False)
def test_register_employee(self): employee = fixtures.load_instance("unaccepted_user", Employee) now_date = datetime.now() employee = EmployeeProvider.register(employee=employee, employment_date=now_date, balance_vac=5) self.assertIsNotNone(employee) self.assertEqual(employee.acceptance_date.year, now_date.year) self.assertEqual(employee.acceptance_date.month, now_date.month) self.assertEqual(employee.acceptance_date.day, now_date.day) self.assertEqual(employee.employment_date, now_date) self.assertEqual(employee.activated, True) self.assertEqual(employee.is_admin, False) self.assertEqual(employee.vacation, 5)
def test_admin_rights_employee(self): storage = EmployeesStorage(FakeDb().build()) controller = EmployeeProvider() use_case = AdminRightsEmployeeUseCase(controller, storage) saved_employee = storage.find_by_id(1) self.assertEqual(saved_employee.is_admin, False) use_case.grant_to_admin(1) saved_employee = storage.find_by_id(1) self.assertEqual(saved_employee.is_admin, True) use_case.pick_up_admin(1) saved_employee = storage.find_by_id(1) self.assertEqual(saved_employee.is_admin, False)
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_create_employee(self): storage = EmployeesStorage(FakeDb().build()) controller = EmployeeProvider() use_case = CreateEmployeeUseCase(controller, storage, Tokenizer(), ToHash()) use_case.create_employee("some name", password="******", email="*****@*****.**") saved_employee = storage.find_by_email("*****@*****.**") self.assertEqual(saved_employee.name, "some name") self.assertEqual(saved_employee.email, "*****@*****.**") self.assertIsNotNone(saved_employee.password) use_case.create_employee("new user", "some password", "*****@*****.**") saved_employee = storage.find_by_email("*****@*****.**") self.assertEqual(saved_employee.name, "new user") self.assertEqual(saved_employee.email, "*****@*****.**") self.assertIsNotNone(saved_employee.password) self.assertEqual(saved_employee.activated, False)
def test_get_not_exist_time_sheet(self): ts_storage = TimeSheetsStorage(FakeDb().build()) e_storage = EmployeesStorage(FakeDb().build()) e_provider = EmployeeProvider() e_use_case = GetEmployeeUseCase(e_provider, e_storage) ts_provider = TimeSheetProvider() use_case = GetTimeSheetUseCase(ts_provider, e_use_case, ts_storage) time_sheet = use_case.get_for_employee(employee_id=0, year=2019, month=12) self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 12) self.assertEqual(time_sheet['sheet'].__len__(), 31) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 22)
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_get_time_sheets(self): storage = TimeSheetsStorage(FakeDb().build()) controller = TimeSheetProvider() e_storage = EmployeesStorage(FakeDb().build()) e_provider = EmployeeProvider() e_use_case = GetEmployeeUseCase(e_provider, e_storage) use_case = GetTimeSheetsUseCase(controller, e_use_case, storage) time_sheets = use_case.get_for_employee(employee_id=0, year=2019, month=1) time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheets = use_case.get_for_employee(employee_id=0, year=2019) time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheets = use_case.get_for_all_employees(year=2019) time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheets = use_case.get_for_all_employees(year=2019, month=1) time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheets = use_case.get_for_all_employees(month=1) time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheets = use_case.get_for_employee(employee_id=0, month=1) time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheets = use_case.get_for_employee(employee_id=0) time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23) time_sheets = use_case.get_all() time_sheet = time_sheets[0] self.assertEqual(time_sheet['year'], 2019) self.assertEqual(time_sheet['month'], 1) self.assertEqual(time_sheet['sheet'], fixtures.load('january')) self.assertEqual(time_sheet['employee_id'], 0) self.assertEqual(time_sheet['rate'], 10) self.assertEqual(time_sheet['norm'], 23)
def test_grant_to_admin_employee(self): serialized_employee = fixtures.load("unaccepted_user") employee = EmployeeProvider.deserialize(serialized_employee) employee = EmployeeProvider.grant_to_admin(employee) self.assertTrue(employee.is_admin)
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
def test_pick_up_admin_employee(self): serialized_employee = fixtures.load("admin_user") employee = EmployeeProvider.deserialize(serialized_employee) employee = EmployeeProvider.pick_up_admin(employee) self.assertFalse(employee.is_admin)