Skip to content

Commit

Permalink
Merge pull request #486 from codacy/fix/stop-failure-single-report-AL…
Browse files Browse the repository at this point in the history
…A-799

feature: stops failure when at least one report is sent ALA-799
  • Loading branch information
pedrobpereira authored Jan 11, 2024
2 parents e523b20 + fa7194c commit 0b9d524
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/main/scala/com/codacy/rules/ReportRules.scala
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,14 @@ class ReportRules(coverageServices: => CoverageServices, gitFileFetcher: GitFile
success
}
}
.collectFirst {
case Left(l) => Left(l)
.foldLeft[Either[String, String]](Left("No coverage data was sent")) { (prev, curr) =>
curr match {
case Left(error) =>
logger.warn(error)
prev
case Right(_) => Right("Coverage data uploaded.")
}
}
.getOrElse(Right("All coverage data uploaded."))
}

def codacyCoverage(config: ReportConfig): Either[String, String] = {
Expand Down
77 changes: 77 additions & 0 deletions src/test/resources/non-git-report.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<Root CoveredStatements="23" TotalStatements="32" CoveragePercent="72" ReportType="DetailedXml" DotCoverVersion="2019.3.1">
<FileIndices>
<File Index="1" Name="/src/Tests/FooBarTests.cs" ChecksumAlgorithm="SHA256" Checksum="D06BEBC2836A851F722F020A10615F543E59A8778F250ECAA8F8C8465EE5811C" />
<File Index="2" Name="/src/Coverage/Program.cs" ChecksumAlgorithm="SHA256" Checksum="1B3D9F852A896CD8EBF786BC13EE242891EA00F49600B94CD7833C4AA1DE86B3" />
<File Index="3" Name="/src/Coverage/Bar.cs" ChecksumAlgorithm="SHA256" Checksum="147393855222EF85D83C298103D1BA96733F0FAD96CB4B3E7585FD53E09EEB8E" />
<File Index="4" Name="/src/Coverage/Foo.cs" ChecksumAlgorithm="SHA256" Checksum="D9C3FACA66B741C26680F181CA31D4342112BD629D1F929201205F5B1E7261FC" />
</FileIndices>
<Assembly Name="Tests" CoveredStatements="12" TotalStatements="12" CoveragePercent="100">
<Namespace Name="Tests" CoveredStatements="12" TotalStatements="12" CoveragePercent="100">
<Type Name="FooBarTests" CoveredStatements="12" TotalStatements="12" CoveragePercent="100">
<Method Name="TestBar():System.Void" CoveredStatements="4" TotalStatements="4" CoveragePercent="100">
<Statement FileIndex="1" Line="19" Column="9" EndLine="19" EndColumn="10" Covered="True" />
<Statement FileIndex="1" Line="20" Column="13" EndLine="20" EndColumn="33" Covered="True" />
<Statement FileIndex="1" Line="22" Column="13" EndLine="22" EndColumn="44" Covered="True" />
<Statement FileIndex="1" Line="23" Column="9" EndLine="23" EndColumn="10" Covered="True" />
</Method>
<Method Name="TestFoo():System.Void" CoveredStatements="4" TotalStatements="4" CoveragePercent="100">
<Statement FileIndex="1" Line="11" Column="9" EndLine="11" EndColumn="10" Covered="True" />
<Statement FileIndex="1" Line="12" Column="13" EndLine="12" EndColumn="33" Covered="True" />
<Statement FileIndex="1" Line="14" Column="13" EndLine="14" EndColumn="26" Covered="True" />
<Statement FileIndex="1" Line="15" Column="9" EndLine="15" EndColumn="10" Covered="True" />
</Method>
<Method Name="TestFooBar():System.Void" CoveredStatements="4" TotalStatements="4" CoveragePercent="100">
<Statement FileIndex="1" Line="27" Column="9" EndLine="27" EndColumn="10" Covered="True" />
<Statement FileIndex="1" Line="28" Column="13" EndLine="28" EndColumn="54" Covered="True" />
<Statement FileIndex="1" Line="30" Column="13" EndLine="30" EndColumn="61" Covered="True" />
<Statement FileIndex="1" Line="31" Column="9" EndLine="31" EndColumn="10" Covered="True" />
</Method>
</Type>
</Namespace>
</Assembly>
<Assembly Name="coverages" CoveredStatements="11" TotalStatements="20" CoveragePercent="55">
<Namespace Name="Coverage" CoveredStatements="11" TotalStatements="17" CoveragePercent="65">
<Type Name="Bar" CoveredStatements="4" TotalStatements="7" CoveragePercent="57">
<Method Name="RunBar(System.Boolean):System.Boolean" CoveredStatements="4" TotalStatements="7" CoveragePercent="57">
<Statement FileIndex="3" Line="8" Column="9" EndLine="8" EndColumn="10" Covered="True" />
<Statement FileIndex="3" Line="9" Column="13" EndLine="9" EndColumn="29" Covered="True" />
<Statement FileIndex="3" Line="10" Column="13" EndLine="10" EndColumn="14" Covered="False" />
<Statement FileIndex="3" Line="11" Column="17" EndLine="11" EndColumn="46" Covered="False" />
<Statement FileIndex="3" Line="12" Column="13" EndLine="12" EndColumn="14" Covered="False" />
<Statement FileIndex="3" Line="14" Column="13" EndLine="14" EndColumn="25" Covered="True" />
<Statement FileIndex="3" Line="15" Column="9" EndLine="15" EndColumn="10" Covered="True" />
</Method>
</Type>
<Type Name="Foo" CoveredStatements="3" TotalStatements="3" CoveragePercent="100">
<Method Name="RunFoo():System.Void" CoveredStatements="3" TotalStatements="3" CoveragePercent="100">
<Statement FileIndex="4" Line="8" Column="9" EndLine="8" EndColumn="10" Covered="True" />
<Statement FileIndex="4" Line="9" Column="13" EndLine="9" EndColumn="43" Covered="True" />
<Statement FileIndex="4" Line="10" Column="9" EndLine="10" EndColumn="10" Covered="True" />
</Method>
</Type>
<Type Name="FooBar" CoveredStatements="4" TotalStatements="7" CoveragePercent="57">
<Type Name="InnerClass" CoveredStatements="4" TotalStatements="7" CoveragePercent="57">
<Method Name="RunInnerClass(System.String):System.Boolean" CoveredStatements="4" TotalStatements="7" CoveragePercent="57">
<Statement FileIndex="5" Line="9" Column="13" EndLine="9" EndColumn="14" Covered="True" />
<Statement FileIndex="5" Line="10" Column="17" EndLine="10" EndColumn="31" Covered="True" />
<Statement FileIndex="5" Line="13" Column="25" EndLine="13" EndColumn="38" Covered="False" />
<Statement FileIndex="5" Line="15" Column="25" EndLine="15" EndColumn="38" Covered="False" />
<Statement FileIndex="5" Line="17" Column="25" EndLine="17" EndColumn="37" Covered="True" />
<Statement FileIndex="5" Line="19" Column="25" EndLine="19" EndColumn="38" Covered="False" />
<Statement FileIndex="5" Line="21" Column="13" EndLine="21" EndColumn="14" Covered="True" />
</Method>
</Type>
</Type>
</Namespace>
<Namespace Name="coverages" CoveredStatements="0" TotalStatements="3" CoveragePercent="0">
<Type Name="Program" CoveredStatements="0" TotalStatements="3" CoveragePercent="0">
<Method Name="Main(System.String[]):System.Void" CoveredStatements="0" TotalStatements="3" CoveragePercent="0">
<Statement FileIndex="2" Line="8" Column="9" EndLine="8" EndColumn="10" Covered="False" />
<Statement FileIndex="2" Line="9" Column="13" EndLine="9" EndColumn="47" Covered="False" />
<Statement FileIndex="2" Line="10" Column="9" EndLine="10" EndColumn="10" Covered="False" />
</Method>
</Type>
</Namespace>
</Assembly>
</Root>
29 changes: 29 additions & 0 deletions src/test/scala/com/codacy/rules/ReportRulesSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,35 @@ class ReportRulesSpec extends WordSpec with Matchers with PrivateMethodTester wi
success = true
)
}

"succeed even if one of the parsed reports ends up empty" in {
val coverageServices = mock[CoverageServices]
val gitFileFetcher = mock[GitFileFetcher]

gitFileFetcher.forCommit(any[String]).shouldReturn(Right(Seq("src/Coverage/FooBar.cs")))

coverageServices.sendReport(
any[String],
any[String],
any[CoverageReport],
anyBoolean,
Some(RequestTimeout(1000, 10000)),
Some(10000),
Some(3)
) returns SuccessfulResponse(RequestSuccess("Success"))

coverageServices
.sendFinalNotification(any[String], Some(RequestTimeout(1000, 10000)), Some(10000), Some(3)) returns SuccessfulResponse(
RequestSuccess("Success")
)

assertCodacyCoverage(
coverageServices,
gitFileFetcher,
List("src/test/resources/dotcover-example.xml", "src/test/resources/non-git-report.xml"),
success = true
)
}
}

"handleFailedResponse" should {
Expand Down

0 comments on commit 0b9d524

Please sign in to comment.