string exportToXML(Race race)
        {
            DSVExport    dsvExport = new DSVExport();
            MemoryStream xmlData   = new MemoryStream();

            dsvExport.ExportXML(xmlData, race);

            // Convert to string
            xmlData.Position = 0;
            StreamReader reader = new StreamReader(xmlData);

            return(reader.ReadToEnd());
        }
        public void BasicExceptions_MandatoryFields()
        {
            var model = createTestDataModel1Race1Run();

            DSVExport    dsvExport = new DSVExport();
            MemoryStream xmlData   = null;

            var raceProps = new AdditionalRaceProperties();

            model.GetRace(0).AdditionalProperties = raceProps;

            xmlData = new MemoryStream();
            Assert.AreEqual("missing racedate",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.DateResultList = DateTime.Today;

            xmlData = new MemoryStream();
            Assert.AreEqual("missing raceid",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).AdditionalProperties.RaceNumber = "1234";

            xmlData = new MemoryStream();
            Assert.AreEqual("missing raceorganizer",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).AdditionalProperties.Organizer = "WSV Glonn";

            xmlData = new MemoryStream();
            Assert.AreEqual("missing racename",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).AdditionalProperties.Description = "Test Race";

            xmlData = new MemoryStream();
            Assert.AreEqual("missing raceplace",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).AdditionalProperties.Location = "Test Location";



            xmlData = new MemoryStream();
            Assert.AreEqual("missing useddsvlist",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetDB().StoreKeyValue("DSV_UsedDSVList", "123");

            xmlData = new MemoryStream();
            Assert.AreEqual("missing f-value",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).RaceConfiguration.ValueF = 720.0;

            xmlData = new MemoryStream();
            Assert.AreEqual("wrong raceresultview",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);

            var rvp = new DSVSchoolRaceResultViewProvider();

            rvp.Init(model.GetRace(0), model);
            model.GetRace(0).SetResultViewProvider(rvp);



            xmlData = new MemoryStream();
            Assert.AreEqual("missing racejury ChiefRace",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).AdditionalProperties.RaceManager = new AdditionalRaceProperties.Person {
                Name = "Race Manager", Club = "Club"
            };

            xmlData = new MemoryStream();
            Assert.AreEqual("missing racejury Referee",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).AdditionalProperties.RaceReferee = new AdditionalRaceProperties.Person {
                Name = "Race Referee", Club = "Club"
            };

            xmlData = new MemoryStream();
            Assert.AreEqual("missing racejury RepresentativeTrainer",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            model.GetRace(0).AdditionalProperties.TrainerRepresentative = new AdditionalRaceProperties.Person {
                Name = "Trainer Rep", Club = "Club"
            };



            xmlData = new MemoryStream();
            Assert.AreEqual("missing coarsename",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.CoarseName = "Kurs 1";

            xmlData = new MemoryStream();
            Assert.AreEqual("missing number_of_gates",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.RaceRun1.Gates = 10;

            xmlData = new MemoryStream();
            Assert.AreEqual("missing number_of_turninggates",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.RaceRun1.Turns = 9;

            xmlData = new MemoryStream();
            Assert.AreEqual("missing startaltitude",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.StartHeight = 1000;

            xmlData = new MemoryStream();
            Assert.AreEqual("missing finishaltitude",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.FinishHeight = 100;

            xmlData = new MemoryStream();
            Assert.AreEqual("missing courselength",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.CoarseLength = 1000;

            xmlData = new MemoryStream();
            Assert.AreEqual("missing coursesetter",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.RaceRun1.CoarseSetter = new AdditionalRaceProperties.Person {
                Name = "Sven Flossmann", Club = "WSV Glonn"
            };

            xmlData = new MemoryStream();
            Assert.AreEqual("missing forerunner",
                            Assert.ThrowsException <DSVExportException>(() => dsvExport.ExportXML(xmlData, model.GetRace(0))).Message);
            raceProps.RaceRun1.Forerunner1 = new AdditionalRaceProperties.Person {
                Name = "Fore Runner", Club = "WSV Glonn"
            };

            // No exception is allow to occur here
            xmlData = new MemoryStream();
            dsvExport.ExportXML(xmlData, model.GetRace(0));
        }