Files
wehub-resource-sync d18ada4ee7
Docker Publish / docker (web, apps/web/Dockerfile, web) (push) Failing after 0s
Docker Publish / docker (api, apps/api/Dockerfile, api) (push) Failing after 1s
Publish Extension / detect-version (push) Has been skipped
Publish Extension / submit (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:24:41 +08:00

70 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { subscriptionContract } from '../src/contract'
import {
ResolvedFeedSchema,
SubscriptionCreateInputSchema,
SubscriptionListOutputSchema,
SubscriptionRuleSchema
} from '../src/schemas'
describe('subscriptionContract', () => {
it('exposes the nine documented routes', () => {
expect(Object.keys(subscriptionContract).sort()).toEqual(
[
'add',
'get',
'itemsList',
'itemsQueue',
'list',
'remove',
'refresh',
'resolve',
'update'
].sort()
)
})
it('validates a well-formed Subscription', () => {
const raw = {
id: 'sub-1',
title: 'My YT',
sourceUrl: 'https://example.com',
feedUrl: 'https://example.com/feed.xml',
platform: 'youtube',
keywords: ['tutorial'],
tags: [],
onlyDownloadLatest: true,
enabled: true,
status: 'idle',
createdAt: 1,
updatedAt: 1
}
const parsed = SubscriptionRuleSchema.safeParse(raw)
expect(parsed.success).toBe(true)
})
it('rejects unknown platform values', () => {
const raw = {
sourceUrl: 'https://example.com',
feedUrl: 'https://example.com/feed.xml',
platform: 'twitter'
}
const parsed = SubscriptionCreateInputSchema.safeParse(raw)
expect(parsed.success).toBe(false)
})
it('ResolvedFeedSchema rejects empty URLs', () => {
const parsed = ResolvedFeedSchema.safeParse({
sourceUrl: '',
feedUrl: '',
platform: 'custom'
})
expect(parsed.success).toBe(false)
})
it('SubscriptionListOutputSchema accepts an empty result', () => {
const parsed = SubscriptionListOutputSchema.safeParse({ items: [], total: 0 })
expect(parsed.success).toBe(true)
})
})