remove preact and create setup wizard
This commit is contained in:
@@ -32,6 +32,10 @@ type apiTestServer struct {
|
||||
}
|
||||
|
||||
func newAPITestServer(t *testing.T) *apiTestServer {
|
||||
return newAPITestServerWithSetup(t, true)
|
||||
}
|
||||
|
||||
func newAPITestServerWithSetup(t *testing.T, setupComplete bool) *apiTestServer {
|
||||
t.Helper()
|
||||
|
||||
ctx := context.Background()
|
||||
@@ -69,9 +73,12 @@ func newAPITestServer(t *testing.T) *apiTestServer {
|
||||
if err != nil {
|
||||
t.Fatalf("create auth service: %v", err)
|
||||
}
|
||||
user, err := authService.RegisterPasswordUser(ctx, "editor@example.com", "Editor", "very secure password", string(auth.RoleEditor))
|
||||
if err != nil {
|
||||
t.Fatalf("create test user: %v", err)
|
||||
var user auth.User
|
||||
if setupComplete {
|
||||
user, err = authService.CompleteInitialSetup(ctx, "editor@example.com", "Editor", "very secure password", false)
|
||||
if err != nil {
|
||||
t.Fatalf("create test user: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
syncRepo := sync.NewRepository(db.SQL())
|
||||
@@ -81,7 +88,6 @@ func newAPITestServer(t *testing.T) *apiTestServer {
|
||||
SourceDir: sourceDir,
|
||||
StoreDir: storeDir,
|
||||
},
|
||||
Web: config.WebConfig{DistDir: filepath.Join(root, "web-dist")},
|
||||
Auth: config.AuthConfig{PublicOrigin: "http://localhost:8080"},
|
||||
},
|
||||
Logger: logger,
|
||||
@@ -106,6 +112,54 @@ func newAPITestServer(t *testing.T) *apiTestServer {
|
||||
}
|
||||
}
|
||||
|
||||
func TestInitialSetupWizardCreatesAdminAndPersistsSignupPolicy(t *testing.T) {
|
||||
server := newAPITestServerWithSetup(t, false)
|
||||
|
||||
index := httptest.NewRecorder()
|
||||
server.handler.ServeHTTP(index, httptest.NewRequest(http.MethodGet, "/", nil))
|
||||
if index.Code != http.StatusSeeOther || index.Header().Get("Location") != "/setup" {
|
||||
t.Fatalf("initial index response = %d %q, want redirect to /setup", index.Code, index.Header().Get("Location"))
|
||||
}
|
||||
|
||||
setupPage := httptest.NewRecorder()
|
||||
server.handler.ServeHTTP(setupPage, httptest.NewRequest(http.MethodGet, "/setup", nil))
|
||||
if setupPage.Code != http.StatusOK || !bytes.Contains(setupPage.Body.Bytes(), []byte("Initial setup")) {
|
||||
t.Fatalf("setup page response = %d %q", setupPage.Code, setupPage.Body.String())
|
||||
}
|
||||
|
||||
setup := httptest.NewRecorder()
|
||||
server.handler.ServeHTTP(setup, jsonRequest(http.MethodPost, "/api/setup", map[string]any{
|
||||
"email": "owner@example.com",
|
||||
"displayName": "Owner",
|
||||
"password": "correct horse battery staple",
|
||||
"signupsEnabled": false,
|
||||
}))
|
||||
if setup.Code != http.StatusCreated {
|
||||
t.Fatalf("setup status = %d, want %d; body=%s", setup.Code, http.StatusCreated, setup.Body.String())
|
||||
}
|
||||
if len(setup.Result().Cookies()) == 0 {
|
||||
t.Fatal("expected setup to create a browser session")
|
||||
}
|
||||
|
||||
settings, err := server.auth.GetInstanceSettings(context.Background())
|
||||
if err != nil {
|
||||
t.Fatalf("GetInstanceSettings() error = %v", err)
|
||||
}
|
||||
if !settings.SetupComplete || settings.SignupsEnabled {
|
||||
t.Fatalf("settings = %#v, want setup complete with signups disabled", settings)
|
||||
}
|
||||
|
||||
register := httptest.NewRecorder()
|
||||
server.handler.ServeHTTP(register, jsonRequest(http.MethodPost, "/api/auth/register/password", map[string]any{
|
||||
"email": "viewer@example.com",
|
||||
"displayName": "Viewer",
|
||||
"password": "correct horse battery staple",
|
||||
}))
|
||||
if register.Code != http.StatusBadRequest || !bytes.Contains(register.Body.Bytes(), []byte("signups are disabled")) {
|
||||
t.Fatalf("register response = %d %q, want disabled signup error", register.Code, register.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
func (s *apiTestServer) token(t *testing.T, scopes ...auth.Scope) string {
|
||||
t.Helper()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user