diff options
| author | Philipp Tanlak <philipp.tanlak@gmail.com> | 2025-01-10 12:49:32 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-10 12:49:32 +0100 |
| commit | bf99c233a18c3165e0d4d251b41224e5bc6eb93d (patch) | |
| tree | d32f0fd0770a049552cdd0d51e9402d594e9a35e /js_test.go | |
| parent | 924184f37ef0d3e244f8e8991c259affb45d0ae2 (diff) | |
Implement nested scraping (#81)
Diffstat (limited to 'js_test.go')
| -rw-r--r-- | js_test.go | 92 |
1 files changed, 92 insertions, 0 deletions
@@ -168,6 +168,98 @@ func TestJSScrapeNaN(t *testing.T) { require.Nil(t, result) } +func TestJSScrapeParamURL(t *testing.T) { + js := ` + export default function({ url }) { + return url; + } + ` + exports, err := flyscrape.Compile(js, nil) + require.NoError(t, err) + + result, err := exports.Scrape(flyscrape.ScrapeParams{ + HTML: html, + URL: "http://localhost/", + }) + require.NoError(t, err) + require.Equal(t, "http://localhost/", result) +} + +func TestJSScrapeParamAbsoluteURL(t *testing.T) { + js := ` + export default function({ absoluteURL }) { + return absoluteURL("/foo"); + } + ` + exports, err := flyscrape.Compile(js, nil) + require.NoError(t, err) + + result, err := exports.Scrape(flyscrape.ScrapeParams{ + HTML: html, + URL: "http://localhost/", + }) + require.NoError(t, err) + require.Equal(t, "http://localhost/foo", result) +} + +func TestJSScrapeParamScrape(t *testing.T) { + js := ` + export default function({ scrape }) { + return scrape("/foo", function({ url }) { + return { + url: url, + foo: "bar", + }; + }); + } + ` + exports, err := flyscrape.Compile(js, nil) + require.NoError(t, err) + + result, err := exports.Scrape(flyscrape.ScrapeParams{ + HTML: html, + URL: "http://localhost/", + Process: func(url string) ([]byte, error) { + return nil, nil + }, + }) + require.NoError(t, err) + require.Equal(t, map[string]any{ + "url": "http://localhost/foo", + "foo": "bar", + }, result) +} + +func TestJSScrapeParamScrapeDeep(t *testing.T) { + js := ` + export default function({ scrape }) { + return scrape("/foo/", function({ url, scrape }) { + return { + url: url, + deep: scrape("bar", function({ url }) { + return url; + }), + }; + }); + } + ` + exports, err := flyscrape.Compile(js, nil) + require.NoError(t, err) + + result, err := exports.Scrape(flyscrape.ScrapeParams{ + HTML: html, + URL: "http://localhost/", + Process: func(url string) ([]byte, error) { + return nil, nil + }, + }) + require.NoError(t, err) + require.Equal(t, map[string]any{ + "url": "http://localhost/foo/", + "deep": "http://localhost/foo/bar", + }, result) +} + func TestJSCompileError(t *testing.T) { exports, err := flyscrape.Compile("import foo;", nil) require.Error(t, err) |