Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,42 @@
import { resolveIdentifiers } from '../utils'
import { resolveIdentifiers, isIsoDate } from '../utils'

describe('isIsoDate', () => {
it('should return true for valid ISO date with fractional seconds from 1-9 digits', () => {
expect(isIsoDate('2023-12-25T14:30:45.1')).toBe(true) // 1 digit
expect(isIsoDate('2023-12-25T14:30:45.12')).toBe(true) // 2 digits
expect(isIsoDate('2023-12-25T14:30:45.123')).toBe(true) // 3 digits
expect(isIsoDate('2023-12-25T14:30:45.1234')).toBe(true) // 4 digits
expect(isIsoDate('2023-12-25T14:30:45.12345')).toBe(true) // 5 digits
expect(isIsoDate('2023-12-25T14:30:45.123456')).toBe(true) // 6 digits
expect(isIsoDate('2023-12-25T14:30:45.1234567')).toBe(true) // 7 digits
expect(isIsoDate('2023-12-25T14:30:45.12345678')).toBe(true) // 8 digits
expect(isIsoDate('2023-12-25T14:30:45.123456789')).toBe(true) // 9 digits
})

it('should return true for valid ISO date with fractional seconds and timezone', () => {
expect(isIsoDate('2023-12-25T14:30:45.123Z')).toBe(true) // UTC
expect(isIsoDate('2023-12-25T14:30:45.123456+05:30')).toBe(true) // timezone offset
expect(isIsoDate('2023-12-25T14:30:45.123456789-08:00')).toBe(true) // negative timezone
})

it('should return true for valid ISO date without fractional seconds', () => {
expect(isIsoDate('2023-12-25T14:30:45')).toBe(true)
expect(isIsoDate('2023-12-25T14:30:45Z')).toBe(true)
expect(isIsoDate('2023-12-25')).toBe(true) // date only
})

it('should return false for invalid fractional seconds i.e more than 9 digits', () => {
expect(isIsoDate('2023-12-25T14:30:45.1234567890')).toBe(false) // 10 digits
expect(isIsoDate('2023-12-25T14:30:45.12345678901')).toBe(false) // 11 digits
})

it('should return false for invalid date formats', () => {
expect(isIsoDate('invalid-date')).toBe(false)
expect(isIsoDate('2023-13-25')).toBe(false) // invalid month
expect(isIsoDate('2023-12-32')).toBe(false) // invalid day
expect(isIsoDate('2023-12-25T25:30:45')).toBe(false) // invalid hour
})
})

describe('resolveIdentifiers', () => {
it('should return object_id and object_type_id if both are provided', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ const isIsoDate = (value: string): boolean => {
const isoformat =
'^\\d{4}-\\d{2}-\\d{2}' + // Match YYYY-MM-DD
'((T\\d{2}:\\d{2}(:\\d{2})?)' + // Match THH:mm:ss
'(\\.\\d{1,6})?' + // Match .sssss
'(\\.\\d{1,9})?' + // Match .sssssss
'(Z|(\\+|-)\\d{2}:?\\d{2})?)?$' // Time zone (Z or ±hh:mm or ±hhmm)

const matcher = new RegExp(isoformat)
Expand Down Expand Up @@ -213,9 +213,10 @@ export const sendBatch = <Payload extends BasePayload>(request: Function, option

export const sendSingle = <Payload extends BasePayload>(request: Function, options: RequestPayload<Payload>) => {
const json = buildPayload(options)

return request(`${trackApiEndpoint(options.settings)}/api/v2/entity`, {
method: 'post',
json
})
}

export { isIsoDate }
Loading