SearchCriteriaInterpretationTests.swift 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // SearchCriteriaInterpretationTests.swift
  3. // indeed_ai_job_searchTests
  4. //
  5. import XCTest
  6. @testable import indeed_ai_job_search
  7. final class SearchCriteriaInterpretationTests: XCTestCase {
  8. func testDecodesStructuredCriteriaJSON() throws {
  9. let json = """
  10. {
  11. "jobTitle": "iOS Developer",
  12. "keywords": "SwiftUI",
  13. "exactPhrase": false,
  14. "excludedKeywords": "Flutter",
  15. "country": "Pakistan",
  16. "city": "Lahore",
  17. "remoteTypes": ["remote", "hybrid"],
  18. "employmentTypes": ["fullTime"],
  19. "experienceLevels": ["senior"],
  20. "salaryFloor": 2000000,
  21. "dateFreshnessDays": 7,
  22. "confidenceNote": "Clear remote senior iOS intent."
  23. }
  24. """
  25. let dto = try JSONDecoder().decode(
  26. SearchCriteriaInterpretationDTO.self,
  27. from: Data(json.utf8)
  28. )
  29. let criteria = dto.toSearchCriteria()
  30. XCTAssertEqual(criteria.jobTitle, "iOS Developer")
  31. XCTAssertEqual(criteria.keywords, "SwiftUI")
  32. XCTAssertEqual(criteria.excludedKeywords, "Flutter")
  33. XCTAssertEqual(criteria.country, "Pakistan")
  34. XCTAssertEqual(criteria.city, "Lahore")
  35. XCTAssertEqual(criteria.remoteTypes, Set([.remote, .hybrid]))
  36. XCTAssertEqual(criteria.employmentTypes, Set([.fullTime]))
  37. XCTAssertEqual(criteria.experienceLevels, Set([.senior]))
  38. XCTAssertEqual(criteria.salaryFloor, 2_000_000)
  39. XCTAssertEqual(criteria.dateFreshnessDays, 7)
  40. XCTAssertEqual(dto.confidenceNote, "Clear remote senior iOS intent.")
  41. }
  42. func testMapsAlternateRemoteSpelling() {
  43. let dto = SearchCriteriaInterpretationDTO(
  44. remoteTypes: ["on-site", "Remote"]
  45. )
  46. let criteria = dto.toSearchCriteria()
  47. XCTAssertEqual(criteria.remoteTypes, Set([.onsite, .remote]))
  48. }
  49. func testObfuscationRoundTrip() {
  50. let sample = "sk-proj-test-key-not-real"
  51. let obfuscated = SecretsProvider.obfuscateForConfig(sample)
  52. let restored = SecretsProvider.deobfuscate(obfuscated)
  53. XCTAssertEqual(restored, sample)
  54. }
  55. }