Skip to content

Commit

Permalink
SLVS-1623 Move CleanCodeAttribute enum conversion from IRuleInfoConve…
Browse files Browse the repository at this point in the history
…rter (#5837)
  • Loading branch information
gabriela-trutan-sonarsource authored Nov 15, 2024
1 parent 64f505a commit 102e546
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 23 deletions.
24 changes: 1 addition & 23 deletions src/Education/Rule/IRuleInfoConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
using SonarLint.VisualStudio.SLCore.Common.Helpers;
using SonarLint.VisualStudio.SLCore.Common.Models;
using SonarLint.VisualStudio.SLCore.Service.Rules.Models;
using CleanCodeAttribute = SonarLint.VisualStudio.Core.Analysis.CleanCodeAttribute;
using IssueSeverity = SonarLint.VisualStudio.SLCore.Common.Models.IssueSeverity;
using SoftwareQuality = SonarLint.VisualStudio.Core.Analysis.SoftwareQuality;

Expand All @@ -48,7 +47,7 @@ public IRuleInfo Convert(IRuleDetails details) =>
Convert(details.severityDetails.Left?.severity),
Convert(details.severityDetails.Left?.type),
details.description?.Right,
Convert(details.severityDetails.Right?.cleanCodeAttribute),
(details.severityDetails.Right?.cleanCodeAttribute).ToCleanCodeAttribute(),
Convert(details.severityDetails.Right?.impacts));

private static RuleIssueSeverity? Convert(IssueSeverity? issueSeverity) =>
Expand All @@ -74,27 +73,6 @@ public IRuleInfo Convert(IRuleDetails details) =>
_ => throw new ArgumentOutOfRangeException(nameof(ruleType), ruleType, null)
};

private static CleanCodeAttribute? Convert(SLCore.Common.Models.CleanCodeAttribute? cleanCodeAttribute) =>
cleanCodeAttribute switch
{
SLCore.Common.Models.CleanCodeAttribute.CONVENTIONAL => CleanCodeAttribute.Conventional,
SLCore.Common.Models.CleanCodeAttribute.FORMATTED => CleanCodeAttribute.Formatted,
SLCore.Common.Models.CleanCodeAttribute.IDENTIFIABLE => CleanCodeAttribute.Identifiable,
SLCore.Common.Models.CleanCodeAttribute.CLEAR => CleanCodeAttribute.Clear,
SLCore.Common.Models.CleanCodeAttribute.COMPLETE => CleanCodeAttribute.Complete,
SLCore.Common.Models.CleanCodeAttribute.EFFICIENT => CleanCodeAttribute.Efficient,
SLCore.Common.Models.CleanCodeAttribute.LOGICAL => CleanCodeAttribute.Logical,
SLCore.Common.Models.CleanCodeAttribute.DISTINCT => CleanCodeAttribute.Distinct,
SLCore.Common.Models.CleanCodeAttribute.FOCUSED => CleanCodeAttribute.Focused,
SLCore.Common.Models.CleanCodeAttribute.MODULAR => CleanCodeAttribute.Modular,
SLCore.Common.Models.CleanCodeAttribute.TESTED => CleanCodeAttribute.Tested,
SLCore.Common.Models.CleanCodeAttribute.LAWFUL => CleanCodeAttribute.Lawful,
SLCore.Common.Models.CleanCodeAttribute.RESPECTFUL => CleanCodeAttribute.Respectful,
SLCore.Common.Models.CleanCodeAttribute.TRUSTWORTHY => CleanCodeAttribute.Trustworthy,
null => null,
_ => throw new ArgumentOutOfRangeException(nameof(cleanCodeAttribute), cleanCodeAttribute, null)
};

private static Dictionary<SoftwareQuality, SoftwareQualitySeverity> Convert(List<ImpactDto> cleanCodeAttribute) =>
cleanCodeAttribute?.ToDictionary(x => x.softwareQuality.ToSoftwareQuality(), x => x.impactSeverity.ToSoftwareQualitySeverity());
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
using SonarLint.VisualStudio.Core.Analysis;
using SonarLint.VisualStudio.SLCore.Common.Helpers;
using SonarLint.VisualStudio.SLCore.Common.Models;
using SonarLint.VisualStudio.SLCore.Service.Rules.Models;
using SoftwareQuality = SonarLint.VisualStudio.Core.Analysis.SoftwareQuality;
using CleanCodeAttribute = SonarLint.VisualStudio.Core.Analysis.CleanCodeAttribute;

namespace SonarLint.VisualStudio.SLCore.UnitTests.Common.Helpers;

Expand Down Expand Up @@ -193,4 +195,39 @@ Unexpected enum value
Actual value was 1000.
""");
}

[TestMethod]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.CONVENTIONAL, CleanCodeAttribute.Conventional)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.FORMATTED, CleanCodeAttribute.Formatted)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.IDENTIFIABLE, CleanCodeAttribute.Identifiable)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.CLEAR, CleanCodeAttribute.Clear)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.COMPLETE, CleanCodeAttribute.Complete)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.EFFICIENT, CleanCodeAttribute.Efficient)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.LOGICAL, CleanCodeAttribute.Logical)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.DISTINCT, CleanCodeAttribute.Distinct)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.FOCUSED, CleanCodeAttribute.Focused)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.MODULAR, CleanCodeAttribute.Modular)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.TESTED, CleanCodeAttribute.Tested)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.LAWFUL, CleanCodeAttribute.Lawful)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.RESPECTFUL, CleanCodeAttribute.Respectful)]
[DataRow(SLCore.Common.Models.CleanCodeAttribute.TRUSTWORTHY, CleanCodeAttribute.Trustworthy)]
[DataRow(null, null)]
public void ToCleanCodeAttribute_ConvertsCorrectly(SLCore.Common.Models.CleanCodeAttribute? slCoreCleanCodeAttribute, CleanCodeAttribute? expected)
{
var result = slCoreCleanCodeAttribute.ToCleanCodeAttribute();

result.Should().Be(expected);
}

[TestMethod]
public void ToCleanCodeAttribute_ValueOutOfRange_Throws()
{
var act = () => ((SLCore.Common.Models.CleanCodeAttribute?)1000).ToCleanCodeAttribute();

act.Should().Throw<ArgumentOutOfRangeException>().WithMessage("""
Unexpected enum value
Parameter name: cleanCodeAttribute
Actual value was 1000.
""");
}
}
22 changes: 22 additions & 0 deletions src/SLCore/Common/Helpers/ModelConversionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
using SonarLint.VisualStudio.Core.Analysis;
using SonarLint.VisualStudio.SLCore.Common.Models;
using SoftwareQuality = SonarLint.VisualStudio.Core.Analysis.SoftwareQuality;
using CleanCodeAttribute = SonarLint.VisualStudio.Core.Analysis.CleanCodeAttribute;

namespace SonarLint.VisualStudio.SLCore.Common.Helpers;

Expand Down Expand Up @@ -77,5 +78,26 @@ public static SoftwareQuality ToSoftwareQuality(this Models.SoftwareQuality soft
_ => throw new ArgumentOutOfRangeException(nameof(softwareQuality), softwareQuality, SLCoreStrings.ModelExtensions_UnexpectedValue)
};

public static CleanCodeAttribute? ToCleanCodeAttribute(this SLCore.Common.Models.CleanCodeAttribute? cleanCodeAttribute) =>
cleanCodeAttribute switch
{
SLCore.Common.Models.CleanCodeAttribute.CONVENTIONAL => CleanCodeAttribute.Conventional,
SLCore.Common.Models.CleanCodeAttribute.FORMATTED => CleanCodeAttribute.Formatted,
SLCore.Common.Models.CleanCodeAttribute.IDENTIFIABLE => CleanCodeAttribute.Identifiable,
SLCore.Common.Models.CleanCodeAttribute.CLEAR => CleanCodeAttribute.Clear,
SLCore.Common.Models.CleanCodeAttribute.COMPLETE => CleanCodeAttribute.Complete,
SLCore.Common.Models.CleanCodeAttribute.EFFICIENT => CleanCodeAttribute.Efficient,
SLCore.Common.Models.CleanCodeAttribute.LOGICAL => CleanCodeAttribute.Logical,
SLCore.Common.Models.CleanCodeAttribute.DISTINCT => CleanCodeAttribute.Distinct,
SLCore.Common.Models.CleanCodeAttribute.FOCUSED => CleanCodeAttribute.Focused,
SLCore.Common.Models.CleanCodeAttribute.MODULAR => CleanCodeAttribute.Modular,
SLCore.Common.Models.CleanCodeAttribute.TESTED => CleanCodeAttribute.Tested,
SLCore.Common.Models.CleanCodeAttribute.LAWFUL => CleanCodeAttribute.Lawful,
SLCore.Common.Models.CleanCodeAttribute.RESPECTFUL => CleanCodeAttribute.Respectful,
SLCore.Common.Models.CleanCodeAttribute.TRUSTWORTHY => CleanCodeAttribute.Trustworthy,
null => null,
_ => throw new ArgumentOutOfRangeException(nameof(cleanCodeAttribute), cleanCodeAttribute, SLCoreStrings.ModelExtensions_UnexpectedValue)
};

public static Impact ToImpact(this ImpactDto impact) => new(impact.softwareQuality.ToSoftwareQuality(), impact.impactSeverity.ToSoftwareQualitySeverity());
}

0 comments on commit 102e546

Please sign in to comment.