Skip to content

Commit 4644735

Browse files
authored
Migrate from junit to testng (#94)
1 parent 2a9a976 commit 4644735

File tree

3 files changed

+60
-51
lines changed

3 files changed

+60
-51
lines changed

intellij-extension/build.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ dependencies {
2222
implementation("com.google.code.gson:gson:2.10.1")
2323
implementation(platform("software.amazon.awssdk:bom:2.20.0"))
2424
implementation("software.amazon.awssdk:cloudformation")
25-
testImplementation("junit:junit:4.13.2")
25+
testImplementation("org.testng:testng:7.4.0")
2626
testImplementation("org.mockito:mockito-core:5.3.1")
2727
testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0")
2828
}
@@ -38,4 +38,8 @@ tasks {
3838
sinceBuild.set("231")
3939
untilBuild.set("243.*")
4040
}
41+
42+
test {
43+
useTestNG()
44+
}
4145
}
Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,41 @@
11
package com.amazon.guardrail
22

3-
import org.junit.Assert.assertEquals
4-
import org.junit.Assert.assertNull
5-
import org.junit.Before
6-
import org.junit.Rule
7-
import org.junit.Test
8-
import org.junit.rules.TemporaryFolder
93
import org.mockito.Mockito.mock
104
import org.mockito.kotlin.any
115
import org.mockito.kotlin.whenever
6+
import org.testng.Assert.assertEquals
7+
import org.testng.Assert.assertNull
8+
import org.testng.annotations.AfterMethod
9+
import org.testng.annotations.BeforeMethod
10+
import org.testng.annotations.Test
1211
import software.amazon.awssdk.regions.Region
1312
import software.amazon.awssdk.services.cloudformation.CloudFormationClient
1413
import software.amazon.awssdk.services.cloudformation.model.DescribeTypeRequest
1514
import software.amazon.awssdk.services.cloudformation.model.DescribeTypeResponse
15+
import java.io.File
16+
import java.nio.file.Files
1617

1718
class CloudFormationSchemaFetcherTest {
1819

19-
@get:Rule
20-
val tempFolder = TemporaryFolder()
21-
20+
private lateinit var tempDir: File
2221
private lateinit var mockClient: CloudFormationClient
2322
private lateinit var fetcher: CloudFormationSchemaFetcher
2423

25-
@Before
24+
@BeforeMethod
2625
fun setup() {
26+
tempDir = Files.createTempDirectory("test").toFile()
2727
mockClient = mock(CloudFormationClient::class.java)
2828
fetcher = CloudFormationSchemaFetcher { mockClient }
2929
}
3030

31+
@AfterMethod
32+
fun teardown() {
33+
tempDir.deleteRecursively()
34+
}
35+
3136
@Test
3237
fun `extractTypeName returns null when typeName field is missing`() {
33-
val file = tempFolder.newFile("no-typename.json")
38+
val file = File(tempDir, "no-typename.json")
3439
file.writeText("""{"properties": {}}""")
3540

3641
val result = fetcher.extractTypeName(file.absolutePath)
@@ -39,25 +44,25 @@ class CloudFormationSchemaFetcherTest {
3944

4045
@Test
4146
fun `extractTypeName extracts typeName from valid schema`() {
42-
val file = tempFolder.newFile("valid.json")
47+
val file = File(tempDir, "valid.json")
4348
file.writeText("""{"typeName": "AWS::S3::Bucket"}""")
4449

4550
val result = fetcher.extractTypeName(file.absolutePath)
46-
assertEquals("AWS::S3::Bucket", result)
51+
assertEquals(result, "AWS::S3::Bucket")
4752
}
4853

4954
@Test
5055
fun `extractTypeName handles complex typeName`() {
51-
val file = tempFolder.newFile("complex.json")
56+
val file = File(tempDir, "complex.json")
5257
file.writeText("""{"typeName": "AWS::EC2::Instance", "properties": {"foo": "bar"}}""")
5358

5459
val result = fetcher.extractTypeName(file.absolutePath)
55-
assertEquals("AWS::EC2::Instance", result)
60+
assertEquals(result, "AWS::EC2::Instance")
5661
}
5762

5863
@Test
5964
fun `fetchSchema returns schema from CloudFormation API`() {
60-
val file = tempFolder.newFile("schema.json")
65+
val file = File(tempDir, "schema.json")
6166
file.writeText("""{"typeName": "AWS::S3::Bucket"}""")
6267

6368
val mockResponse = mock(DescribeTypeResponse::class.java)
@@ -66,12 +71,12 @@ class CloudFormationSchemaFetcherTest {
6671

6772
val result = fetcher.fetchSchema(file.absolutePath)
6873

69-
assertEquals("""{"type": "object"}""", result)
74+
assertEquals(result, """{"type": "object"}""")
7075
}
7176

7277
@Test
7378
fun `fetchSchema returns null when CloudFormation returns null schema`() {
74-
val file = tempFolder.newFile("schema.json")
79+
val file = File(tempDir, "schema.json")
7580
file.writeText("""{"typeName": "AWS::Custom::Resource"}""")
7681

7782
val mockResponse = mock(DescribeTypeResponse::class.java)
@@ -85,7 +90,7 @@ class CloudFormationSchemaFetcherTest {
8590

8691
@Test
8792
fun `fetchSchema uses correct region`() {
88-
val file = tempFolder.newFile("schema.json")
93+
val file = File(tempDir, "schema.json")
8994
file.writeText("""{"typeName": "AWS::S3::Bucket"}""")
9095

9196
var capturedRegion: Region? = null
@@ -100,15 +105,15 @@ class CloudFormationSchemaFetcherTest {
100105

101106
customFetcher.fetchSchema(file.absolutePath, "eu-west-1")
102107

103-
assertEquals(Region.EU_WEST_1, capturedRegion)
108+
assertEquals(capturedRegion, Region.EU_WEST_1)
104109
}
105110

106111
@Test
107112
fun `fetchSchema handles multiple resource types`() {
108-
val file1 = tempFolder.newFile("s3.json")
113+
val file1 = File(tempDir, "s3.json")
109114
file1.writeText("""{"typeName": "AWS::S3::Bucket"}""")
110115

111-
val file2 = tempFolder.newFile("ec2.json")
116+
val file2 = File(tempDir, "ec2.json")
112117
file2.writeText("""{"typeName": "AWS::EC2::Instance"}""")
113118

114119
val mockResponse = mock(DescribeTypeResponse::class.java)
@@ -118,7 +123,7 @@ class CloudFormationSchemaFetcherTest {
118123
val result1 = fetcher.fetchSchema(file1.absolutePath)
119124
val result2 = fetcher.fetchSchema(file2.absolutePath)
120125

121-
assertEquals("""{"type": "object"}""", result1)
122-
assertEquals("""{"type": "object"}""", result2)
126+
assertEquals(result1, """{"type": "object"}""")
127+
assertEquals(result2, """{"type": "object"}""")
123128
}
124129
}

intellij-extension/src/test/kotlin/com/amazon/guardrail/GuardRailDiagnosticMapperTest.kt

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ import com.intellij.codeInspection.ProblemHighlightType
44
import com.intellij.json.psi.JsonFile
55
import com.intellij.psi.FileViewProvider
66
import com.intellij.psi.PsiFile
7-
import org.junit.Assert.assertEquals
8-
import org.junit.Assert.assertTrue
9-
import org.junit.Before
10-
import org.junit.Test
117
import org.mockito.Mockito.mock
128
import org.mockito.kotlin.whenever
9+
import org.testng.Assert.assertEquals
10+
import org.testng.Assert.assertTrue
11+
import org.testng.annotations.BeforeMethod
12+
import org.testng.annotations.Test
1313

1414
class GuardRailDiagnosticMapperTest {
1515

1616
private lateinit var mapper: GuardRailDiagnosticMapper
1717
private lateinit var mockFile: PsiFile
1818

19-
@Before
19+
@BeforeMethod
2020
fun setup() {
2121
mapper = GuardRailDiagnosticMapper()
2222
mockFile = mock(PsiFile::class.java)
@@ -50,11 +50,11 @@ class GuardRailDiagnosticMapperTest {
5050

5151
val result = mapper.mapResults(cliOutput, mockFile)
5252

53-
assertEquals(1, result.size)
54-
assertEquals("[R001] Test error", result[0].description)
55-
assertEquals(ProblemHighlightType.ERROR, result[0].highlightType)
56-
assertEquals("TestRule", result[0].ruleName)
57-
assertEquals("/properties/test", result[0].violation.path)
53+
assertEquals(result.size, 1)
54+
assertEquals(result[0].description, "[R001] Test error")
55+
assertEquals(result[0].highlightType, ProblemHighlightType.ERROR)
56+
assertEquals(result[0].ruleName, "TestRule")
57+
assertEquals(result[0].violation.path, "/properties/test")
5858
}
5959

6060
@Test
@@ -72,10 +72,10 @@ class GuardRailDiagnosticMapperTest {
7272

7373
val result = mapper.mapResults(cliOutput, mockFile)
7474

75-
assertEquals(1, result.size)
76-
assertEquals("[W001] Test warning", result[0].description)
77-
assertEquals(ProblemHighlightType.WARNING, result[0].highlightType)
78-
assertEquals("WarningRule", result[0].ruleName)
75+
assertEquals(result.size, 1)
76+
assertEquals(result[0].description, "[W001] Test warning")
77+
assertEquals(result[0].highlightType, ProblemHighlightType.WARNING)
78+
assertEquals(result[0].ruleName, "WarningRule")
7979
}
8080

8181
@Test
@@ -92,9 +92,9 @@ class GuardRailDiagnosticMapperTest {
9292

9393
val result = mapper.mapResults(cliOutput, mockFile)
9494

95-
assertEquals(2, result.size)
96-
assertEquals("[E001] Error 1", result[0].description)
97-
assertEquals("[E002] Error 2", result[1].description)
95+
assertEquals(result.size, 2)
96+
assertEquals(result[0].description, "[E001] Error 1")
97+
assertEquals(result[1].description, "[E002] Error 2")
9898
}
9999

100100
@Test
@@ -109,7 +109,7 @@ class GuardRailDiagnosticMapperTest {
109109

110110
val result = mapper.mapResults(cliOutput, mockFile)
111111

112-
assertEquals(2, result.size)
112+
assertEquals(result.size, 2)
113113
assertTrue(result.any { it.ruleName == "Rule1" })
114114
assertTrue(result.any { it.ruleName == "Rule2" })
115115
}
@@ -127,11 +127,11 @@ class GuardRailDiagnosticMapperTest {
127127

128128
val result = mapper.mapResults(cliOutput, mockFile)
129129

130-
assertEquals(2, result.size)
130+
assertEquals(result.size, 2)
131131
val errors = result.filter { it.highlightType == ProblemHighlightType.ERROR }
132132
val warnings = result.filter { it.highlightType == ProblemHighlightType.WARNING }
133-
assertEquals(1, errors.size)
134-
assertEquals(1, warnings.size)
133+
assertEquals(errors.size, 1)
134+
assertEquals(warnings.size, 1)
135135
}
136136

137137
@Test
@@ -145,20 +145,20 @@ class GuardRailDiagnosticMapperTest {
145145

146146
val result = mapper.mapResults(cliOutput, mockFile)
147147

148-
assertEquals(1, result.size)
149-
assertEquals("[E001] ", result[0].description)
148+
assertEquals(result.size, 1)
149+
assertEquals(result[0].description, "[E001] ")
150150
}
151151

152152
@Test
153153
fun `extractLineNumber returns 0 for non-JsonFile`() {
154154
val lineNumber = mapper.extractLineNumber("/properties/test", mockFile)
155-
assertEquals(0, lineNumber)
155+
assertEquals(lineNumber, 0)
156156
}
157157

158158
@Test
159159
fun `extractLineNumber returns 0 for empty path`() {
160160
val lineNumber = mapper.extractLineNumber("", mockFile)
161-
assertEquals(0, lineNumber)
161+
assertEquals(lineNumber, 0)
162162
}
163163

164164
@Test
@@ -170,6 +170,6 @@ class GuardRailDiagnosticMapperTest {
170170
whenever(mockViewProvider.document).thenReturn(null)
171171

172172
val lineNumber = mapper.extractLineNumber("/properties/test", mockJsonFile)
173-
assertEquals(0, lineNumber)
173+
assertEquals(lineNumber, 0)
174174
}
175175
}

0 commit comments

Comments
 (0)