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())); }
/// <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); }