Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test(git): advanced test cases for include/exclude filters #5472

Merged
merged 17 commits into from
Dec 4, 2023
Merged
Changes from 1 commit
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
test: move getTreeVersion tests to git.ts
To test the function against both `VcsHandler` implementations:
 - `GitHandler`
 - `GitRepoHandler`
vvagaytsev committed Dec 4, 2023
commit f931613c58bd392090f0eb47102e902cbb1c8576
3 changes: 2 additions & 1 deletion core/test/unit/src/vcs/git-repo.ts
Original file line number Diff line number Diff line change
@@ -7,8 +7,9 @@
*/

import { GitRepoHandler } from "../../../../src/vcs/git-repo.js"
import { commonGitHandlerTests } from "./git.js"
import { commonGitHandlerTests, getTreeVersionTests } from "./git.js"

describe("GitRepoHandler", () => {
commonGitHandlerTests(GitRepoHandler)
getTreeVersionTests(GitRepoHandler)
})
76 changes: 75 additions & 1 deletion core/test/unit/src/vcs/git.ts
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@ import fsExtra from "fs-extra"
import { basename, join, relative, resolve } from "path"

import type { TestGarden } from "../../../helpers.js"
import { expectError, makeTestGardenA } from "../../../helpers.js"
import { expectError, getDataDir, makeTestGarden, makeTestGardenA } from "../../../helpers.js"
import type { GitCli } from "../../../../src/vcs/git.js"
import { explainGitError, getCommitIdFromRefList, GitHandler, parseGitUrl } from "../../../../src/vcs/git.js"
import type { Log } from "../../../../src/logger/log-entry.js"
@@ -1278,8 +1278,82 @@ export const commonGitHandlerTests = (handlerCls: new (params: VcsHandlerParams)
})
}

export const getTreeVersionTests = (handlerCls: new (params: VcsHandlerParams) => GitHandler) => {
describe("getTreeVersion", () => {
context("include and exclude filters", () => {
it("should respect the include field, if specified", async () => {
const projectRoot = getDataDir("test-projects", "include-exclude")
const garden = await makeTestGarden(projectRoot)
const moduleConfig = await garden.resolveModule("module-a")
const handler = new GitHandler({
garden,
projectRoot: garden.projectRoot,
gardenDirPath: garden.gardenDirPath,
ignoreFile: garden.dotIgnoreFile,
cache: garden.treeCache,
})

const version = await handler.getTreeVersion({
log: garden.log,
projectName: garden.projectName,
config: moduleConfig,
})

expect(version.files).to.eql([
resolve(moduleConfig.path, "somedir/yes.txt"),
resolve(moduleConfig.path, "yes.txt"),
])
})

it("should respect the exclude field, if specified", async () => {
const projectRoot = getDataDir("test-projects", "include-exclude")
const garden = await makeTestGarden(projectRoot)
const moduleConfig = await garden.resolveModule("module-b")
const handler = new GitHandler({
garden,
projectRoot: garden.projectRoot,
gardenDirPath: garden.gardenDirPath,
ignoreFile: garden.dotIgnoreFile,
cache: garden.treeCache,
})

const version = await handler.getTreeVersion({
log: garden.log,
projectName: garden.projectName,
config: moduleConfig,
})

expect(version.files).to.eql([resolve(moduleConfig.path, "yes.txt")])
})

it("should respect both include and exclude fields, if specified", async () => {
const projectRoot = getDataDir("test-projects", "include-exclude")
const garden = await makeTestGarden(projectRoot)
const moduleConfig = await garden.resolveModule("module-c")

const handler = new GitHandler({
garden,
projectRoot: garden.projectRoot,
gardenDirPath: garden.gardenDirPath,
ignoreFile: garden.dotIgnoreFile,
cache: garden.treeCache,
})

const version = await handler.getTreeVersion({
log: garden.log,
projectName: garden.projectName,
config: moduleConfig,
})

expect(version.files).to.eql([resolve(moduleConfig.path, "yes.txt")])
})
})
})
}

describe("GitHandler", () => {
commonGitHandlerTests(GitHandler)
getTreeVersionTests(GitHandler)
})

describe("git", () => {
72 changes: 1 addition & 71 deletions core/test/unit/src/vcs/vcs.ts
Original file line number Diff line number Diff line change
@@ -30,8 +30,7 @@ import { expect } from "chai"
import cloneDeep from "fast-copy"

import type { ModuleConfig } from "../../../../src/config/module.js"
import { GitHandler } from "../../../../src/vcs/git.js"
import { resolve, join } from "path"
import { join } from "path"
import * as td from "testdouble"
import fsExtra from "fs-extra"

@@ -129,75 +128,6 @@ describe("VcsHandler", () => {
expect(version.files).to.eql(["b", "d"])
})

context("include and exclude filters", () => {
it("should respect the include field, if specified", async () => {
const projectRoot = getDataDir("test-projects", "include-exclude")
const garden = await makeTestGarden(projectRoot)
const moduleConfig = await garden.resolveModule("module-a")
const handler = new GitHandler({
garden,
projectRoot: garden.projectRoot,
gardenDirPath: garden.gardenDirPath,
ignoreFile: garden.dotIgnoreFile,
cache: garden.treeCache,
})

const version = await handler.getTreeVersion({
log: garden.log,
projectName: garden.projectName,
config: moduleConfig,
})

expect(version.files).to.eql([
resolve(moduleConfig.path, "somedir/yes.txt"),
resolve(moduleConfig.path, "yes.txt"),
])
})

it("should respect the exclude field, if specified", async () => {
const projectRoot = getDataDir("test-projects", "include-exclude")
const garden = await makeTestGarden(projectRoot)
const moduleConfig = await garden.resolveModule("module-b")
const handler = new GitHandler({
garden,
projectRoot: garden.projectRoot,
gardenDirPath: garden.gardenDirPath,
ignoreFile: garden.dotIgnoreFile,
cache: garden.treeCache,
})

const version = await handler.getTreeVersion({
log: garden.log,
projectName: garden.projectName,
config: moduleConfig,
})

expect(version.files).to.eql([resolve(moduleConfig.path, "yes.txt")])
})

it("should respect both include and exclude fields, if specified", async () => {
const projectRoot = getDataDir("test-projects", "include-exclude")
const garden = await makeTestGarden(projectRoot)
const moduleConfig = await garden.resolveModule("module-c")

const handler = new GitHandler({
garden,
projectRoot: garden.projectRoot,
gardenDirPath: garden.gardenDirPath,
ignoreFile: garden.dotIgnoreFile,
cache: garden.treeCache,
})

const version = await handler.getTreeVersion({
log: garden.log,
projectName: garden.projectName,
config: moduleConfig,
})

expect(version.files).to.eql([resolve(moduleConfig.path, "yes.txt")])
})
})

it("should join the config's base path with source.path (if provided) when calling getFiles", async () => {
const projectRoot = getDataDir("test-projects", "action-source-path")
const garden = await makeTestGarden(projectRoot)