123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- // Copyright 2022 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- // This is primarily coped from /tests/integration/integration_test.go
- // TODO: Move common functions to shared file
-
- package e2e
-
- import (
- "bytes"
- "context"
- "fmt"
- "net/url"
- "os"
- "os/exec"
- "path/filepath"
- "testing"
-
- "code.gitea.io/gitea/models/unittest"
- "code.gitea.io/gitea/modules/graceful"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
- "code.gitea.io/gitea/modules/util"
- "code.gitea.io/gitea/modules/web"
- "code.gitea.io/gitea/routers"
- "code.gitea.io/gitea/tests"
- )
-
- var c *web.Route
-
- func TestMain(m *testing.M) {
- defer log.Close()
-
- managerCtx, cancel := context.WithCancel(context.Background())
- graceful.InitManager(managerCtx)
- defer cancel()
-
- tests.InitTest(false)
- c = routers.NormalRoutes(context.TODO())
-
- os.Unsetenv("GIT_AUTHOR_NAME")
- os.Unsetenv("GIT_AUTHOR_EMAIL")
- os.Unsetenv("GIT_AUTHOR_DATE")
- os.Unsetenv("GIT_COMMITTER_NAME")
- os.Unsetenv("GIT_COMMITTER_EMAIL")
- os.Unsetenv("GIT_COMMITTER_DATE")
-
- err := unittest.InitFixtures(
- unittest.FixturesOptions{
- Dir: filepath.Join(filepath.Dir(setting.AppPath), "models/fixtures/"),
- },
- )
- if err != nil {
- fmt.Printf("Error initializing test database: %v\n", err)
- os.Exit(1)
- }
-
- exitVal := m.Run()
-
- tests.WriterCloser.Reset()
-
- if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil {
- fmt.Printf("util.RemoveAll: %v\n", err)
- os.Exit(1)
- }
- if err = util.RemoveAll(setting.Indexer.RepoPath); err != nil {
- fmt.Printf("Unable to remove repo indexer: %v\n", err)
- os.Exit(1)
- }
-
- os.Exit(exitVal)
- }
-
- // TestE2e should be the only test e2e necessary. It will collect all "*.test.e2e.js" files in this directory and build a test for each.
- func TestE2e(t *testing.T) {
- // Find the paths of all e2e test files in test test directory.
- searchGlob := filepath.Join(filepath.Dir(setting.AppPath), "tests", "e2e", "*.test.e2e.js")
- paths, err := filepath.Glob(searchGlob)
- if err != nil {
- t.Fatal(err)
- } else if len(paths) == 0 {
- t.Fatal(fmt.Errorf("No e2e tests found in %s", searchGlob))
- }
-
- runArgs := []string{"npx", "playwright", "test"}
-
- // To update snapshot outputs
- if _, set := os.LookupEnv("ACCEPT_VISUAL"); set {
- runArgs = append(runArgs, "--update-snapshots")
- }
-
- // Create new test for each input file
- for _, path := range paths {
- _, filename := filepath.Split(path)
- testname := filename[:len(filename)-len(filepath.Ext(path))]
-
- t.Run(testname, func(t *testing.T) {
- // Default 2 minute timeout
- onGiteaRun(t, func(*testing.T, *url.URL) {
- cmd := exec.Command(runArgs[0], runArgs...)
- cmd.Env = os.Environ()
- cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL))
- var stdout, stderr bytes.Buffer
- cmd.Stdout = &stdout
- cmd.Stderr = &stderr
- err := cmd.Run()
- if err != nil {
- // Currently colored output is conflicting. Using Printf until that is resolved.
- fmt.Printf("%v", stdout.String())
- fmt.Printf("%v", stderr.String())
- log.Fatal("Playwright Failed: %s", err)
- } else {
- fmt.Printf("%v", stdout.String())
- }
- })
- })
- }
- }
|