1package bootstrap
2
3import (
4 "context"
5 "path/filepath"
6 "testing"
7
8 "github.com/bnema/dumber/internal/infrastructure/cef"
9 "github.com/bnema/dumber/internal/infrastructure/config"
10 "github.com/bnema/dumber/internal/infrastructure/runtimeprofile"
11 "github.com/stretchr/testify/require"
12)
13
14func TestBuildEngine_UnknownType(t *testing.T) {
15 cfg := config.DefaultConfig()
16 cfg.Engine.Type = "unknown"
17 _, err := BuildEngine(EngineInput{Config: cfg, Ctx: context.Background()})
18 require.Error(t, err)
19 require.Contains(t, err.Error(), "unknown engine type")
20}
21
22func TestBuildEngine_CEF_ReturnsErrorWhenRuntimeUnavailable(t *testing.T) {
23 cfg := config.DefaultConfig()
24 cfg.Engine.Type = "cef"
25 cfg.Engine.CEF.CEFDir = t.TempDir()
26 _, err := BuildEngine(EngineInput{Config: cfg, Ctx: context.Background(), RuntimeProfile: testRuntimeProfile(t)})
27 require.Error(t, err)
28 require.Contains(t, err.Error(), "cef.InitWithApp")
29}
30
31func TestBuildEngine_CEF_ReturnsErrorForUnsupportedCookiePolicy(t *testing.T) {
32 cfg := config.DefaultConfig()
33 cfg.Engine.Type = "cef"
34 cfg.Engine.CookiePolicy = config.CookiePolicyNever
35 _, err := BuildEngine(EngineInput{Config: cfg, Ctx: context.Background(), RuntimeProfile: testRuntimeProfile(t)})
36 require.ErrorIs(t, err, cef.ErrCookiePolicyUnsupported)
37}
38
39func TestBuildEngine_CEF_AllowsNoThirdPartyCookiePolicy(t *testing.T) {
40 cfg := config.DefaultConfig()
41 cfg.Engine.Type = "cef"
42 cfg.Engine.CookiePolicy = config.CookiePolicyNoThirdParty
43 cfg.Engine.CEF.CEFDir = t.TempDir()
44 _, err := BuildEngine(EngineInput{Config: cfg, Ctx: context.Background(), RuntimeProfile: testRuntimeProfile(t)})
45 require.NotErrorIs(t, err, cef.ErrCookiePolicyUnsupported)
46}
47
48func TestBuildEngine_ReceivesResolvedProfile(t *testing.T) {
49 cfg := config.DefaultConfig()
50 cfg.Engine.Type = config.EngineTypeCEF
51 cfg.Engine.CEF.CEFDir = t.TempDir()
52
53 _, err := BuildEngine(EngineInput{Config: cfg, Ctx: context.Background(), RuntimeProfile: testRuntimeProfile(t)})
54 require.Error(t, err)
55 require.NotContains(t, err.Error(), "missing runtime profile")
56}
57
58func testRuntimeProfile(t *testing.T) runtimeprofile.Profile {
59 t.Helper()
60 root := t.TempDir()
61 profile, err := runtimeprofile.Resolve(runtimeprofile.ResolveInput{
62 Env: func(string) string { return "" },
63 Engine: config.EngineTypeCEF,
64 CWD: func() (string, error) { return root, nil },
65 Base: runtimeprofile.BasePaths{
66 ConfigHome: filepath.Join(root, "config"),
67 DataHome: filepath.Join(root, "data"),
68 StateHome: filepath.Join(root, "state"),
69 CacheHome: filepath.Join(root, "cache"),
70 },
71 })
72 require.NoError(t, err)
73 return profile
74}