public void WhenConvertingWithProjectMeausreShouldAppendProjectMeasure()
        {
            this.measureConverter = new MeasureConverter <int>(new DateTime(2018, 9, 17), new DateTime(2018, 9, 18), metric, mockMeasureAggregatorProject.Object, "//prefix/");

            var dailyCodeChurn1 = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file1",
                Added     = 10,
                Deleted   = 10
            };
            var dailyCodeChurn2 = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file2",
                Added     = 5,
                Deleted   = 5
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessProjectMeasure(measures);
            this.measureConverter.ProcessProjectMeasure(measures);

            Assert.Single(measures.MeasuresProject.Where(m => m.MetricKey == "key"));
        }
        public void WhenExportingShouldGenerateContentToFile()
        {
            var mockStreamFactory = new Mock <IStreamFactory>();
            var memoryStream      = new MemoryStream();

            mockStreamFactory.Setup(m => m.createFileStream("filename", FileMode.Create, FileAccess.Write)).Returns(memoryStream);

            var measures = new SonarMeasuresJson()
            {
                Measures = new List <IMeasure>()
                {
                    new Measure <int>()
                    {
                        MetricKey = "key",
                        File      = "file",
                        Value     = 1
                    }
                }
            };

            var jsonExporter = new JsonExporter(mockStreamFactory.Object);

            jsonExporter.Export(measures, "filename");

            var resultString = UTF8Encoding.UTF8.GetString(memoryStream.GetBuffer());

            Assert.NotEmpty(resultString);
        }
        public void WhenConvertingNoProjectMeausreShouldAppendProjectMeasure()
        {
            this.measureConverter = new MeasureConverterRaw <string>(metric, mockMeasureAggregatorProject.Object, "//prefix/");
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessProjectMeasure(measures);

            Assert.NotEmpty(measures.MeasuresProject.Where(m => m.MetricKey == "key"));
        }
        public void WhenConvertingShouldAdd()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 12:00:00",
                FileName  = "file1"
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Equal("file1", (Assert.Single(measures.MeasuresRaw) as Measure <string>).Value);
        }
        public void WhenConvertingWithinRangeAndDiffrentCaseShouldRemoveFilePrefix()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "//PREfix/file"
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Equal("file",
                         measures.MeasuresRaw.Where(m => m.MetricKey == "key").Single().File);
        }
        public void WhenConvertingWithProjectMeausreShouldNotThrow()
        {
            var measures = new SonarMeasuresJson();

            try
            {
                this.measureConverter.ProcessProjectMeasure(measures);
                Assert.True(true);
            }
            catch (Exception)
            {
                Assert.True(false);
            }
        }
        public void WhenConvertingWithinRangeShouldAppendMetrics()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file1",
                Added     = 10,
                Deleted   = 10
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.NotEmpty(measures.Metrics.Where(m => m.MetricKey == "key"));
        }
        public void WhenConvertingAndBeforeRangeShouldDoNothing()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/16 12:00:00",
                FileName  = "file1",
                Added     = 10,
                Deleted   = 10
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Empty(measures.Measures);
        }
        public void WhenConvertingWithinRangeAndNoFilePrefixShouldConvert()
        {
            this.measureConverter = new MeasureConverterRaw <string>(metric, mockMeasureAggregator.Object, null);
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "//prefix/file"
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Equal("//prefix/file",
                         measures.MeasuresRaw.Where(m => m.MetricKey == "key").Single().File);
        }
        public void WhenConvertingANonProjectAggregatorWithProjectMeausreShouldDoNothing()
        {
            this.measureConverter = new MeasureConverterRaw <string>(metric, mockMeasureAggregator.Object, "//prefix/");

            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file1"
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessProjectMeasure(measures);

            Assert.Empty(measures.MeasuresProject.Where(m => m.MetricKey == "key"));
        }
        public void WhenConvertingAndInRangeAndValueZeroShouldDoNothing()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp       = "2018/09/17 12:00:00",
                FileName        = "file1",
                Added           = 0,
                Deleted         = 0,
                NumberOfChanges = 0
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Empty(measures.Measures);
        }
        public void WhenConvertingWithinRangeShouldAppendMeasures()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file1",
                Added     = 10,
                Deleted   = 10
            };
            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Equal(dailyCodeChurn.TotalLinesChanged,
                         measures.Measures.Where(m => m.MetricKey == "key" && m.File == dailyCodeChurn.FileName).Select(m => m as Measure <int>).Single().Value);
        }
        public void WhenConvertingAndInvalidDailyCodeChurnShouldNotAdd()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file1"
            };

            this.mockMeasureAggregator.Setup(m => m.HasValue(dailyCodeChurn)).Returns(false);

            var measures = new SonarMeasuresJson();

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Empty(measures.MeasuresRaw);
        }
        public void WhenConvertingAndAlreadyHaveExistingMeasureShouldUpdate()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file1"
            };
            var measures = new SonarMeasuresJson();

            measures.AddRawMeasure(new Measure <string>()
            {
                MetricKey = "key",
                File      = "file1",
                Value     = "file1"
            });

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Equal("file1,file1",
                         measures.MeasuresRaw.Where(m => m.MetricKey == "key" && m.File == dailyCodeChurn.FileName).Select(m => m as Measure <string>).Single().Value);
        }
        public void WhenConvertingAndAlreadyHaveExistingMeasureShouldUpdate()
        {
            var dailyCodeChurn = new DailyCodeChurn()
            {
                Timestamp = "2018/09/17 00:00:00",
                FileName  = "file1",
                Added     = 10,
                Deleted   = 10
            };
            var measures = new SonarMeasuresJson();

            measures.AddFileMeasure(new Measure <int>()
            {
                MetricKey = "key",
                File      = "file1",
                Value     = 5
            });

            this.measureConverter.ProcessFileMeasure(dailyCodeChurn, measures);

            Assert.Equal(dailyCodeChurn.TotalLinesChanged + 5,
                         measures.Measures.Where(m => m.MetricKey == "key" && m.File == dailyCodeChurn.FileName).Select(m => m as Measure <int>).Single().Value);
        }
 public GivenASonarMeasuresJson()
 {
     this.sonarMeasuresJson = new SonarMeasuresJson();
 }