Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"type" : "bugfix",
"description" : "Amazon Q can update mvn and gradle build files"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,17 @@ import org.mockito.kotlin.whenever
import software.aws.toolkits.jetbrains.services.amazonq.FeatureDevSessionContext
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.FeatureDevTestBase
import software.aws.toolkits.jetbrains.services.amazonqFeatureDev.util.FeatureDevService
import software.aws.toolkits.jetbrains.utils.rules.HeavyJavaCodeInsightTestFixtureRule
import software.aws.toolkits.jetbrains.utils.rules.addFileToModule
import java.util.zip.ZipFile

class FeatureDevSessionContextTest : FeatureDevTestBase(HeavyJavaCodeInsightTestFixtureRule()) {

private fun addFilesToProjectModule(vararg path: String) {
val module = projectRule.module
path.forEach { projectRule.fixture.addFileToModule(module, it, it) }
}

class FeatureDevSessionContextTest : FeatureDevTestBase() {
@Rule
@JvmField
val ruleChain = RuleChain(projectRule, disposableRule)
Expand All @@ -40,13 +49,64 @@ class FeatureDevSessionContextTest : FeatureDevTestBase() {
fun testWithValidFile() {
val ktFile = mock<VirtualFile>()
whenever(ktFile.extension).thenReturn("kt")
whenever(ktFile.path).thenReturn("code.kt")
assertTrue(featureDevSessionContext.isFileExtensionAllowed(ktFile))
}

@Test
fun testWithInvalidFile() {
val txtFile = mock<VirtualFile>()
whenever(txtFile.extension).thenReturn("txt")
whenever(txtFile.path).thenReturn("file.txt")
assertFalse(featureDevSessionContext.isFileExtensionAllowed(txtFile))
}

@Test
fun testAllowedFilePath() {
val allowedPaths = listOf("build.gradle", "gradle.properties", ".mvn/wrapper/maven-wrapper.properties")
allowedPaths.forEach({
val txtFile = mock<VirtualFile>()
whenever(txtFile.path).thenReturn(it)
whenever(txtFile.extension).thenReturn(it.split(".").last())
assertTrue(featureDevSessionContext.isFileExtensionAllowed(txtFile))
})
}

@Test
fun testZipProject() {
addFilesToProjectModule(
".gradle/cached.jar",
"src/MyClass.java",
"gradlew",
"gradlew.bat",
"README.md",
"settings.gradle",
"build.gradle",
"gradle/wrapper/gradle-wrapper.properties",
)

val zipResult = featureDevSessionContext.getProjectZip()
val zipPath = zipResult.payload.path

val zippedFiles = mutableSetOf<String>()
ZipFile(zipPath).use { zipFile ->
for (entry in zipFile.entries()) {
if (!entry.name.endsWith("/")) {
zippedFiles.add(entry.name)
}
}
}

val expectedFiles = setOf(
"src/MyClass.java",
"gradlew",
"gradlew.bat",
"README.md",
"settings.gradle",
"build.gradle",
"gradle/wrapper/gradle-wrapper.properties",
)

assertTrue(zippedFiles == expectedFiles)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import software.aws.toolkits.jetbrains.utils.rules.addFileToModule
import software.aws.toolkits.jetbrains.utils.rules.addModule
import software.aws.toolkits.telemetry.CodewhispererLanguage
import java.io.BufferedInputStream
import java.io.File
import java.util.zip.ZipInputStream
import kotlin.io.path.relativeTo
import kotlin.test.assertNotNull
Expand Down Expand Up @@ -109,11 +110,12 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod
}

private fun setupCsharpProject() {
val fileSeparator = File.separator
val testModule = projectRule.fixture.addModule("testModule")
val testModule2 = projectRule.fixture.addModule("testModule2")
testCs = projectRule.fixture.addFileToModule(
testModule,
"/Test.cs",
"${fileSeparator}Test.cs",
"""
using Utils;
using Helpers.Helper;
Expand All @@ -131,7 +133,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

utilsCs = projectRule.fixture.addFileToModule(
testModule,
"/Utils.cs",
"${fileSeparator}Utils.cs",
"""
public static class Utils
{
Expand All @@ -157,7 +159,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

helperCs = projectRule.fixture.addFileToModule(
testModule,
"/Helpers/Helper.cs",
"${fileSeparator}Helpers${fileSeparator}Helper.cs",
"""
public static class Helper
{
Expand Down Expand Up @@ -201,7 +203,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

helpGo = projectRule.fixture.addFileToModule(
testModule,
"/help.go",
"${fileSeparator}help.go",
"""
package main

Expand All @@ -217,7 +219,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

utilsJs = projectRule.fixture.addFileToModule(
testModule,
"/utils.js",
"${fileSeparator}utils.js",
"""
function add(num1, num2) {
return num1 + num2;
Expand Down Expand Up @@ -247,7 +249,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

testJson = projectRule.fixture.addFileToModule(
testModule,
"/helpers/test3Json.json",
"${fileSeparator}helpers${fileSeparator}test3Json.json",
"""
{
"AWSTemplateFormatVersion": "2010-09-09",
Expand Down Expand Up @@ -303,7 +305,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

helperPy = projectRule.fixture.addFileToModule(
testModule,
"/helpers/helper.py",
"${fileSeparator}helpers${fileSeparator}helper.py",
"""
from helpers import helper as h
def subtract(num1, num2)
Expand All @@ -319,13 +321,13 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod
totalSize += helperPy.length
totalLines += helperPy.toNioPath().toFile().readLines().size

readMeMd = projectRule.fixture.addFileToModule(testModule, "/ReadMe.md", "### Now included").virtualFile
readMeMd = projectRule.fixture.addFileToModule(testModule, "${fileSeparator}ReadMe.md", "### Now included").virtualFile
totalSize += readMeMd.length
totalLines += readMeMd.toNioPath().toFile().readLines().size

testTf = projectRule.fixture.addFileToModule(
testModule2,
"/testTf.tf",
"${fileSeparator}testTf.tf",
"""
# Create example resource for three S3 buckets using for_each, where the bucket prefix are in variable with list containing [prod, staging, dev]

Expand All @@ -345,7 +347,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

testYaml = projectRule.fixture.addFileToModule(
testModule2,
"/testYaml.yaml",
"${fileSeparator}testYaml.yaml",
"""
AWSTemplateFormatVersion: "2010-09-09"

Expand All @@ -371,7 +373,7 @@ class CodeWhispererProjectCodeScanTest : CodeWhispererCodeScanTestBase(PythonCod

// Adding gitignore file and gitignore file member for testing.
// The tests include the markdown file but not these two files.
projectRule.fixture.addFileToProject("/.gitignore", "node_modules\n.idea\n.vscode\n.DS_Store").virtualFile
projectRule.fixture.addFileToProject("test.idea", "ref: refs/heads/main")
projectRule.fixture.addFileToProject("$fileSeparator.gitignore", "node_modules\n.idea\n.vscode\n.DS_Store").virtualFile
projectRule.fixture.addFileToProject("$fileSeparator.idea${fileSeparator}ref", "ref: refs/heads/main")
}
}
Loading
Loading