public void Generate_PADModel_ThrowValidationException()
        {
            //arrange
            PADRoot root = new PADRoot();

            root.ProgramDescriptions.Add("English", new ProgramDescription());

            root.CompanyInfo.City       = "San Francisco";
            root.CompanyInfo.Country    = "USA";
            root.CompanyInfo.WebSiteUrl = "http://www.talex-soft.com";
            root.CompanyInfo.ContactInfo.AuthorFirstName  = "Firstname";
            root.CompanyInfo.ContactInfo.AuthorLastName   = "Lastname";
            root.CompanyInfo.ContactInfo.ContactFirstName = "Firstname";
            root.CompanyInfo.ContactInfo.ContactLastName  = "Lastname";
            root.ProgramInfo.ProgramName = "Cool Program";
            root.ProgramInfo.Version     = "2.0";
            root.ProgramInfo.SetReleaseDate(new DateTime(2013, 1, 3));
            root.ProgramInfo.Category = "Desktop::Screen Savers: Science";
            root.ProgramInfo.FileInfo.SetFileSize(3645785);

            //action
            Action action = () => { Target.Generate(root, _outputStream); };

            // assert
            action.Should().Throw <ValidationException>()
            .WithMessage("The field Name must be a string with a minimum length of 2 and a maximum length of 40.");
        }
        public void Generate_PADModel_SuccessResult()
        {
            //arrange
            PADRoot root = new PADRoot();

            root.ProgramDescriptions.Add("English", new ProgramDescription());

            root.CompanyInfo.Name       = "T-Alex Software";
            root.CompanyInfo.City       = "San Francisco";
            root.CompanyInfo.Country    = "USA";
            root.CompanyInfo.WebSiteUrl = "http://www.talex-soft.com";
            root.CompanyInfo.ContactInfo.AuthorFirstName  = "Firstname";
            root.CompanyInfo.ContactInfo.AuthorLastName   = "Lastname";
            root.CompanyInfo.ContactInfo.ContactFirstName = "Firstname";
            root.CompanyInfo.ContactInfo.ContactLastName  = "Lastname";
            root.ProgramInfo.ProgramName = "Cool Program";
            root.ProgramInfo.Version     = "2.0";
            root.ProgramInfo.SetReleaseDate(new DateTime(2013, 1, 3));
            root.ProgramInfo.Category = "Desktop::Screen Savers: Science";
            root.ProgramInfo.FileInfo.SetFileSize(3645785);
            root.WebInfo.ApplicationURLs.ScreenshotUrl = "https://some-domain.com/some-image.here.png";

            //action
            Target.Generate(root, _outputStream);
            _outputStream.Seek(0, SeekOrigin.Begin);
            string text = _outputStreamReader.ReadToEnd();

            // assert
            text.Should().NotBeEmpty();
        }
        /// <summary>
        /// Determines whether the specified PAD file model is valid.
        /// </summary>
        /// <param name="root">The object to validate.</param>
        /// <exception cref="System.ComponentModel.DataAnnotations.ValidationException">
        /// The object is not valid.
        /// </exception>
        /// <exception cref="System.ArgumentNullException">
        /// root is null.
        /// </exception>
        public void Validate(PADRoot root)
        {
            List <ValidationResult> results = new List <ValidationResult>();

            if (!TryValidate(root, results))
            {
                ValidationResult result = results.First();
                throw new ValidationException(result, null, null);
            }
        }
        /// <summary>
        /// Generates xml PAD file and puts to output stream.
        /// </summary>
        /// <param name="root">A root elemnt model for PAD file.</param>
        /// <param name="output">An output stream for writing generated PAD file.</param>
        public void Generate(PADRoot root, Stream output)
        {
            Validate(root);

            XmlSerializer serializer = new XmlSerializer(typeof(PADRoot));

            XmlWriter writer = XmlWriter.Create(output, _xmlSettings);

            serializer.Serialize(writer, root, _namespaces);
        }
 /// <summary>
 /// Determines whether the specified PAD file model is valid using the validation results collection.
 /// </summary>
 /// <param name="root">The object to validate.</param>
 /// <param name="results">A collection to hold each failed validation.</param>
 /// <returns>true if the object validates; otherwise, false.</returns>
 /// <exception cref="System.ArgumentNullException">
 /// root is null.
 /// </exception>
 public bool TryValidate(PADRoot root, List <ValidationResult> results)
 {
     return(DataAnnotationsValidator.TryValidateObjectRecursive(root, results));
 }