public virtual void PublishContestWithIncorrectBaselineResultsTest()
        {
            //authenticate with valid credentials
            AuthenticationResponse authenticationResponse = AuthenticateSync(ValidCredentials);

            //check if authentication succeed
            Assert.AreEqual(ResponseStatus.STATUS_SUCCESS, authenticationResponse.Status);

            //create dummy contest
            var dummyContest = CreateDummyContest("PublishContestWithIncorrectBaselineResultsTest");

            //create dummy contest results that are incorrect (they do not match contest metric definitions)
            var seriesMetric   = MockContestResultsHelper.CreateDummySeriesMetricResults("Not matching series metric name", "Some description");
            var boxMetric      = MockContestResultsHelper.CreateDummyBoxSummaryMetricResults("Not matchin box metric name", "Some description");
            var resultDataset1 = CreateDummyResultsDTO("Dataset 1", seriesMetric, boxMetric); //the name of metric won't match with metric definitions in the contest
            var allResults     = new List <DatasetResultsDTO>()
            {
                resultDataset1
            };

            Random         random         = new Random();
            double         score          = random.NextDouble();
            ContestResults contestResults = new ContestResults(dummyContest.ContestGUID, "Baseline", "Baseline technique description", allResults, score, FakeBaseData);

            dummyContest.BaselineResults = contestResults;

            //the authentication provides the ticket necessary to publish the contest
            ContestPublishedResponse response = PublishContestSync(authenticationResponse.Ticket, ValidCredentials.Username, dummyContest);

            Assert.AreEqual(ResponseStatus.STATUS_FAILURE, response.Status);
            Assert.IsNotNull(response.ErrorMessage);
            Assert.AreEqual("Baseline results failed to be saved. Metric results does not match metrics defined in the contest.", response.ErrorMessage);
        }
        public void Setup()
        {
            //create mock box line series metric
            LineSeriesMetric = MockContestResultsHelper.CreateDummySeriesMetricResults(m_mockSeriesMetricName, "Mock series metric description");

            //create mock box summary metric
            BoxSummaryMetric = MockContestResultsHelper.CreateDummyBoxSummaryMetricResults(m_mockBoxPlotMetricName, "Mock box plot metric description");

            DummyCorrectResults = GenerateDummyResults(LineSeriesMetric, BoxSummaryMetric);

            FakeBaseData = MockContestResultsHelper.CreateDummyBaseData();
        }
        public virtual void PublishContestResultTest()
        {
            //authenticate with valid credentials
            AuthenticationResponse authenticationResponse = AuthenticateSync(ValidCredentials);

            //check if authentication succeed
            Assert.AreEqual(ResponseStatus.STATUS_SUCCESS, authenticationResponse.Status);

            //create dummy contest
            var dummyContest = CreateDummyContest("PublishContestResultTest");

            //the authentication provides the ticket necessary to publish the contest
            ContestPublishedResponse response = PublishContestSync(authenticationResponse.Ticket, ValidCredentials.Username, dummyContest);

            Assert.AreEqual(ResponseStatus.STATUS_SUCCESS, response.Status);

            //once the contest is published test publishing contest results

            Random         random         = new Random();
            double         score          = random.NextDouble();
            ContestResults contestResults = new ContestResults(dummyContest.ContestGUID,
                                                               "Mock technique", "Mock technique description", DummyCorrectResults, score, FakeBaseData);

            //reuse the same ticket and valid credentials...
            //typically it would be another user, but it doesn't matter for test purposes (it may be so the contest creator also publishes results)
            ContestResultsPublishedResponse resultPublishedResponse = PublishContestResultSync(authenticationResponse.Ticket, ValidCredentials.Username, contestResults);

            Assert.AreEqual(ResponseStatus.STATUS_SUCCESS, resultPublishedResponse.Status);
            Assert.IsNull(resultPublishedResponse.ErrorMessage);

            //create other set of results for the same metrics
            var lineSeriesMetric    = MockContestResultsHelper.CreateDummySeriesMetricResults(m_mockSeriesMetricName, "Mock series metric description");
            var boxSummaryMetric    = MockContestResultsHelper.CreateDummyBoxSummaryMetricResults(m_mockBoxPlotMetricName, "Mock box plot metric description");
            var otherCorrectResults = GenerateDummyResults(lineSeriesMetric, boxSummaryMetric);

            score                   = random.NextDouble();
            contestResults          = new ContestResults(dummyContest.ContestGUID, "Another technique", "Another technique description", otherCorrectResults, score, FakeBaseData);
            resultPublishedResponse = PublishContestResultSync(authenticationResponse.Ticket, ValidCredentials.Username, contestResults);

            Assert.AreEqual(ResponseStatus.STATUS_SUCCESS, resultPublishedResponse.Status);
            Assert.IsNull(resultPublishedResponse.ErrorMessage);
            Assert.IsNotNull(resultPublishedResponse.ContestWebsiteLink);
        }
        public virtual void PublishNotMatchingContestResultTest()
        {
            //authenticate with valid credentials
            AuthenticationResponse authenticationResponse = AuthenticateSync(ValidCredentials);

            //check if authentication succeed
            Assert.AreEqual(ResponseStatus.STATUS_SUCCESS, authenticationResponse.Status);

            //create dummy contest
            var dummyContest = CreateDummyContest("PublishNotMatchingContestResultTest");

            //the authentication provides the ticket necessary to publish the contest
            ContestPublishedResponse response = PublishContestSync(authenticationResponse.Ticket, ValidCredentials.Username, dummyContest);

            Assert.AreEqual(ResponseStatus.STATUS_SUCCESS, response.Status);

            //once the contest is published test publishing contest results

            //create dummy contest results, that have metric that does not match contest metric definitions
            var seriesMetric   = MockContestResultsHelper.CreateDummySeriesMetricResults("Not matching series metric name", "Some description");
            var boxMetric      = MockContestResultsHelper.CreateDummyBoxSummaryMetricResults("Not matchin box metric name", "Some description");
            var resultDataset1 = CreateDummyResultsDTO("Dataset 1", seriesMetric, boxMetric); //the name of metric won't match with metric definitions in the contest
            var allResults     = new List <DatasetResultsDTO>()
            {
                resultDataset1
            };

            Random         random         = new Random();
            double         score          = random.NextDouble();
            ContestResults contestResults = new ContestResults(dummyContest.ContestGUID, "Mock technique", "Mock technique description", allResults, score, FakeBaseData);

            //reuse the same ticket and valid credentials...
            //typically it would be another user, but it doesn't matter for test purposes (it may be so the contest creator also publishes results)
            ContestResultsPublishedResponse resultPublishedResponse = PublishContestResultSync(authenticationResponse.Ticket, ValidCredentials.Username, contestResults);

            //cannot publish empty results
            Assert.AreEqual(ResponseStatus.STATUS_FAILURE, resultPublishedResponse.Status);
            Assert.IsNotNull(resultPublishedResponse.ErrorMessage);
            Assert.AreEqual("Metric results does not match metrics defined in the contest.", resultPublishedResponse.ErrorMessage);
        }