feat: collect JSON and XML feeds
This commit is contained in:
@@ -2,6 +2,7 @@ package dataset
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
@@ -63,17 +64,21 @@ func TestDatasetAPIConnectsSourcesItemsAndSyncTasks(t *testing.T) {
|
||||
require.True(t, item.Starred)
|
||||
|
||||
firstSync := performDatasetRequest(t, ownerRouter, http.MethodPost, "/api/v1/dataset-crons/sync", map[string]any{})
|
||||
require.Equal(t, http.StatusAccepted, firstSync.Code)
|
||||
require.Equal(t, http.StatusOK, firstSync.Code)
|
||||
var firstCrons []CronDTO
|
||||
require.NoError(t, json.Unmarshal(firstSync.Body.Bytes(), &firstCrons))
|
||||
require.Len(t, firstCrons, 1)
|
||||
require.Equal(t, "pending", firstCrons[0].Status)
|
||||
require.Equal(t, "completed", firstCrons[0].Status)
|
||||
require.Contains(t, firstCrons[0].LastResult, "format=rss")
|
||||
|
||||
secondSync := performDatasetRequest(t, ownerRouter, http.MethodPost, "/api/v1/dataset-crons/sync", map[string]any{})
|
||||
require.Equal(t, http.StatusAccepted, secondSync.Code)
|
||||
require.Equal(t, http.StatusOK, secondSync.Code)
|
||||
var secondCrons []CronDTO
|
||||
require.NoError(t, json.Unmarshal(secondSync.Body.Bytes(), &secondCrons))
|
||||
require.Equal(t, firstCrons[0].ID, secondCrons[0].ID)
|
||||
require.NotEqual(t, firstCrons[0].ID, secondCrons[0].ID)
|
||||
var collectedItems []models.SaDatasetItem
|
||||
require.NoError(t, database.Where("source_id = ?", 1).Find(&collectedItems).Error)
|
||||
require.Len(t, collectedItems, 2)
|
||||
|
||||
otherRouter := datasetTestRouter(database, other.ID)
|
||||
otherSources := performDatasetRequest(t, otherRouter, http.MethodGet, "/api/v1/dataset-sources", nil)
|
||||
@@ -117,10 +122,25 @@ func datasetTestRouter(database *gorm.DB, userID uint) http.Handler {
|
||||
return httpx.NewProtectedRouter(
|
||||
config.Config{Env: "test"},
|
||||
func(string) (uint, error) { return userID, nil },
|
||||
NewHandler(NewService(database)),
|
||||
NewHandler(newServiceWithFetcher(database, staticFeedFetcher{})),
|
||||
)
|
||||
}
|
||||
|
||||
type staticFeedFetcher struct{}
|
||||
|
||||
func (staticFeedFetcher) Fetch(context.Context, string) (ParsedFeed, error) {
|
||||
return ParsedFeed{
|
||||
Format: "rss",
|
||||
Items: []FeedItem{{
|
||||
ExternalID: "stable-feed-item",
|
||||
Title: "Collected item",
|
||||
Summary: "Collected summary",
|
||||
Content: "Collected content",
|
||||
URL: "https://example.com/collected",
|
||||
}},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func performDatasetRequest(t *testing.T, router http.Handler, method, path string, body any) *httptest.ResponseRecorder {
|
||||
t.Helper()
|
||||
var encoded []byte
|
||||
|
||||
Reference in New Issue
Block a user