mirror of
https://github.com/kennethnym/aris.git
synced 2026-03-20 09:01:19 +00:00
feat: add actions to FeedSource interface
Add listActions() and executeAction() to FeedSource for write operations back to external services. Actions use arktype schemas for input validation via StandardSchemaV1. - ActionDefinition type with optional input schema - FeedEngine routes actions with existence and ID validation - Source IDs use reverse-domain format (aris.location, aris.tfl) - LocationSource: update-location action with schema validation - TflSource: set-lines-of-interest action with lineId validation - No-op implementations for sources without actions Co-authored-by: Ona <no-reply@ona.com>
This commit is contained in:
@@ -26,14 +26,18 @@ const createMockContext = (location?: { lat: number; lng: number }): Context =>
|
||||
|
||||
describe("WeatherKitDataSource", () => {
|
||||
test("returns empty array when location is missing", async () => {
|
||||
const dataSource = new WeatherKitDataSource({ credentials: mockCredentials })
|
||||
const dataSource = new WeatherKitDataSource({
|
||||
credentials: mockCredentials,
|
||||
})
|
||||
const items = await dataSource.query(createMockContext())
|
||||
|
||||
expect(items).toEqual([])
|
||||
})
|
||||
|
||||
test("type is weather-current", () => {
|
||||
const dataSource = new WeatherKitDataSource({ credentials: mockCredentials })
|
||||
const dataSource = new WeatherKitDataSource({
|
||||
credentials: mockCredentials,
|
||||
})
|
||||
|
||||
expect(dataSource.type).toBe(WeatherFeedItemType.current)
|
||||
})
|
||||
@@ -100,7 +104,9 @@ describe("WeatherKitDataSource with fixture", () => {
|
||||
})
|
||||
|
||||
test("default limits are applied", () => {
|
||||
const dataSource = new WeatherKitDataSource({ credentials: mockCredentials })
|
||||
const dataSource = new WeatherKitDataSource({
|
||||
credentials: mockCredentials,
|
||||
})
|
||||
|
||||
expect(dataSource["hourlyLimit"]).toBe(12)
|
||||
expect(dataSource["dailyLimit"]).toBe(7)
|
||||
@@ -163,8 +169,12 @@ describe("query() with mocked client", () => {
|
||||
const dataSource = new WeatherKitDataSource({ client: mockClient })
|
||||
const context = createMockContext({ lat: 37.7749, lng: -122.4194 })
|
||||
|
||||
const metricItems = await dataSource.query(context, { units: Units.metric })
|
||||
const imperialItems = await dataSource.query(context, { units: Units.imperial })
|
||||
const metricItems = await dataSource.query(context, {
|
||||
units: Units.metric,
|
||||
})
|
||||
const imperialItems = await dataSource.query(context, {
|
||||
units: Units.imperial,
|
||||
})
|
||||
|
||||
const metricCurrent = metricItems.find((i) => i.type === WeatherFeedItemType.current)
|
||||
const imperialCurrent = imperialItems.find((i) => i.type === WeatherFeedItemType.current)
|
||||
|
||||
Reference in New Issue
Block a user