2022-09-02 22:18:23 +03:00
// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
// 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 )
}
2022-09-28 01:23:58 +03:00
// 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.
2022-09-02 22:18:23 +03:00
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 ( ) )
}
} )
} )
}
}