namespace Webzine.Entity.Tests { using System; using System.ComponentModel.DataAnnotations; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; /// /// Méthodes utilitaires permettant de tester les entités. /// public static class Common { /// /// Vérifie que l'entité possède bien la propriété passée en paramètre. /// /// type de l'entité. /// nom de la propriété de l'entité. public static void HasProperty(Type typeObjet, string nomPropriete) { var property = typeObjet.GetProperty(nomPropriete); Assert.IsNotNull(property, "La classe " + typeObjet.Name + " doit avoir une propriété '" + nomPropriete + "'."); } /// /// Vérifie que l'attribut de l'entité a l'annotation [Display(Name = "xxx")] avec la valeur attendue. /// /// type de l'entité. /// nom de la propriété de l'entité. /// valeur attendue pour l'affichage de cette propriété. public static void AttributDisplay(Type typeObjet, string nomPropriete, string chaineAttendue) { var property = typeObjet.GetProperty(nomPropriete); var annotation = (DisplayAttribute)property.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault(); Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'a pas de libellé approprié. Il manque l'annotation Display."); Assert.AreEqual(chaineAttendue, annotation.Name); } /// /// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue. /// /// type de l'entité. /// nom de la propriété de l'entité. /// longueur maximum. public static void AttributLongueurMax(Type typeObjet, string nomPropriete, int max) { var property = typeObjet.GetProperty(nomPropriete); var annotation = (MaxLengthAttribute)property.GetCustomAttributes(typeof(MaxLengthAttribute), false).FirstOrDefault(); Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'a pas de longueur maximum. Il manque l'annotation MaxLength."); Assert.AreEqual(max, annotation.Length, "La propriété '" + nomPropriete + "' ne doit pas pouvoir dépasser " + max + " caractères."); } /// /// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue. /// /// type de l'entité. /// nom de la propriété de l'entité. /// longueur minimum. public static void AttributLongueurMin(Type typeObjet, string nomPropriete, int min) { var property = typeObjet.GetProperty(nomPropriete); var annotation = (MinLengthAttribute)property.GetCustomAttributes(typeof(MinLengthAttribute), false).FirstOrDefault(); Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'a pas de longueur minimum. Il manque l'annotation MinLength."); Assert.AreEqual(min, annotation.Length, "La propriété '" + nomPropriete + "' ne avoir au moins " + min + " caractères."); } /// /// Vérifie que l'attribut de l'entité a l'annotation [Required]. /// /// type de l'entité. /// nom de la propriété de l'entité. public static void AttributRequis(Type typeObjet, string nomPropriete) { var property = typeObjet.GetProperty(nomPropriete); var annotation = (RequiredAttribute)property.GetCustomAttributes(typeof(RequiredAttribute), false).FirstOrDefault(); Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'est pas obligatoire. Il manque l'annotation Required."); } /// /// Vérifie que l'attribut de l'entité n'a pas l'annotation [Url]. /// /// type de l'entité. /// nom de la propriété de l'entité. public static void AttributHasNotUrlValidation(Type typeObjet, string nomPropriete) { var property = typeObjet.GetProperty(nomPropriete); var annotation = (UrlAttribute)property.GetCustomAttributes(typeof(UrlAttribute), false).FirstOrDefault(); Assert.IsNull(annotation, "La propriété '" + nomPropriete + "' ne doit pas être une URL obligatoirement. Retirez l'annotation Url."); } } }