public void TiposItemController_AgregarTipoDeItemAProyecto()
        {
            HelperTestSistema.LimpiarArchivoBD();
            HelperTestSistema.IniciarServidor();

            //Creamos 1 proyecto1 directamente en la BD con dos tipos de item
            var tiposDeItemProyecto1 = HelperInstanciacionItems.GetTiposDeItem( "Proyecto 1", 2 );
            var proyecto = HelperInstanciacionProyectos.GetProyectos( 1 )[0];

            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[0] );
            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[1] );

            //Guardamos los objetos en la BD
            using ( IContextoProceso contexto = new ContextoProceso( HelperTestSistema.ObjectFactory ) )
            {
                contexto.ContenedorObjetos.Store( proyecto );
            }

            HelperTestSistema.ReiniciarConexion();

            //Creamos un tipo de item y lo agregamos al proyecto a traves de la API
            var controller = new TiposItemController( HelperTestSistema.ObjectFactory );

            //Obtenemos el 2 ya que tenemos que simular un nuevo tipo de item
            var nuevoTipoItem = HelperInstanciacionItems.GetTiposDeItem( "Proyecto 1" ,3 )[2];

            controller.Post( "P1", nuevoTipoItem );
            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los datos directamente de la base de datos para verificarlos

            var proyectosBD = new List<Proyecto>();

            using ( IContextoProceso contexto = new ContextoProceso(HelperTestSistema.ObjectFactory) )
            {
                 proyectosBD = (from Proyecto p in contexto.ContenedorObjetos select p).ToList();
            }

            HelperTestSistema.ReiniciarConexion();
            HelperTestSistema.FinalizarServidor();

            //Asserts
            Assert.Inconclusive( "Refactorizar y terminar este test" );
            //Debe haber un solo proyecto en la base de datos
            Assert.AreEqual( 1, proyectosBD.ToList().Count );
            //El proyecto debe tener 3 tipos de item
            Assert.AreEqual( 3, proyectosBD[0].TiposDeItem.Count() );
            //El tercer tipo de item debe ser el que agregamos
            Assert.AreEqual( "Proyecto 1-Tipo de item de prueba 3", proyectosBD[0].TiposDeItem.ToList()[2].Descripcion );
        }
        public void TiposItemController_ListarTiposItemDeProyecto()
        {
            HelperTestSistema.LimpiarArchivoBD();
            HelperTestSistema.IniciarServidor();

            //Creamos dos proyectos directamente en la BD
            //Cada proyecto tiene dos tipos de item
            var tiposDeItemProyecto1 = HelperInstanciacionItems.GetTiposDeItem( "Proyecto 1", 2 );
            var tiposDeItemProyecto2 = HelperInstanciacionItems.GetTiposDeItem( "Proyecto 2", 2 );
            var proyectos = HelperInstanciacionProyectos.GetProyectos( 2 );

            proyectos[0].AgregarTipoDeItem( tiposDeItemProyecto1[0] );
            proyectos[0].AgregarTipoDeItem( tiposDeItemProyecto1[1] );

            proyectos[1].AgregarTipoDeItem( tiposDeItemProyecto2[0] );
            proyectos[1].AgregarTipoDeItem( tiposDeItemProyecto2[1] );

            //Guardamos los objetos en la BD
            using ( IContextoProceso contexto = new ContextoProceso(HelperTestSistema.ObjectFactory) )
            {
                contexto.ContenedorObjetos.Store( proyectos );
            }

            HelperTestSistema.ReiniciarConexion();

            //Ahora obtenemos los datos desde la API
            var controller = new TiposItemController( HelperTestSistema.ObjectFactory );

            //Obtenemos los tipos de item del proyecto 1 desde la API
            var tiposDeItemProyecto1Request = controller.Get("P1");
            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los tipso de item del proyecto 2 desde la API
            var tiposDeItemProyecto2Request = controller.Get("P2");
            HelperTestSistema.ReiniciarConexion();

            HelperTestSistema.FinalizarServidor();

            //Asserts
            Assert.Inconclusive( "Refactorizar y terminar este test" );
            //La cantidad de tipos de item del proyecto 1 debe ser 2
            Assert.AreEqual( 2, tiposDeItemProyecto1.Count );
            //Los nombres y descripciones de los tipos de item del proyecto 1 deben ser los correctos
            Assert.AreEqual( 2, tiposDeItemProyecto2.Count );
            //Los nombres y descripciones de los tipos de item del proyecto 2 deben ser los correctos
            Assert.AreEqual( "Proyecto 1-Tipo de item de prueba 1", tiposDeItemProyecto1[0].Descripcion  );
            Assert.AreEqual( "Proyecto 1-Tipo de item de prueba 2", tiposDeItemProyecto1[1].Descripcion );
            //La cantidad de tipos de item del proyecto 2 debe ser 2
            Assert.AreEqual( "Proyecto 2-Tipo de item de prueba 1", tiposDeItemProyecto2[0].Descripcion );
            Assert.AreEqual( "Proyecto 2-Tipo de item de prueba 2", tiposDeItemProyecto2[1].Descripcion );
        }
        public void TiposItemController_ModificarTipoDeItemDeProyecto_ConReferencias()
        {
            HelperTestSistema.LimpiarArchivoBD();
            HelperTestSistema.IniciarServidor();

            //Creamos 1 proyecto1 directamente en la BD con dos tipos de item
            var tiposDeItemProyecto1 = HelperInstanciacionItems.GetTiposDeItem( "Proyecto 1", 3 );
            var proyecto = HelperInstanciacionProyectos.GetProyectos( 1 )[0];

            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[0] );
            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[1] );
            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[2] );

            //Cregamos un item y le asignamos el tipo de item 2
            var item = new Item("Item 1", "Item de prueba 1",tiposDeItemProyecto1[1], new Prioridad("Baja", "Test") );
            proyecto.AgregarItem( item );

            //Guardamos los objetos en la BD
            using ( IContextoProceso contexto = new ContextoProceso( HelperTestSistema.ObjectFactory ) )
            {
                contexto.ContenedorObjetos.Store( proyecto );
            }

            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los tipos de item del proyecto desde el controller
            var controller = new TiposItemController( HelperTestSistema.ObjectFactory );
            var tiposItem = controller.Get( "P1" );

            var tipoItemAModificar = tiposItem.ToList()[1];
            tipoItemAModificar.Descripcion = "Tipo de item 2 modificado";

            controller.Put( "P1", tipoItemAModificar );
            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los datos directamente desde la BD para validarlos
             //Obtenemos los datos para validar directamente desde la base de datos
            var  proyectosBD = new List<Proyecto>();
            using ( IContextoProceso contexto = new ContextoProceso( HelperTestSistema.ObjectFactory ) )
            {
                proyectosBD = (from Proyecto p in contexto.ContenedorObjetos select p).ToList();
            }

            HelperTestSistema.ReiniciarConexion();
            HelperTestSistema.FinalizarServidor();

            //Asserts
            Assert.Inconclusive( "Refactorizar y terminar este test" );
            //Tiene que haber un solo proyecto
            Assert.AreEqual( 1, proyectosBD.Count );
            //El proyeto debe tener 3 tipos de item
            Assert.AreEqual( 3, proyectosBD[0].TiposDeItem.Count() );
            //El tipo de item 2 debe estar modificado
            Assert.AreEqual( "Tipo de item 2 modificado", proyectosBD[0].TiposDeItem.ToList()[1].Descripcion );
            //El proyecto debe tener 1 item
            Assert.AreEqual( 1, proyectosBD[0].Items.Count() );
            //La instanacia del tipo de item 2 debe ser la misma asociada al item del proyecto
            Assert.AreSame( proyectosBD[0].TiposDeItem.ToList()[1], proyectosBD[0].Items.ToList()[0].TipoItem );
        }
        public void TiposItemController_QuitarTipoDeItemDeProyecto()
        {
            HelperTestSistema.LimpiarArchivoBD();
            HelperTestSistema.IniciarServidor();

            //Creamos 1 proyecto1 directamente en la BD con tres tipos de item
            var tiposDeItemProyecto1 = HelperInstanciacionItems.GetTiposDeItem( "Proyecto 1", 3 );
            var proyecto = HelperInstanciacionProyectos.GetProyectos( 1 )[0];

            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[0] );
            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[1] );
            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[2] );

            //Guardamos los objetos en la BD
            using ( IContextoProceso contexto = new ContextoProceso( HelperTestSistema.ObjectFactory ) )
            {
                contexto.ContenedorObjetos.Store( proyecto );
            }

            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los tipos de item desde el controller y damos de baja el tipo de item 2
            var controller = new TiposItemController( HelperTestSistema.ObjectFactory );
            var tiposItem = controller.Get( "P1" );

            var tipoItemABorrar = tiposItem.ToList()[1];
            controller.Delete( "P1", tipoItemABorrar.Nombre );
            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los datos directamente de la BD para validarlos
            var proyectosBD = new List<Proyecto>();
            var tiposItemBD = new List<TipoItem>();

            using ( IContextoProceso contexto = new ContextoProceso( HelperTestSistema.ObjectFactory ) )
            {
                proyectosBD = (from Proyecto p in contexto.ContenedorObjetos select p).ToList();
                tiposItemBD = (from TipoItem t in contexto.ContenedorObjetos select t).ToList();
            }

            HelperTestSistema.ReiniciarConexion();
            HelperTestSistema.FinalizarServidor();

            //Asserts
            Assert.Inconclusive( "Refactorizar y terminar este test" );
            //Debe haber 1 proyecto en la BD
            Assert.AreEqual( 1, proyectosBD.Count );
            //El proyecto debe tener dos tipos de item
            Assert.AreEqual( 2, proyectosBD[0].TiposDeItem.Count() );
            //Solo debe haber dos tipos de item en la BD
            Assert.AreEqual( 2, tiposItemBD.Count );
        }
        public void TiposItemController_ModificarTipoDeItemDeProyecto()
        {
            HelperTestSistema.LimpiarArchivoBD();
            HelperTestSistema.IniciarServidor();

            //Creamos 1 proyecto1 directamente en la BD con dos tipos de item
            var tiposDeItemProyecto1 = HelperInstanciacionItems.GetTiposDeItem( "Proyecto 1", 3 );
            var proyecto = HelperInstanciacionProyectos.GetProyectos( 1 )[0];

            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[0] );
            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[1] );
            proyecto.AgregarTipoDeItem( tiposDeItemProyecto1[2] );

            //Guardamos los objetos en la BD
            using ( IContextoProceso contexto = new ContextoProceso( HelperTestSistema.ObjectFactory ) )
            {
                contexto.ContenedorObjetos.Store( proyecto );
            }

            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los tipos de item del proyecto directamente a traves de la API
            var controller = new TiposItemController( HelperTestSistema.ObjectFactory );
            var tiposItem = controller.Get( "P1" );

            //Obtenemos el primer tipo de item y lo modificamos a traves de la API
            var tipoItem = tiposItem.ToList()[1];
            tipoItem.Descripcion = "Tipo de item 2 modificado";
            controller.Put( "P1", tipoItem );
            HelperTestSistema.ReiniciarConexion();

            //Obtenemos los datos para validar directamente desde la base de datos
            var  proyectosBD = new List<Proyecto>();
            using ( IContextoProceso contexto = new ContextoProceso( HelperTestSistema.ObjectFactory ) )
            {
                proyectosBD = (from Proyecto p in contexto.ContenedorObjetos select p).ToList();
            }

            HelperTestSistema.ReiniciarConexion();
            HelperTestSistema.FinalizarServidor();

            //Asserts
            Assert.Inconclusive( "Refactorizar y terminar este test" );
            //Tiene que haber un solo proyecto en la BD
            Assert.AreEqual( 1, proyectosBD.Count );
            //El proyecto debe tener 3 tipos de item
            Assert.AreEqual( 3, proyectosBD[0].TiposDeItem.Count() );
            //El tipo de item 2 debe tener la descripcion modificada
            Assert.AreEqual( "Tipo de item 2 modificado", proyectosBD[0].TiposDeItem.ToList()[1].Descripcion );
        }