request-zone.spec.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { describe, expect, it } from 'vitest'
  2. import { createUserMessage } from '@deepseek-ai/dsh-llm'
  3. import * as timeContext from '@deepseek-ai/dsh-time-context'
  4. import {
  5. deriveClientTimeZoneContext,
  6. } from '@deepseek-ai/dsh-time-context'
  7. import { renderTimeZoneContext } from '../src/request-zone.ts'
  8. function request(clientTimeZone?: unknown) {
  9. return createUserMessage({
  10. content: [{ type: 'text', text: 'request' }],
  11. source: clientTimeZone === undefined
  12. ? { kind: 'user' }
  13. : { kind: 'user', clientTimeZone } as never,
  14. })
  15. }
  16. describe('request-zone derivation', () => {
  17. it('publishes derivation without exposing the internal renderer', () => {
  18. expect(timeContext.deriveClientTimeZoneContext).toBe(deriveClientTimeZoneContext)
  19. expect('renderTimeZoneContext' in timeContext).toBe(false)
  20. })
  21. it('derives missing, one resolved zone, and sorted unique mixed zones', () => {
  22. const plugin = createUserMessage({
  23. content: [],
  24. source: { kind: 'plugin', plugin: 'fixture' },
  25. })
  26. expect(deriveClientTimeZoneContext([plugin, request(), request(1)])).toEqual({ kind: 'missing' })
  27. expect(deriveClientTimeZoneContext([
  28. request('Asia/Shanghai'),
  29. request('Asia/Shanghai'),
  30. ])).toEqual({ kind: 'resolved', timeZone: 'Asia/Shanghai' })
  31. expect(deriveClientTimeZoneContext([
  32. request('Asia/Shanghai'),
  33. request('America/New_York'),
  34. ])).toEqual({
  35. kind: 'mixed',
  36. timeZones: ['America/New_York', 'Asia/Shanghai'],
  37. })
  38. })
  39. it('renders resolved, mixed, and unavailable policy lines', () => {
  40. expect(renderTimeZoneContext('Asia/Shanghai', {
  41. kind: 'resolved',
  42. timeZone: 'Asia/Shanghai',
  43. })).toBe(
  44. 'Session time zone: Asia/Shanghai.\nClient time zone for this request: Asia/Shanghai.',
  45. )
  46. expect(renderTimeZoneContext('UTC', {
  47. kind: 'mixed',
  48. timeZones: ['America/New_York', 'UTC'],
  49. })).toBe(
  50. 'Session time zone: UTC.\nClient time zone for this request: mixed ["America/New_York","UTC"].',
  51. )
  52. expect(renderTimeZoneContext(undefined, { kind: 'missing' })).toBe(
  53. 'Session time zone: unavailable.\nClient time zone for this request: missing.',
  54. )
  55. })
  56. })