Example #1
0
        public void TestAskAndParseAPI()
        {
            Database database = new Database(1);

            Database database2 = new Database(5);

            APIInfoCasas apiCore = new APIInfoCasas();

            ICApi api = new ICApi();

            api.SetDepartment("montevideo");
            api.SetPropertyTypes(new PropertyType[] { PropertyType.Apartamento });
            api.SetTransactionType(TransactionType.Alquiler);
            api.SetCitiesAndNeighbourhoods(new string[] { "buceo" });

            List <IFilter> filters = new List <IFilter>();

            DepartmentFilter      department            = new DepartmentFilter("montevideo");
            PropertyTypeFilter    propertyTypeFilter    = new PropertyTypeFilter("apartamento");
            TransactionTypeFilter transactionTypeFilter = new TransactionTypeFilter("alquiler");
            NeighbourhoodFilter   neighbourhoodFilter   = new NeighbourhoodFilter("buceo");

            filters.Add(department);
            filters.Add(propertyTypeFilter);
            filters.Add(transactionTypeFilter);
            filters.Add(neighbourhoodFilter);

            apiCore.AskAPI(filters, 1);

            List <ICApiSearchResult> apiResult = api.Search();

            apiCore.Parse(apiResult, 5, "buceo");

            Assert.IsTrue(database.GetPropertyList().SequenceEqual(database2.GetPropertyList()));
        }
Example #2
0
        /// <summary>
        /// Esta clase implementa la interfaz IAPIsSearchEngines, es la encargada de comunicarse
        /// con la API de InfoCasas con el fin de obtener la lista de propiedades a instanciar y posteriormente
        /// mostrarlas al usuario que realizó la búsqueda.
        ///
        /// Esta interfaz respeta el principio SRP, tiene una única razón de cambio, esta sería
        /// que cambiara la forma en la que se integran las APIs.
        /// Permite además la expansión a diferentes APIs aplicando el principio polymorphic,
        /// ya que es independiente de ellas, y permite que se cumpla LSP ya que las APIs no
        /// deberían interferir entre sí, alterando los resultados esperados.
        ///
        /// Además, la clase sigue el patrón Creator dado que conoce todos los atributos necesarios
        /// para instanciar las propiedades (utiliza como fuente los resultados de la API) y se le
        /// infiere la responsabilidad de hacerlo.
        /// </summary>
        /// <param name="filters"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        public void AskAPI(List <IFilter> filters, long id)
        {
            ICApi api = new ICApi();

            string barrio = string.Empty;

            foreach (IFilter filter in filters)
            {
                if (filter is DepartmentFilter)
                {
                    api.SetDepartment($"{filter.Value}");
                }

                else if (filter is NeighbourhoodFilter)
                {
                    api.SetCitiesAndNeighbourhoods(new string[] { $"{filter.Value}" });

                    barrio = filter.Value;
                }

                else if (filter is PropertyTypeFilter)
                {
                    if (filter.Value == "apartamento")
                    {
                        api.SetPropertyTypes(new PropertyType[] { PropertyType.Apartamento });
                    }
                    else if (filter.Value == "casa")
                    {
                        api.SetPropertyTypes(new PropertyType[] { PropertyType.Casa });
                    }
                }

                else if (filter is TransactionTypeFilter)
                {
                    if (filter.Value == "compra")
                    {
                        api.SetTransactionType(TransactionType.Venta);
                    }
                    else if (filter.Value == "alquiler")
                    {
                        api.SetTransactionType(TransactionType.Alquiler);
                    }
                }
            }

            List <ICApiSearchResult> results = api.Search();

            this.Parse(results, id, barrio);
        }