Files
apex-public/internal/scan/discover_test.go
T
2026-07-06 11:05:50 -04:00

102 lines
2.5 KiB
Go

package scan
import (
"context"
"errors"
"testing"
)
func TestDiscoverer_DirectWorkdayURL(t *testing.T) {
d := &Discoverer{}
out, err := d.Discover(context.Background(),
"https://accenture.wd3.myworkdayjobs.com/en-US/AccentureCareers")
if err != nil {
t.Fatalf("Discover: %v", err)
}
if out.Host != "https://accenture.wd3.myworkdayjobs.com" {
t.Errorf("host = %q", out.Host)
}
if out.Tenant != "accenture" {
t.Errorf("tenant = %q", out.Tenant)
}
if out.Site != "AccentureCareers" {
t.Errorf("site = %q", out.Site)
}
if out.Source != "url" {
t.Errorf("source = %q, want url", out.Source)
}
}
func TestDiscoverer_InvalidInput(t *testing.T) {
d := &Discoverer{}
if _, err := d.Discover(context.Background(), ""); err == nil {
t.Fatal("empty input must error")
}
if _, err := d.Discover(context.Background(), "not a url"); err == nil {
t.Fatal("bad url must error")
}
}
func TestDiscoverer_NoScript_NoMatch(t *testing.T) {
d := &Discoverer{}
_, err := d.Discover(context.Background(), "https://careers.example.com/jobs")
if !errors.Is(err, ErrNoDiscovery) {
t.Fatalf("expected ErrNoDiscovery, got %v", err)
}
}
func TestParseDiscoverOutput_PullsWorkdayFromYAML(t *testing.T) {
raw := `...some preamble...
- name: KPMG
careers_url: https://kpmg.wd5.myworkdayjobs.com/Global
workday:
host: https://kpmg.wd5.myworkdayjobs.com
tenant: kpmg
site: Global
enabled: true`
d := parseDiscoverOutput("https://kpmg.com/careers", raw)
if d.Host != "https://kpmg.wd5.myworkdayjobs.com" {
t.Errorf("host = %q", d.Host)
}
if d.Tenant != "kpmg" {
t.Errorf("tenant = %q", d.Tenant)
}
if d.Site != "Global" {
t.Errorf("site = %q", d.Site)
}
}
func TestYAMLSnippet_IncludesAllFields(t *testing.T) {
d := WorkdayDiscovery{
Host: "https://acme.wd3.myworkdayjobs.com",
Tenant: "acme",
Site: "Careers",
}
snip := d.YAMLSnippet("Acme Corp")
for _, want := range []string{
"name: Acme Corp",
"tenant: acme",
"site: Careers",
"host: https://acme.wd3.myworkdayjobs.com",
"enabled: true",
} {
if !contains(snip, want) {
t.Errorf("snippet missing %q: %s", want, snip)
}
}
}
// contains is a thin wrapper so I don't drag strings.Contains into every test.
func contains(haystack, needle string) bool {
return len(haystack) >= len(needle) && indexOf(haystack, needle) >= 0
}
func indexOf(haystack, needle string) int {
for i := 0; i+len(needle) <= len(haystack); i++ {
if haystack[i:i+len(needle)] == needle {
return i
}
}
return -1
}