Skip to content

Commit

Permalink
Speed up Typescript tests
Browse files Browse the repository at this point in the history
* Use Javascript in some cases
* Remove test cases not absolutely necessary
* Disable SQ scan in all except one case

Closes #509.
  • Loading branch information
michaelsauter committed May 24, 2022
1 parent c649477 commit b37c8e4
Show file tree
Hide file tree
Showing 22 changed files with 1,975 additions and 1,495 deletions.
108 changes: 22 additions & 86 deletions test/tasks/ods-build-typescript_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,14 @@ func TestTaskODSBuildTypescript(t *testing.T) {
tasktesting.SonarQube,
},
map[string]tasktesting.TestCase{
"build typescript app": {
"build typescript app with SQ scan": {
WorkspaceDirMapping: map[string]string{"source": "typescript-sample-app"},
PreRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
ctxt.ODS = tasktesting.SetupGitRepo(t, ctxt.Namespace, wsDir)
ctxt.Params = map[string]string{
"sonar-quality-gate": "true",
}
},
WantRunSuccess: true,
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
Expand All @@ -37,6 +40,7 @@ func TestTaskODSBuildTypescript(t *testing.T) {
filepath.Join(pipelinectxt.CodeCoveragesPath, "lcov.info"),
filepath.Join(pipelinectxt.SonarAnalysisPath, "analysis-report.md"),
filepath.Join(pipelinectxt.SonarAnalysisPath, "issues-report.csv"),
filepath.Join(pipelinectxt.SonarAnalysisPath, "quality-gate.json"),
filepath.Join(pipelinectxt.LintReportsPath, "report.txt"),
"docker/dist/src/index.js",
"docker/dist/package.json",
Expand All @@ -47,83 +51,41 @@ func TestTaskODSBuildTypescript(t *testing.T) {
if !strings.Contains(string(ctxt.CollectedLogs), wantLogMsg) {
t.Fatalf("Want:\n%s\n\nGot:\n%s", wantLogMsg, string(ctxt.CollectedLogs))
}
},
},
"build typescript app in subdirectory": {
WorkspaceDirMapping: map[string]string{"source": "hello-world-app"},
PreRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
// Setup subdir in "monorepo"
subdir := "ts-src"
createAppInSubDirectory(t, wsDir, subdir, "typescript-sample-app")

ctxt.ODS = tasktesting.SetupGitRepo(t, ctxt.Namespace, wsDir)
ctxt.Params = map[string]string{
"sonar-quality-gate": "true",
"working-dir": subdir,
"output-dir": "../docker",
}
},
WantRunSuccess: true,
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
subdir := "ts-src"

checkFilesExist(t, wsDir,
filepath.Join(pipelinectxt.XUnitReportsPath, fmt.Sprintf("%s-report.xml", subdir)),
filepath.Join(pipelinectxt.CodeCoveragesPath, fmt.Sprintf("%s-clover.xml", subdir)),
filepath.Join(pipelinectxt.CodeCoveragesPath, fmt.Sprintf("%s-coverage-final.json", subdir)),
filepath.Join(pipelinectxt.CodeCoveragesPath, fmt.Sprintf("%s-lcov.info", subdir)),
filepath.Join(pipelinectxt.SonarAnalysisPath, fmt.Sprintf("%s-analysis-report.md", subdir)),
filepath.Join(pipelinectxt.SonarAnalysisPath, fmt.Sprintf("%s-issues-report.csv", subdir)),
filepath.Join(pipelinectxt.SonarAnalysisPath, fmt.Sprintf("%s-quality-gate.json", subdir)),
filepath.Join(pipelinectxt.LintReportsPath, fmt.Sprintf("%s-report.txt", subdir)),
"docker/dist/src/index.js",
"docker/dist/package.json",
"docker/dist/package-lock.json",
)

sonarProject := sonar.ProjectKey(ctxt.ODS, subdir+"-")
sonarProject := sonar.ProjectKey(ctxt.ODS, "")
checkSonarQualityGate(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace, sonarProject, true, "OK")
},
},
"build typescript app in subdirectory with build caching": {
"build javascript app in subdirectory with build caching": {
WorkspaceDirMapping: map[string]string{"source": "hello-world-app"},
PreRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
// Setup subdir in "monorepo"
subdir := "ts-src"
createAppInSubDirectory(t, wsDir, subdir, "typescript-sample-app")
subdir := "js-src"
createAppInSubDirectory(t, wsDir, subdir, "javascript-sample-app")

ctxt.ODS = tasktesting.SetupGitRepo(t, ctxt.Namespace, wsDir)
ctxt.Params = map[string]string{
"sonar-quality-gate": "true",
"working-dir": subdir,
"output-dir": "../docker",
"cache-build": "true",
"sonar-skip": "true",
"working-dir": subdir,
"output-dir": "../docker",
"cache-build": "true",
}
},
WantRunSuccess: true,
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
subdir := "ts-src"

subdir := "js-src"
checkFilesExist(t, wsDir,
filepath.Join(pipelinectxt.XUnitReportsPath, fmt.Sprintf("%s-report.xml", subdir)),
filepath.Join(pipelinectxt.CodeCoveragesPath, fmt.Sprintf("%s-clover.xml", subdir)),
filepath.Join(pipelinectxt.CodeCoveragesPath, fmt.Sprintf("%s-coverage-final.json", subdir)),
filepath.Join(pipelinectxt.CodeCoveragesPath, fmt.Sprintf("%s-lcov.info", subdir)),
filepath.Join(pipelinectxt.SonarAnalysisPath, fmt.Sprintf("%s-analysis-report.md", subdir)),
filepath.Join(pipelinectxt.SonarAnalysisPath, fmt.Sprintf("%s-issues-report.csv", subdir)),
filepath.Join(pipelinectxt.SonarAnalysisPath, fmt.Sprintf("%s-quality-gate.json", subdir)),
filepath.Join(pipelinectxt.LintReportsPath, fmt.Sprintf("%s-report.txt", subdir)),
"docker/dist/src/index.js",
"docker/dist/package.json",
"docker/dist/package-lock.json",
)

sonarProject := sonar.ProjectKey(ctxt.ODS, subdir+"-")
checkSonarQualityGate(t, ctxt.Clients.KubernetesClientSet, ctxt.Namespace, sonarProject, true, "OK")
},
AdditionalRuns: []tasktesting.TaskRunCase{{
// inherits funcs from primary task only set explicitly
Expand All @@ -150,12 +112,11 @@ func TestTaskODSBuildTypescript(t *testing.T) {
checkFilesExist(t, wsDir, wantFile)

wantLintReportContent := "/workspace/source/src/index.ts: line 3, col 31, Warning - Unexpected any. Specify a different type. (@typescript-eslint/no-explicit-any)\n\n1 problem"

checkFileContent(t, wsDir, filepath.Join(pipelinectxt.LintReportsPath, "report.txt"), wantLintReportContent)
},
},
"fail pulling image if unsupported node version is specified": {
WorkspaceDirMapping: map[string]string{"source": "typescript-sample-app"},
WorkspaceDirMapping: map[string]string{"source": "javascript-sample-app"},
PreRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
ctxt.ODS = tasktesting.SetupGitRepo(t, ctxt.Namespace, wsDir)
Expand All @@ -165,66 +126,41 @@ func TestTaskODSBuildTypescript(t *testing.T) {
},
WantSetupFail: true,
},
"build backend typescript app": {
"build backend javascript app": {
Timeout: 10 * time.Minute,
WorkspaceDirMapping: map[string]string{"source": "typescript-sample-app"},
WorkspaceDirMapping: map[string]string{"source": "javascript-sample-app"},
PreRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
ctxt.ODS = tasktesting.SetupGitRepo(t, ctxt.Namespace, wsDir)
ctxt.Params = map[string]string{
"sonar-skip": "true",
"copy-node-modules": "true",
"cache-build": "true",
}
},
WantRunSuccess: true,
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]

checkFilesExist(t, wsDir,
filepath.Join(pipelinectxt.XUnitReportsPath, "report.xml"),
filepath.Join(pipelinectxt.CodeCoveragesPath, "clover.xml"),
filepath.Join(pipelinectxt.CodeCoveragesPath, "coverage-final.json"),
filepath.Join(pipelinectxt.CodeCoveragesPath, "lcov.info"),
filepath.Join(pipelinectxt.SonarAnalysisPath, "analysis-report.md"),
filepath.Join(pipelinectxt.SonarAnalysisPath, "issues-report.csv"),
filepath.Join(pipelinectxt.LintReportsPath, "report.txt"),
"docker/dist/node_modules/",
"docker/dist/package.json",
"docker/dist/package-lock.json",
)
},
AdditionalRuns: []tasktesting.TaskRunCase{{
// inherits funcs from primary task only set explicitly
PreRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
// ctxt still in place from prior run
wsDir := ctxt.Workspaces["source"]
tasktesting.RemoveAll(t, wsDir, "docker/dist")
tasktesting.RemoveAll(t, wsDir, "dist")
},
WantRunSuccess: true,
}},
},
"build typescript app with custom build directory": {
WorkspaceDirMapping: map[string]string{"source": "typescript-sample-app-build-dir"},
"build javascript app with custom build directory": {
WorkspaceDirMapping: map[string]string{"source": "javascript-sample-app-build-dir"},
PreRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]
ctxt.ODS = tasktesting.SetupGitRepo(t, ctxt.Namespace, wsDir)
ctxt.Params = map[string]string{
"build-dir": "build",
"sonar-skip": "true",
"build-dir": "build",
}
},
WantRunSuccess: true,
PostRunFunc: func(t *testing.T, ctxt *tasktesting.TaskRunContext) {
wsDir := ctxt.Workspaces["source"]

checkFilesExist(t, wsDir,
filepath.Join(pipelinectxt.XUnitReportsPath, "report.xml"),
filepath.Join(pipelinectxt.CodeCoveragesPath, "clover.xml"),
filepath.Join(pipelinectxt.CodeCoveragesPath, "coverage-final.json"),
filepath.Join(pipelinectxt.CodeCoveragesPath, "lcov.info"),
filepath.Join(pipelinectxt.SonarAnalysisPath, "analysis-report.md"),
filepath.Join(pipelinectxt.SonarAnalysisPath, "issues-report.csv"),
filepath.Join(pipelinectxt.LintReportsPath, "report.txt"),
"docker/dist/src/index.js",
"docker/dist/package.json",
"docker/dist/package-lock.json",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"parserOptions": {
"ecmaVersion": 2017
},
"env": {
"node": true,
"es6": true
},
"extends": "eslint:recommended",
"rules": {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const sum = require('../src/sum')

test('string with a single number should result in the number itself', () => {
expect(sum.add('1')).toBe(1);
});
Loading

0 comments on commit b37c8e4

Please sign in to comment.