Exercise 3 Test Cases

[TestFixture]
public class Exercise3
{
    Brain brain;

    [SetUp]
    public void SetUp()
    {
        brain = new Brain();
    }

    /// <summary>
    /// Ensure the IsA works for immediate is_a relationships.
    /// </summary>
    [Test]
    public void IsA_Immediate()
    {
        IEntity Daniel = brain.CreateEntity("Daniel");
        IEntity person = brain.CreateEntity("person");
        IEntity is_a = brain.CreateEntity("is_a");
        brain.CreateRelationship(Daniel, is_a, person);

        Assert.IsTrue(Daniel.IsA(person));
    }

    /// <summary>
    /// Ensure the IsA works recursively.
    /// </summary>
    [Test]
    public void IsA_Recursive()
    {
        IEntity Daniel = brain.CreateEntity("Daniel");
        IEntity man = brain.CreateEntity("man");
        IEntity person = brain.CreateEntity("person");
        IEntity is_a = brain.CreateEntity("is_a");
        brain.CreateRelationship(Daniel, is_a, man);
        brain.CreateRelationship(man, is_a, person);

        Assert.IsTrue(Daniel.IsA(person));
    }

    /// <summary>
    /// Negative test for IsA.
    /// </summary>
    [Test]
    public void IsA_Negative()
    {
        IEntity Daniel = brain.CreateEntity("Daniel");
        IEntity person = brain.CreateEntity("person");

        Assert.IsFalse(Daniel.IsA(person));
    }

    /// <summary>
    /// Ensure HasA works for immediate has_a relationships.
    /// </summary>
    [Test]
    public void HasA_Immediate()
    {
        IEntity has_a = brain.CreateEntity("has_a");

        IEntity Daniel = brain.CreateEntity("Daniel");
        IEntity name = brain.CreateEntity("name");
        brain.CreateRelationship(Daniel, has_a, name);

        Assert.IsTrue(Daniel.HasA(name));
    }

    /// <summary>
    /// Ensure HasA works recursively for is_a relatives.
    /// </summary>
    [Test]
    public void HasA_Recursive()
    {
        IEntity is_a = brain.CreateEntity("is_a");
        IEntity has_a = brain.CreateEntity("has_a");

        IEntity Daniel = brain.CreateEntity("Daniel");
        IEntity person = brain.CreateEntity("person");
        brain.CreateRelationship(Daniel, is_a, person);
        IEntity name = brain.CreateEntity("name");
        brain.CreateRelationship(person, has_a, name);

        Assert.IsTrue(Daniel.HasA(name));
    }

    /// <summary>
    /// Ensure an exception is thrown if 'Get' is called for
    /// a property that does not exist.
    /// </summary>
    [Test]
    [ExpectedException(typeof(PropertyNotFoundException))]
    public void Set_PropertyNotFound()
    {
        IEntity Daniel = brain.CreateEntity("Daniel");
        IEntity name = brain.CreateEntity("name");
        IEntity wDaniel = brain.CreateEntity("'Daniel'");
        Daniel.Set(name, wDaniel);
    }

    /// <summary>
    /// Ensure an exception is thrown if 'Set' is called for
    /// a property that does not exist.
    /// </summary>
    [Test]
    [ExpectedException(typeof(PropertyNotFoundException))]
    public void Get_PropertyNotFound()
    {
        IEntity Daniel = brain.CreateEntity("Daniel");
        IEntity name = brain.CreateEntity("name");
        IEntity wDaniel = brain.CreateEntity("'Daniel'");
        Daniel.Get(name);
    }
}