diff --git a/EmployeeDirectory/Services/MockEmployeeService.swift b/EmployeeDirectory/Services/MockEmployeeService.swift new file mode 100644 index 0000000..40206c9 --- /dev/null +++ b/EmployeeDirectory/Services/MockEmployeeService.swift @@ -0,0 +1,43 @@ +// +// MockEmployeeService.swift +// EmployeeDirectory +// +// Created by Matt Bruce on 1/21/25. +// +import Foundation + +public class MockEmployeeService: EmployeeServiceProtocol { + // MARK: - Properties + public static let shared = MockEmployeeService() // Default shared instance + private let employees: Employees + + // MARK: - Initializer + + public init() { + let jsonFileName = "localTest" + guard let url = Bundle.main.url(forResource: jsonFileName, withExtension: "json"), + let data = try? Data(contentsOf: url), + let localData = try? JSONDecoder().decode(Employees.self, from: data) else { + employees = .init(employees: [], total: 0, page: 0, perPage: 0) + return + } + employees = localData + } + + public func getEmployees(_ serviceMode: EmployeeServiceMode) async throws -> Employees { + return employees + } + + public func getEmployees(_ serviceMode: EmployeeServiceMode, page: Int, perPage: Int) async throws -> Employees { + let totalUsers = employees.employees.count + let startIndex = (page - 1) * perPage + let endIndex = min(startIndex + perPage, totalUsers) + + guard startIndex < totalUsers else { + return .init(employees: [], total: totalUsers, page: page, perPage: perPage) // Return empty if out of bounds + } + + let paginatedUsers = Array(employees.employees[startIndex..