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.");
}
}
}