mirror of
https://github.com/stashapp/stash.git
synced 2026-05-09 05:05:29 +02:00
Merge 8c81c8ee85 into 01a7583364
This commit is contained in:
commit
b3ad051b1f
2 changed files with 54 additions and 58 deletions
|
|
@ -184,9 +184,14 @@ func (s mappedScraper) scrapeScene(ctx context.Context, q mappedQuery) (*models.
|
|||
logger.Debug(`Processing scene:`)
|
||||
results := sceneMap.process(ctx, q, s.Common, urlsIsMulti)
|
||||
|
||||
// Ensure ret is non-nil before calling processSceneRelationships so it can
|
||||
// safely populate relationship fields even when no direct results were found.
|
||||
// This preserves the intent of #3953: returning a scene with only relationships.
|
||||
var ret *models.ScrapedScene
|
||||
if len(results) > 0 {
|
||||
ret = results[0].scrapedScene()
|
||||
} else {
|
||||
ret = &models.ScrapedScene{}
|
||||
}
|
||||
hasRelationships := s.processSceneRelationships(ctx, q, 0, ret)
|
||||
|
||||
|
|
|
|||
|
|
@ -683,74 +683,65 @@ func verifyPerformers(t *testing.T, expectedNames []string, expectedURLs []strin
|
|||
}
|
||||
}
|
||||
|
||||
func TestApplySceneXPathConfig(t *testing.T) {
|
||||
reader := strings.NewReader(sceneHTML)
|
||||
doc, err := htmlquery.Parse(reader)
|
||||
func TestApplySceneXPathConfigRelationshipsOnly(t *testing.T) {
|
||||
reader := strings.NewReader(sceneHTML)
|
||||
doc, err := htmlquery.Parse(reader)
|
||||
if err != nil {
|
||||
t.Fatalf("Error loading document: %s", err.Error())
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("Error loading document: %s", err.Error())
|
||||
return
|
||||
}
|
||||
scraper := makeSceneXPathConfig()
|
||||
|
||||
scraper := makeSceneXPathConfig()
|
||||
// Simulate the relationships-only scrape path:
|
||||
// no direct scene fields, but populated Performers/Tags mappings.
|
||||
scraper.Scene.mappedConfig = make(mappedConfig)
|
||||
scraper.Scene.Studio = nil
|
||||
scraper.Scene.Movies = nil
|
||||
scraper.Scene.Groups = nil
|
||||
|
||||
q := &xpathQuery{
|
||||
doc: doc,
|
||||
}
|
||||
scene, err := scraper.scrapeScene(context.Background(), q)
|
||||
q := &xpathQuery{
|
||||
doc: doc,
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("Error scraping scene: %s", err.Error())
|
||||
return
|
||||
}
|
||||
var scene *models.ScrapedScene
|
||||
assert.NotPanics(t, func() {
|
||||
scene, err = scraper.scrapeScene(context.Background(), q)
|
||||
}, "relationships-only scene scrape should not panic")
|
||||
|
||||
const title = "Test Video"
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, scene)
|
||||
|
||||
verifyField(t, title, scene.Title, "Title")
|
||||
// No direct scene fields should be populated.
|
||||
assert.Nil(t, scene.Title)
|
||||
assert.Nil(t, scene.Date)
|
||||
|
||||
// verify tags
|
||||
expectedTags := []string{
|
||||
"Amateur",
|
||||
"Babe",
|
||||
"Blowjob",
|
||||
"Exclusive",
|
||||
"HD Porn",
|
||||
"Pornstar",
|
||||
"Public",
|
||||
"Pussy Licking",
|
||||
"Threesome",
|
||||
"Verified Models",
|
||||
}
|
||||
verifyTags(t, expectedTags, scene.Tags)
|
||||
expectedTags := []string{
|
||||
"Amateur",
|
||||
"Babe",
|
||||
"Blowjob",
|
||||
"Exclusive",
|
||||
"HD Porn",
|
||||
"Pornstar",
|
||||
"Public",
|
||||
"Pussy Licking",
|
||||
"Threesome",
|
||||
"Verified Models",
|
||||
}
|
||||
verifyTags(t, expectedTags, scene.Tags)
|
||||
|
||||
// verify movies
|
||||
expectedMovies := []string{
|
||||
"Video",
|
||||
"of",
|
||||
"verified",
|
||||
"member",
|
||||
}
|
||||
verifyMovies(t, expectedMovies, scene.Movies)
|
||||
expectedPerformerNames := []string{
|
||||
"Alex D",
|
||||
"Mia Malkova",
|
||||
"Riley Reid",
|
||||
}
|
||||
|
||||
expectedPerformerNames := []string{
|
||||
"Alex D",
|
||||
"Mia Malkova",
|
||||
"Riley Reid",
|
||||
}
|
||||
expectedPerformerURLs := []string{
|
||||
"/pornstar/alex-d",
|
||||
"/pornstar/mia-malkova",
|
||||
"/pornstar/riley-reid",
|
||||
}
|
||||
|
||||
expectedPerformerURLs := []string{
|
||||
"/pornstar/alex-d",
|
||||
"/pornstar/mia-malkova",
|
||||
"/pornstar/riley-reid",
|
||||
}
|
||||
|
||||
verifyPerformers(t, expectedPerformerNames, expectedPerformerURLs, scene.Performers)
|
||||
|
||||
const expectedStudioName = "Sis Loves Me"
|
||||
const expectedStudioURL = "/channels/sis-loves-me"
|
||||
|
||||
verifyField(t, expectedStudioName, &scene.Studio.Name, "Studio.Name")
|
||||
verifyField(t, expectedStudioURL, scene.Studio.URL, "Studio.URL")
|
||||
verifyPerformers(t, expectedPerformerNames, expectedPerformerURLs, scene.Performers)
|
||||
}
|
||||
|
||||
func TestLoadXPathScraperFromYAML(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue