Skip to content

Commit d26299e

Browse files
Add missing categories TS-682 (#149)
* add missing categories * fix fmt * publish artifact * refactor --------- Co-authored-by: Rafael Cortês <[email protected]>
1 parent 4d88d40 commit d26299e

File tree

3 files changed

+64
-40
lines changed

3 files changed

+64
-40
lines changed

.circleci/config.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ jobs:
6767
- "*"
6868

6969
workflows:
70-
version: 2
7170
build-and-deploy:
7271
jobs:
7372
- codacy/checkout_and_version:
@@ -104,10 +103,6 @@ workflows:
104103
name: publish_artifacts
105104
files: artifacts/codacy-plugins-test-linux
106105
path: bin/codacy-plugins-test
107-
filters:
108-
branches:
109-
only:
110-
- master
111106
context: CodacyAWS
112107
requires:
113108
- compress_and_package_artifacts

src/main/scala/codacy/plugins/test/JsonTests.scala

Lines changed: 55 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package codacy.plugins.test
22

33
import codacy.utils.CollectionHelper
44
import com.codacy.plugins.api.PatternDescription
5-
import com.codacy.plugins.api.results.Pattern
5+
import com.codacy.plugins.api.results.{Category, Pattern, Tool}
66
import com.codacy.plugins.results.traits.DockerToolDocumentation
77
import com.codacy.plugins.runners.IDocker
88
import com.codacy.plugins.utils.BinaryDockerHelper
@@ -39,70 +39,90 @@ object JsonTests extends ITest {
3939
}
4040
}
4141

42-
(dockerToolDocumentation.toolSpecification, dockerToolDocumentation.patternDescriptions) match {
43-
case (Some(tool), Some(descriptions)) =>
44-
val diffResult = new CollectionHelper[Pattern.Specification, PatternDescription, String](tool.patterns.toSeq,
45-
descriptions.toSeq)({
46-
pattern =>
47-
val parameters = pattern.parameters.map(_.name.value).toSeq.sorted
48-
generateUniquePatternSignature(pattern.patternId.value, parameters)
49-
}, { description =>
50-
val parameters = description.parameters.getOrElse(Seq.empty).map(_.name.value).toSeq.sorted
51-
generateUniquePatternSignature(description.patternId.value, parameters)
52-
}).fastDiff
53-
54-
val duplicateDescriptions = descriptions.groupBy(_.patternId).filter { case (_, v) => v.size > 1 }
55-
if (duplicateDescriptions.nonEmpty) {
56-
error(s"""
42+
val onlyAllowedCategories =
43+
dockerToolDocumentation.toolSpecification.map(validatePatternCategory).getOrElse(true)
44+
45+
val noMismatchBetweenPatternsAndDescription =
46+
(dockerToolDocumentation.toolSpecification, dockerToolDocumentation.patternDescriptions) match {
47+
case (Some(tool), Some(descriptions)) =>
48+
val diffResult = new CollectionHelper[Pattern.Specification, PatternDescription, String](tool.patterns.toSeq,
49+
descriptions.toSeq)({
50+
pattern =>
51+
val parameters = pattern.parameters.map(_.name.value).toSeq.sorted
52+
generateUniquePatternSignature(pattern.patternId.value, parameters)
53+
}, { description =>
54+
val parameters = description.parameters.getOrElse(Seq.empty).map(_.name.value).toSeq.sorted
55+
generateUniquePatternSignature(description.patternId.value, parameters)
56+
}).fastDiff
57+
58+
val duplicateDescriptions = descriptions.groupBy(_.patternId).filter { case (_, v) => v.size > 1 }
59+
if (duplicateDescriptions.nonEmpty) {
60+
error(s"""
5761
|Some patterns were duplicated in /docs/description/description.json
5862
|
5963
| * ${duplicateDescriptions.map { case (patternId, _) => patternId }.mkString(",")}
6064
""".stripMargin)
61-
}
65+
}
6266

63-
if (diffResult.newObjects.nonEmpty) {
64-
error(s"""
67+
if (diffResult.newObjects.nonEmpty) {
68+
error(s"""
6569
|Some patterns were only found in /docs/patterns.json
6670
|Confirm that all the patterns and parameters present in /docs/patterns.json are also present in /docs/description/description.json
6771
|
6872
| * ${diffResult.newObjects.map(_.patternId).mkString(",")}
6973
""".stripMargin)
70-
}
74+
}
7175

72-
if (diffResult.deletedObjects.nonEmpty) {
73-
error(s"""
76+
if (diffResult.deletedObjects.nonEmpty) {
77+
error(s"""
7478
|Some patterns were only found in /docs/description/description.json
7579
|Confirm that all the patterns and parameters present in /docs/description/description.json are also present in /docs/patterns.json
7680
|
7781
| * ${diffResult.deletedObjects.map(_.patternId).mkString(",")}
7882
""".stripMargin)
79-
}
83+
}
8084

81-
val titlesAboveLimit = descriptions.filter(_.title.length > 255)
82-
if (titlesAboveLimit.nonEmpty) {
83-
error(s"""
85+
val titlesAboveLimit = descriptions.filter(_.title.length > 255)
86+
if (titlesAboveLimit.nonEmpty) {
87+
error(s"""
8488
|Some titles are too big in /docs/description/description.json
8589
|The max size of a title is 255 characters
8690
|
8791
| * ${titlesAboveLimit.map(_.patternId).mkString(", ")}
8892
""".stripMargin)
89-
}
93+
}
9094

91-
val descriptionsAboveLimit = descriptions.filter(_.description.getOrElse("").length > 500)
92-
if (descriptionsAboveLimit.nonEmpty) {
93-
error(s"""
95+
val descriptionsAboveLimit = descriptions.filter(_.description.getOrElse("").length > 500)
96+
if (descriptionsAboveLimit.nonEmpty) {
97+
error(s"""
9498
|Some descriptions are too big in /docs/description/description.json
9599
|The max size of a description is 500 characters
96100
|
97101
| * ${descriptionsAboveLimit.map(_.patternId).mkString(", ")}
98102
""".stripMargin)
99-
}
103+
}
100104

101-
ignoreDescriptions ||
102-
(diffResult.newObjects.isEmpty && diffResult.deletedObjects.isEmpty)
105+
ignoreDescriptions ||
106+
(diffResult.newObjects.isEmpty && diffResult.deletedObjects.isEmpty)
103107

104-
case _ => ignoreDescriptions
105-
}
108+
case _ => ignoreDescriptions
109+
}
110+
111+
onlyAllowedCategories && noMismatchBetweenPatternsAndDescription
112+
}
113+
114+
// TS-682: Validate disabled categories aren't used
115+
private def validatePatternCategory(toolSpec: Tool.Specification): Boolean = {
116+
toolSpec.patterns.forall(pattern => {
117+
val isAllowed = Category.allowedCategories.contains(pattern.category)
118+
if (!isAllowed) {
119+
error(s"""
120+
| Disabled category "${pattern.category}" used by pattern "${pattern.patternId}".
121+
| Allowed categories are: ${Category.allowedCategories.mkString(",")}.
122+
""".stripMargin)
123+
}
124+
isAllowed
125+
})
106126
}
107127

108128
private def readDockerToolDocumentation(dockerImage: DockerImage) = {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.codacy.plugins.api.results
2+
3+
object Category {
4+
5+
// TS-682: Return only categories that are enabled in the production database
6+
val allowedCategories = Pattern.Category.values
7+
.filterNot(_ == Pattern.Category.Duplication)
8+
9+
}

0 commit comments

Comments
 (0)