public void Convert_UnknownVulnerabilityProbability_ArgumentOutOfRangeException()
        {
            var sonarQubeHotspot  = CreateSonarQubeHotspot(probability: "some probability");
            var issueVizConverter = SetupIssueVizConverter(Mock.Of <IAnalysisIssueVisualization>());

            var    testSubject = new HotspotToIssueVisualizationConverter(issueVizConverter.Object, Mock.Of <IAbsoluteFilePathLocator>());
            Action act         = () => testSubject.Convert(sonarQubeHotspot);

            act.Should().Throw <ArgumentOutOfRangeException>().And.ParamName.Should().Be("vulnerabilityProbability");
        }
        public void Convert_VulnerabilityProbability_ConvertedToHotspotPriority(string probability, HotspotPriority expectedPriority)
        {
            var sonarQubeHotspot  = CreateSonarQubeHotspot(probability: probability);
            var issueVizConverter = SetupIssueVizConverter(Mock.Of <IAnalysisIssueVisualization>());

            var testSubject = new HotspotToIssueVisualizationConverter(issueVizConverter.Object, Mock.Of <IAbsoluteFilePathLocator>());

            testSubject.Convert(sonarQubeHotspot);

            issueVizConverter.Verify(x => x.Convert(
                                         It.Is((IHotspot hotspot) => hotspot.Rule.Priority == expectedPriority),
                                         It.IsAny <ITextSnapshot>()),
                                     Times.Once);
        }
        public void Convert_CreatedIssueVisualization()
        {
            var creationDate = DateTimeOffset.UtcNow.Subtract(TimeSpan.FromMinutes(10342));
            var lastUpdated  = DateTimeOffset.Now;

            var sonarQubeHotspot = CreateSonarQubeHotspot(
                hotspotKey: "some key",
                filePath: "some path",
                probability: "high",
                textRange: new IssueTextRange(5, 10, 15, 20),
                message: "message",
                ruleKey: "rule key",

                lineHash: "hash-xxx");

            var absoluteFilePathLocator = SetupAbsoluteFilePathLocator("some path", "some absolute path");

            var expectedIssueViz  = Mock.Of <IAnalysisIssueVisualization>();
            var issueVizConverter = SetupIssueVizConverter(expectedIssueViz);

            var testSubject = new HotspotToIssueVisualizationConverter(issueVizConverter.Object, absoluteFilePathLocator.Object);
            var issueViz    = testSubject.Convert(sonarQubeHotspot);

            issueViz.Should().Be(expectedIssueViz);

            issueVizConverter.Verify(x => x.Convert(
                                         It.Is((IHotspot hotspot) =>
                                               hotspot.HotspotKey == "some key" &&
                                               hotspot.Rule.Priority == HotspotPriority.High &&
                                               hotspot.LineHash == "hash-xxx" &&
                                               hotspot.Flows.IsEmpty() &&
                                               hotspot.Message == "message" &&
                                               hotspot.RuleKey == "rule key" &&
                                               hotspot.Rule.RuleKey == "rule key" &&
                                               hotspot.FilePath == "some absolute path" &&
                                               hotspot.ServerFilePath == "some path" &&
                                               hotspot.StartLine == 5 &&
                                               hotspot.EndLine == 10 &&
                                               hotspot.StartLineOffset == 15 &&
                                               hotspot.EndLineOffset == 20),
                                         It.IsAny <ITextSnapshot>()),
                                     Times.Once);
        }
        public void Convert_CannotGetAbsoluteFilePath_FilePathIsNull()
        {
            const string originalPath = "some path";

            var sonarQubeHotspot        = CreateSonarQubeHotspot(filePath: originalPath);
            var absoluteFilePathLocator = SetupAbsoluteFilePathLocator(originalPath, null);

            var expectedIssueViz  = Mock.Of <IAnalysisIssueVisualization>();
            var issueVizConverter = SetupIssueVizConverter(expectedIssueViz);

            var testSubject = new HotspotToIssueVisualizationConverter(issueVizConverter.Object, absoluteFilePathLocator.Object);
            var issueViz    = testSubject.Convert(sonarQubeHotspot);

            issueViz.Should().Be(expectedIssueViz);

            issueVizConverter.Verify(x => x.Convert(
                                         It.Is((IHotspot hotspot) =>
                                               hotspot.FilePath == null &&
                                               hotspot.ServerFilePath == originalPath),
                                         It.IsAny <ITextSnapshot>()),
                                     Times.Once);
        }