gitech

Форк
0
/
e2e_test.go 
120 строк · 3.2 Кб
1
// Copyright 2022 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
3

4
// This is primarily coped from /tests/integration/integration_test.go
5
//   TODO: Move common functions to shared file
6

7
//nolint:forbidigo
8
package e2e
9

10
import (
11
	"bytes"
12
	"context"
13
	"fmt"
14
	"net/url"
15
	"os"
16
	"os/exec"
17
	"path/filepath"
18
	"testing"
19

20
	"code.gitea.io/gitea/models/unittest"
21
	"code.gitea.io/gitea/modules/graceful"
22
	"code.gitea.io/gitea/modules/log"
23
	"code.gitea.io/gitea/modules/setting"
24
	"code.gitea.io/gitea/modules/testlogger"
25
	"code.gitea.io/gitea/modules/util"
26
	"code.gitea.io/gitea/modules/web"
27
	"code.gitea.io/gitea/routers"
28
	"code.gitea.io/gitea/tests"
29
)
30

31
var testE2eWebRoutes *web.Route
32

33
func TestMain(m *testing.M) {
34
	defer log.GetManager().Close()
35

36
	managerCtx, cancel := context.WithCancel(context.Background())
37
	graceful.InitManager(managerCtx)
38
	defer cancel()
39

40
	tests.InitTest(false)
41
	testE2eWebRoutes = routers.NormalRoutes()
42

43
	os.Unsetenv("GIT_AUTHOR_NAME")
44
	os.Unsetenv("GIT_AUTHOR_EMAIL")
45
	os.Unsetenv("GIT_AUTHOR_DATE")
46
	os.Unsetenv("GIT_COMMITTER_NAME")
47
	os.Unsetenv("GIT_COMMITTER_EMAIL")
48
	os.Unsetenv("GIT_COMMITTER_DATE")
49

50
	err := unittest.InitFixtures(
51
		unittest.FixturesOptions{
52
			Dir: filepath.Join(filepath.Dir(setting.AppPath), "models/fixtures/"),
53
		},
54
	)
55
	if err != nil {
56
		fmt.Printf("Error initializing test database: %v\n", err)
57
		os.Exit(1)
58
	}
59

60
	exitVal := m.Run()
61

62
	testlogger.WriterCloser.Reset()
63

64
	if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil {
65
		fmt.Printf("util.RemoveAll: %v\n", err)
66
		os.Exit(1)
67
	}
68
	if err = util.RemoveAll(setting.Indexer.RepoPath); err != nil {
69
		fmt.Printf("Unable to remove repo indexer: %v\n", err)
70
		os.Exit(1)
71
	}
72

73
	os.Exit(exitVal)
74
}
75

76
// 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.
77
func TestE2e(t *testing.T) {
78
	// Find the paths of all e2e test files in test directory.
79
	searchGlob := filepath.Join(filepath.Dir(setting.AppPath), "tests", "e2e", "*.test.e2e.js")
80
	paths, err := filepath.Glob(searchGlob)
81
	if err != nil {
82
		t.Fatal(err)
83
	} else if len(paths) == 0 {
84
		t.Fatal(fmt.Errorf("No e2e tests found in %s", searchGlob))
85
	}
86

87
	runArgs := []string{"npx", "playwright", "test"}
88

89
	// To update snapshot outputs
90
	if _, set := os.LookupEnv("ACCEPT_VISUAL"); set {
91
		runArgs = append(runArgs, "--update-snapshots")
92
	}
93

94
	// Create new test for each input file
95
	for _, path := range paths {
96
		_, filename := filepath.Split(path)
97
		testname := filename[:len(filename)-len(filepath.Ext(path))]
98

99
		t.Run(testname, func(t *testing.T) {
100
			// Default 2 minute timeout
101
			onGiteaRun(t, func(*testing.T, *url.URL) {
102
				cmd := exec.Command(runArgs[0], runArgs...)
103
				cmd.Env = os.Environ()
104
				cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL))
105
				var stdout, stderr bytes.Buffer
106
				cmd.Stdout = &stdout
107
				cmd.Stderr = &stderr
108
				err := cmd.Run()
109
				if err != nil {
110
					// Currently colored output is conflicting. Using Printf until that is resolved.
111
					fmt.Printf("%v", stdout.String())
112
					fmt.Printf("%v", stderr.String())
113
					log.Fatal("Playwright Failed: %s", err)
114
				} else {
115
					fmt.Printf("%v", stdout.String())
116
				}
117
			})
118
		})
119
	}
120
}
121

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.