102 lines
2.5 KiB
Go
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
|
|
}
|