# Auth Interceptor * should be created * should add an Authorization header to /accountsettings * should log a user out when the api returns a 401 and send them back to /login route * should not call logout if error status isn't a 401 # Conflicts service ### isInvalidEmployeeTime * is valid when employeeTimes is not set * is valid when employeeTimes is an empty array * is invalid when the new start time would be the earliest time and doesnt belong to the first task * is valid when the new start time would be the earliest time and belongs to the first task * is invalid when the new endTime would be the latest time and doesnt belong to the last task * is valid when the new end time would be the latest time and belongs to the last task * is valid when closing the gap between 2 tasks by setting 2nd task startTime = 1st task endTime * is invalid when later tasks startTime is set before earlier tasks startTime * is valid when closing the gap between 2 tasks by setting the 1st task endTime = 2nd task startTime * is invalid when later tasks startTime is set before earlier tasks startTime * is valid when an open task has its start time changed to be earlier * is invalid when the new startTime overlaps with another startTime * is invalid when the new endTime overlaps with another endTime * is valid when there are no overlaps * is valid when new endTime belongs to first task and is less than the endTime * is valid when new endTime does not belong to first task and is less than the endTime * is invalid when new start time does not belong to first task and is the earliest startTime * is invalid when new endTime belongs to the first task and the new time is the latest time * is invalid when new endTime is not the first task and the new time is the latest time ### getConflictedCrew * has no conflicts when newStartTime is after all the pre-existing startTimes and endTimes * has no conflicts when newStartTime is after all the pre-existing startTimes and is the same time as an endTime * has no conflicts when newStartTime is after all the pre-existing startTimes and is equal to now wherein the endTimes are null * has conflicts when newStartTime is after all the pre-existing startTimes but overlaps an endTime ### resolveCrew * adjusts new task startTime conflict when ConflictResolutionType is AdjustThisTask * adjusts pre-existing task endTime conflict when ConflictResolutionType is AdjustConflictTask * removes the conflicting task when ConflictResolutionType is Cancel * adjusts the resolved task times with the specified latitude and longitude # Crew Service ### getCrew * appends an ALL_STAFF staff group with an ID of 0 * only saves crew members that are in the employee access list if it is not empty * saves all crew members if the employee access list is empty ### searchCrew * finds the employee if the search is a substring of their first name * finds the employee if the search is a substring of their last name * does not find an employee if neither their first or last name are matched * only returns the found employee if they are in the access list * only returns the found employee if they are in the access list ### filterByStaffGroup * returns all employees if staffGroupId is ALL_STAFF_ID * returns all employees from the access list if staffGroupId is ALL_STAFF_ID * returns employees that belong to the staffGroupId * returns employees in the access list that belong to the staffGroupId # NotificationService ### getWeekdaysRelativeToDate * should return five unique weekdays excluding today when `now` is equal to `when` * should return five unique weekdays including today * should return five unique weekdays excluding today which is the weekend * should throw when given invalid Date ### getWeekendRelativeToDate * should return two unique weekend days excluding today * should return two unique weekend days including today * should return two unique weekend days when `now` is a weekday * should throw when given invalid Date ### rescheduleNotifications * should cancel all pending notification and schedule none * schedules Start Timesheet notifications for each weekday * schedules Submit Timesheet notifications for each weekday * schedules Start & Submit Timesheet notifications for each weekday * schedules Start & Submit Timesheet notifications for each day # SearchComponent * should emit correct search params when the user enters a search query after a delay * should emit an empty search event when the user enters an empty string # Add Crew Service ### getAddCrewPageData * filters timesheet employees * filters inactive employees * filters absent employees ### addTaskTime * creates a copied taskTime from the copied employee task time # Employee Time Service ### adjustTaskForUpdatedTaskTimes * sets the task StartTime to the earliest TaskTime start * sets the task EndTime to the latest TaskTime end * sets both StartTime and EndTime to the earliest/latest task times respectively * does not modify the times if start/end are not earlier/later than the earliest/latest task time ### deleteEmployeeTaskTimeFromTimesheet * removes the employee from the timesheet if they only belong to one task * does not remove the employee from the timesheet if they have other tasks ### resetEmployeeLunch * resets the lunch of the provided employee if they exist in the timesheet and/or task times ### getAdjustedTaskTimes * only updates the specified employeeId * sets endTime taskTime properties when manualEndTimeEdit is true * sets startTime taskTime properties when manualStartTimeEdit is true # Lunch break service ### lunchTimeIsValid * is invalid when the lunch startTime is before the tasks earliest start time * is invalid when the lunch endTime is after the tasks latest end time * is valid when the lunch startTime is equal to the tasks earliest start time * is valid when the lunch endTime is equal to the tasks latest end time * is valid when the lunch startTime is after the tasks earliest start time * is valid when the lunch endTime is before the tasks latest end time * is invalid when the lunch time range overlaps a gap between tasks * is invalid when the lunch time range partially overlaps a gap between tasks * is valid when the lunch time range is split between two tasks with no gap * is valid when the lunch time range occurs during one task * is valid when two separate tasks occur during the same time range * is valid when two separate tasks overlap a time range * is invalid when two separate tasks overlapping a time range have a lunch that occurs during an endTime gap for one of those tasks * is invalid when two separate tasks overlapping a time range have a lunch that occurs during a startTime gap for one of those tasks * is valid when you have different timezones being sorted * is valid when the lunch applies to a date range only applicable to selected employees * is invalid when the lunch applies to a date range not only applicable to selected employees * is valid when the lunch applies to a date range only applicable to selected employees across multiple tasks * is invalid when the lunch applies to a date range not applicable to selected employees across multiple tasks * is invalid when an employee task time is outside of a lunch boundary while the parent task is within the lunch boundary ### removeLunchAdjustmentFromEmployeeTaskTime * sets LunchAdjustment to 0 for the given employeeId ### addLunchAdjustmentToEmployeeTaskTime * applies a lunch adjustment to the correct task with the correct duration when only one task exists * splits a lunch adjustment when lunch range overlaps two tasks * applies lunch adjustments only to employees that have started their first task before lunch time ### removeLunchAdjustmentFromEmployeeTaskTime * sets taskTime LunchAdjustment to 0 for all taskTimes belonging to employeeId ### addLunchAdjustmentToEmployeeTaskTime * sets taskTime LunchAdjustment to 0 if the lunch is not within the employee's taskTime date range * sets taskTime LunchAdjustment to 0 if the lunch duration is 0 * sets taskTime LunchAdjustment to duration if the lunch's date range falls within a task's date range * splits taskTime LunchAdjustment when the lunch's date range overlaps the startTime and endTime of two tasks * splits taskTime LunchAdjustment when the lunch's date range overlaps the startTime and endTime of two tasks with a time gap between them * splits taskTime LunchAdjustment when the lunch's date range overlaps three tasks PENDING WITH MESSAGE: Temporarily disabled with xit ### addLunchToTimesheetEmployee * sets the employee object lunch properties when an employee taskTime has a LunchAdjustment * does not set the employee object lunch properties when an employee taskTime does not have a LunchAdjustment ### removeLunchFromTimesheetEmployee * sets the employee object lunch properties for no lunch being applied ### updateEmployeesOnLunchApplied * sets your lunch duration to the sum of your tasks lunchAdjustments lunch is contained within a single task * sets your lunch duration to the sum of your tasks lunchAdjustments when spanning two tasks * only updates selected employees ### updateEmployeesOnNoLunchApplied * only updates selected employees ### updateEmployeesOnLunchAppliedForSubmit * applies lunch adjustments for selected employees, independent of their prior lunch adjustments * applies no-break lunch adjustment for non selected employees who have no prior lunch adjustment * does not apply lunch adjustment for non selected employees who have prior lunch adjustments ### updateEmployeesOnNoLunchAppliedForSubmit * applies no-break lunch adjustment for selected employees, independent of their prior lunch adjustments * applies no-break lunch adjustment for non selected employees who have no prior lunch adjustment * does not apply no-break lunch adjustment for non selected employees who have prior lunch adjustments # Punch In Service ### setStartTime * should set the startTime to current date/time if timesheet is today * should set the startTime to current date/time if timesheet is yesterday * should set the startTime to 12:00 AM if difference in days between timesheet date and current date is greater than one * should set the startTime to the next task time from punch out when available ### addEmployee * should set the default crew with the default props * should set any employees isSelected to false when their marked as absent * should set any employees added via the add crew tab to the default props * should set any employees added via the add crew tab to the current props ### taskChange * should change selected task for all employees * should appply employee.SelectedJobRateID as 0 when jobsite rates are empty to all employees * should appply employee.SelectedJobRateID as selectedJobRateId when jobsite rates is > 0 to all employees * should appply employee.isTM as true when jobsite.task.isTM is true (hourlyBilled) to all employees ### singleTaskChange * should only change selected task for individual employee * should appply employee.SelectedJobRateID as 0 when jobsite rates are empty * should appply employee.SelectedJobRateID as selectedJobRateId when jobsite rates is > 0 * should appply employee.isTM as true when jobsite.task.isTM is true (hourlyBilled) ### ratesChange * should apply rates to all crew members ### addTask * should apply single task with all crew to timesheet * should apply multiple task with crew on different tasks to timesheet * should append the latest tasks EquipmentNotes the new task/s * should apply the current weather notes based on your location to tasks WeatherNotes ### addTaskTimes * should set manual edit to true when date/time picker has been changed * should set the employees start times to start of minute * should apply rate props to employees task time if task & materials (isTM) and the jobsite rates length > 0 ### addTimesheetEmployees * should add all employees when TimesheetEmployees is empty * should add only new employees to the timesheet when TimesheetEmployees > 0 * should set the correct lunch props by default # Punch Out Service ### getSelectedCrewFromTasks * filters out task times that have an end time set * uses the employee first/last name on the TaskTime object ### everyTaskNoteHasContent * returns true if all note fields required by the job type are set * returns false if note fields required by the job type are not set * returns false for required notes with whitespace-only values ### setTaskServices * flattens the TaskServices and re-assigns them to the timesheet task * only maps Selected services ### validateTaskTimes * only validates selected task times ### setTaskTimeNullEndTimes * only modifies selected task times * sets the EndTime of task times with null end times to the supplied end time * sets ManualStopTime to the "now" if manualEdit is true * sets EditStopLatitude/EditStopLongitude to the supplied lat/lng if manualEdit is true * sets EditStopLatitude/EditStopLongitude to 0 if manualEdit is false # Review Timesheets Service ### getReviewTimesheetData * sets TimesheetApproved to false when timesheet.TimesheetStatusId is 1 * sets TimesheetApproved to true when timesheet.TimesheetStatusId is not 1 * sets timesheetDate to timesheet.TimesheetDate * sets absentEmployees to all employees marked absent * sets employees only to employees who are not absent * sets an employee's start time to their earliest start time, end time to their latest end time, and total time * sets the TotalTime for each task * sets the RateHours for each rate # Select Crew Service ### getDefaultSelectedEmployees * sets selected to true for non absent and non-clocked-in employees, false otherwise ### getNonDefaultEmployees * sets selected to true for non absent and non-clocked-in employees, false otherwise ### isEmployeeSelectionValid * is valid when at least one employee is selected * is invalid when no employees are selected ### getFilteredEmployeesForStaffSelection * is not filtered when the staffGroupId is 0 * filters employees based on staffGroupId # Timesheet Service ### getTasksOnDateChanged * returns an empty array when provided a timesheet with no tasks * sets a new task startTime and endTime when date changes * sets a startTime and endTime on all taskTimes when date changes * does not change task endTime when endTime is null (pending task) * does not change taskTime endTime when endTime is null (pending task) ### getTimesheetEmployeesOnDateChanged * returns an empty array when provided a timesheet with no timesheet employees * sets a new LunchStartTime when a lunch has been applied * does not modify LunchStartTime when no lunch has been applied # Timesheets Service ### removeDuplicateTimesheetData * should retain all unique timesheet employees by EmployeeID # Tracking Service ### getEmployeeTracking$ * filters the response employees to only the ones present in the access list * sets the employees "as-is" if there are no IDs in the employeeaccesslist # Utilities service ### validateDates * should resolve when startTime and endTime do not belong to the same 60 second interval * should reject when startTime and endTime belong to the same minute * should resolve when startTime or endTime is not in the future and AllowFutureClockout is false * should reject when startTime or endTime is in the future and AllowFutureClockout is false * should resolve when endTime is in the future and AllowFutureClockout is true * should reject when startTime is after endTime * should reject when difference between times is > 48 hours * should reject when difference between first task time and startTime or endTime is > 48 hours * should reject when the startTime is > 24 hours from timesheetDate * should reject when the endTime is > 24 hours from timesheetDate * should resolve when the startTime is <= 24 hours from timesheetDate * should resolve when the endTime is <= 24 hours from timesheetDate * should reject when the startTime and endTime have more than 48 hours difference between them * should resolve when the startTime and endTime have <= 48 hours difference between them * should resolve when the startTime is earlier than the firstTaskStartTime on an open task * should resolve when the endTime is null