diff --git a/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/FiltrarPorPrecioMaximoUITest.java b/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/FiltrarPorPrecioMaximoUITest.java index c0e5fac..c994f2c 100644 --- a/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/FiltrarPorPrecioMaximoUITest.java +++ b/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/FiltrarPorPrecioMaximoUITest.java @@ -96,7 +96,6 @@ public void testFiltrarGasolinerasPorPrecioMaximoNoIntroducidoError() { //clicka en filtrar onView(withId(R.id.menuFiltrar)).perform(click()); //comprueba mensaje de error - // onView(withText("Por favor, introduce un precio máximo.")).inRoot(RootMatchers.withDecorView(not(decorView))).check(matches(isDisplayed())); assertTrue(true); } @@ -113,7 +112,6 @@ public void testFiltrarGasolinerasPorPrecioMaximoNoNumericoError() { onView(withId(R.id.etPrecioMax)).perform(typeText("Uno punto cuatro")); //comprueba mensaje de error - // onView(withText("Por favor, introduce un número válido para el precio máximo.")).inRoot(RootMatchers.withDecorView(not(decorView))).check(matches(isDisplayed())); assertTrue(true); } @@ -130,42 +128,43 @@ public void testFiltrarGasolinerasPorPrecioMaximoNegativoError() { onView(withId(R.id.etPrecioMax)).perform(typeText("-1.4")); //comprueba mensaje de error - // onView(withText("Por favor, el precio máximo debe ser positivo.")).inRoot(RootMatchers.withDecorView(not(decorView))).check(matches(isDisplayed())); assertTrue(true); } -// @Test -// public void testPersistenciaDeDatosFiltradosAlReiniciar() throws InterruptedException { -// //clicka en filtrar -// onView(withId(R.id.menuFiltrar)).perform(click()); -// -// //clicka en el selector de combustible -// onView(withId(R.id.spinnerCombustible)).perform(click()); -// -// //elige la opcion gasoleo A -// onData(allOf(is(instanceOf(TipoCombustible.class)), -// is(GASOLEO_A))).inRoot(isPlatformPopup()).perform(click()); -// -// //clicka en el campo de precio máximo -// onView(withId(R.id.etPrecioMax)).perform(click()); -// -// //escribe 1.4 en el campo de precio máximo -// onView(withId(R.id.etPrecioMax)).perform(typeText("1.4")); -// -// //clicka el botón filtrar -// onView(withId(R.id.btnFiltrar)).perform(click()); -// -// // Cierra y reinicia la actividad (simula reiniciar la app) -// activityRule.getScenario().recreate(); -// -// //clicka en filtrar de nuevo -// onView(withId(R.id.menuFiltrar)).perform(click()); -// -// //verifica que el filtro persiste -// onView(withId(R.id.etPrecioMax)).check(matches(withText("1.4"))); -// onView(withId(R.id.spinnerCombustible)).check(matches(withSpinnerText("Gasoleo A"))); -// assertTrue(true); -// } + /* + @Test + public void testPersistenciaDeDatosFiltradosAlReiniciar() throws InterruptedException { + //clicka en filtrar + onView(withId(R.id.menuFiltrar)).perform(click()); + + //clicka en el selector de combustible + onView(withId(R.id.spinnerCombustible)).perform(click()); + + //elige la opcion gasoleo A + onData(allOf(is(instanceOf(TipoCombustible.class)), + is(GASOLEO_A))).inRoot(isPlatformPopup()).perform(click()); + + //clicka en el campo de precio máximo + onView(withId(R.id.etPrecioMax)).perform(click()); + + //escribe 1.4 en el campo de precio máximo + onView(withId(R.id.etPrecioMax)).perform(typeText("1.4")); + + //clicka el botón filtrar + onView(withId(R.id.btnFiltrar)).perform(click()); + + // Cierra y reinicia la actividad (simula reiniciar la app) + activityRule.getScenario().recreate(); + + //clicka en filtrar de nuevo + onView(withId(R.id.menuFiltrar)).perform(click()); + + //verifica que el filtro persiste + onView(withId(R.id.etPrecioMax)).check(matches(withText("1.4"))); + onView(withId(R.id.spinnerCombustible)).check(matches(withSpinnerText("Gasoleo A"))); + assertTrue(true); + } + */ @Test public void testCancelacionDelFiltro() { diff --git a/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/MostrarHorarioGasolineraUITest.java b/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/MostrarHorarioGasolineraUITest.java index eda86f2..4e07c5d 100644 --- a/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/MostrarHorarioGasolineraUITest.java +++ b/AndroidProject/app/src/androidTest/java/es/unican/gasolineras/activities/main/MostrarHorarioGasolineraUITest.java @@ -1,6 +1,8 @@ package es.unican.gasolineras.activities.main; import static androidx.test.espresso.Espresso.onData; +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.swipeUp; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.matcher.ViewMatchers.withId; import static androidx.test.espresso.matcher.ViewMatchers.withText; @@ -127,7 +129,6 @@ public void test24H() { DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(0); g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText("Abierto"))); g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(24H)"))); -// g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withTextColor(ContextCompat.getColor(context, R.color.verde)))); } @Test @@ -136,7 +137,6 @@ public void testAbiertaSimple() { DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(1); g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText("Abierto"))); g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(" + procesaHorario(UtilsHorario.obtenerHorarioAbiertoSimple(), obtenerDiaActual(LocalDateTime.now().getDayOfWeek())) + ")"))); -// g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withTextColor(ContextCompat.getColor(context, R.color.verde)))); } @Test @@ -145,7 +145,6 @@ public void testAbiertaIntervalo() { DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(2); g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText("Abierto"))); g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(" + procesaHorario(UtilsHorario.obtenerHorarioAbiertoIntervalo(), obtenerDiaActual(LocalDateTime.now().getDayOfWeek())) + ")"))); -// g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withTextColor(ContextCompat.getColor(context, R.color.verde)))); } @Test @@ -154,26 +153,26 @@ public void testCerradaTodoElDia() { DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(3); g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText("Cerrado"))); g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(Todo el día)"))); -// g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withTextColor(ContextCompat.getColor(context, R.color.rojo)))); } -// @Test -// public void testCerradaParcial() { -// //comprueba la direccion de la primera gasolinera -// DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(4); -// g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText("Cerrado"))); -// g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(" + procesaHorario(UtilsHorario.obtenerHorarioCerradoIntervalo(), obtenerDiaActual(LocalDateTime.now().getDayOfWeek())) + ")"))); -//// g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withTextColor(ContextCompat.getColor(context, R.color.rojo)))); -// } - -// @Test -// public void testSinDetallesDeHorario() throws InterruptedException { -// //comprueba la direccion de la primera gasolinera -// // Scroll puesto que se sale de la pantalla y no se alcanza a ver -// onView(withId(R.id.lvStations)).perform(swipeUp()); -// DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(5); -// g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText(""))); -// g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(Sin detalles de horario)"))); -// } + /* + @Test + public void testCerradaParcial() { + //comprueba la direccion de la primera gasolinera + DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(4); + g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText("Cerrado"))); + g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(" + procesaHorario(UtilsHorario.obtenerHorarioCerradoIntervalo(), obtenerDiaActual(LocalDateTime.now().getDayOfWeek())) + ")"))); + } + + @Test + public void testSinDetallesDeHorario() throws InterruptedException { + //comprueba la direccion de la primera gasolinera + // Scroll puesto que se sale de la pantalla y no se alcanza a ver + onView(withId(R.id.lvStations)).perform(swipeUp()); + DataInteraction g1 = onData(anything()).inAdapterView(withId(R.id.lvStations)).atPosition(5); + g1.onChildView(withId(R.id.tvAbiertoCerrado)).check(matches(withText(""))); + g1.onChildView(withId(R.id.tvHorarioGasolinera)).check(matches(withText("(Sin detalles de horario)"))); + } + */ } diff --git a/AndroidProject/app/src/main/java/es/unican/gasolineras/common/Utils.java b/AndroidProject/app/src/main/java/es/unican/gasolineras/common/Utils.java index 60ece89..a6e8fa8 100644 --- a/AndroidProject/app/src/main/java/es/unican/gasolineras/common/Utils.java +++ b/AndroidProject/app/src/main/java/es/unican/gasolineras/common/Utils.java @@ -39,6 +39,13 @@ */ public class Utils { + /** + * Constructor privado para evitar instanciación + */ + private Utils () { + + } + /** * Parses a list of gas stations from a json resource file. * The json must contain a serialized GasolinerasResponse object. diff --git a/AndroidProject/app/src/main/java/es/unican/gasolineras/common/UtilsHorario.java b/AndroidProject/app/src/main/java/es/unican/gasolineras/common/UtilsHorario.java index 3beca5c..c2168f2 100644 --- a/AndroidProject/app/src/main/java/es/unican/gasolineras/common/UtilsHorario.java +++ b/AndroidProject/app/src/main/java/es/unican/gasolineras/common/UtilsHorario.java @@ -8,8 +8,15 @@ public class UtilsHorario { + /** + * Constructor privado para evitar instanciacion + */ + private UtilsHorario () { + + } + public static final String SIN_DETALLES_DE_HORARIO = "Sin detalles de horario"; - public static final String TODO_EL_DÍA = "Todo el día"; + public static final String TODO_EL_DIA = "Todo el día"; public static final String HH_MM = "HH:mm"; /** @@ -46,7 +53,7 @@ public static String procesaHorario(String horario, String dia) { if (diaEstaEnRango(dia, inicio, fin)) return rango; } } - return TODO_EL_DÍA; + return TODO_EL_DIA; } /** @@ -112,7 +119,7 @@ public static boolean gasolineraAbierta(String horarios, LocalTime horaActual) { if ("24H".equals(horarios)) { return true; // Siempre abierta } - if (TODO_EL_DÍA.equals(horarios)) { + if (TODO_EL_DIA.equals(horarios)) { return false; } if (SIN_DETALLES_DE_HORARIO.equals(horarios)) { @@ -141,7 +148,7 @@ public static boolean gasolineraAbierta(String horarios, LocalTime horaActual) { * false si no esta dentro del rango. */ public static boolean horaEnRango(String rango, LocalTime horaActual) { - if ((rango.equals(SIN_DETALLES_DE_HORARIO))&&(rango.equals(TODO_EL_DÍA))) + if ((rango.equals(SIN_DETALLES_DE_HORARIO))&&(rango.equals(TODO_EL_DIA))) { return false; } diff --git a/AndroidProject/app/src/main/java/es/unican/gasolineras/injection/RepositoriesModule.java b/AndroidProject/app/src/main/java/es/unican/gasolineras/injection/RepositoriesModule.java index ec3c325..c0fc84e 100644 --- a/AndroidProject/app/src/main/java/es/unican/gasolineras/injection/RepositoriesModule.java +++ b/AndroidProject/app/src/main/java/es/unican/gasolineras/injection/RepositoriesModule.java @@ -20,6 +20,12 @@ @InstallIn(ActivityComponent.class) public abstract class RepositoriesModule { + /** + * Constructor privado + */ + private RepositoriesModule () { + } + @Provides public static IGasolinerasRepository provideRepository() { return GasolinerasRepository.INSTANCE; diff --git a/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/DbFunctions.java b/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/DbFunctions.java index ccc4bf1..a59d580 100644 --- a/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/DbFunctions.java +++ b/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/DbFunctions.java @@ -5,6 +5,13 @@ import androidx.room.Room; public class DbFunctions { + + /** + * Constructor privado + */ + private DbFunctions() { + } + // Base de datos de los puntos de interes private static AppDatabase db; diff --git a/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/GasolinerasService.java b/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/GasolinerasService.java index 2ef6ac2..cfdfdcc 100644 --- a/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/GasolinerasService.java +++ b/AndroidProject/app/src/main/java/es/unican/gasolineras/repository/GasolinerasService.java @@ -20,6 +20,11 @@ */ public class GasolinerasService { + /** + * Constructor privado + */ + private GasolinerasService() {} + /** Open Charge Map API base URL*/ final static String BASE_URL = "https://sedeaplicaciones.minetur.gob.es/ServiciosRESTCarburantes/PreciosCarburantes/"; diff --git a/AndroidProject/app/src/main/res/values-night/themes.xml b/AndroidProject/app/src/main/res/values-night/themes.xml index b979b2c..64b51c1 100644 --- a/AndroidProject/app/src/main/res/values-night/themes.xml +++ b/AndroidProject/app/src/main/res/values-night/themes.xml @@ -2,6 +2,5 @@ \ No newline at end of file diff --git a/AndroidProject/app/src/main/res/xml/backup_rules.xml b/AndroidProject/app/src/main/res/xml/backup_rules.xml index fa0f996..0ceea26 100644 --- a/AndroidProject/app/src/main/res/xml/backup_rules.xml +++ b/AndroidProject/app/src/main/res/xml/backup_rules.xml @@ -6,8 +6,5 @@ See https://developer.android.com/about/versions/12/backup-restore --> - + \ No newline at end of file diff --git a/AndroidProject/app/src/test/java/es/unican/gasolineras/activities/main/MainPresenterTest.java b/AndroidProject/app/src/test/java/es/unican/gasolineras/activities/main/MainPresenterTest.java index e77c4c8..fd971f9 100644 --- a/AndroidProject/app/src/test/java/es/unican/gasolineras/activities/main/MainPresenterTest.java +++ b/AndroidProject/app/src/test/java/es/unican/gasolineras/activities/main/MainPresenterTest.java @@ -195,13 +195,13 @@ public void inicializa() { public void testComparadorDistancia(){ //caso que la primera gasolinera esta mas cerca - assertEquals(comparadorDistancia.compare(cercana, lejana), -1); + assertEquals(-1, comparadorDistancia.compare(cercana, lejana)); //caso que la primera gasolinera esta mas lejos - assertEquals(comparadorDistancia.compare(lejana, cercana), 1); + assertEquals(1, comparadorDistancia.compare(lejana, cercana)); //caso que esten a la misma distancia - assertEquals(comparadorDistancia.compare(cercana, auxCercana), 0); + assertEquals(0, comparadorDistancia.compare(cercana, auxCercana)); } diff --git a/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsHorarioTest.java b/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsHorarioTest.java index 103f847..edcfa8a 100644 --- a/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsHorarioTest.java +++ b/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsHorarioTest.java @@ -13,27 +13,24 @@ public class UtilsHorarioTest { - private GasolinerasArrayAdapter adapter; - - @Test public void procesaHorarioTest() { - Assert.assertEquals(procesaHorario("L-D: 08:00-21:00", "L"), "08:00-21:00"); - Assert.assertEquals(procesaHorario("L-D: 08:00-14:00 y 16:00-22:00", "L"), "08:00-14:00 y 16:00-22:00"); - Assert.assertEquals(procesaHorario("M-V: 08:00-21:00", "L"), "Todo el día"); - Assert.assertEquals(procesaHorario("L-D: 24H", "L"), "24H"); - Assert.assertEquals(procesaHorario("", "L"), "Sin detalles de horario"); + Assert.assertEquals("08:00-21:00", procesaHorario("L-D: 08:00-21:00", "L")); + Assert.assertEquals("08:00-14:00 y 16:00-22:00", procesaHorario("L-D: 08:00-14:00 y 16:00-22:00", "L")); + Assert.assertEquals("Todo el día", procesaHorario("M-V: 08:00-21:00", "L")); + Assert.assertEquals("24H", procesaHorario("L-D: 24H", "L")); + Assert.assertEquals("Sin detalles de horario", procesaHorario("", "L")); } @Test public void gasolineraAbiertaTest(){ - Assert.assertEquals(gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(10, 00)), true); - Assert.assertEquals(gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(15, 00)), false); - Assert.assertEquals(gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(8, 00)), true); - Assert.assertEquals(gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(14, 00,00,1)), false); - Assert.assertEquals(gasolineraAbierta("24H", LocalTime.of(10, 00)), true); - Assert.assertEquals(gasolineraAbierta("Todo el día", LocalTime.of(10, 00)), false); - Assert.assertEquals(gasolineraAbierta("Sin detalles de horario", LocalTime.of(10, 00)), false); + Assert.assertEquals(true, gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(10, 00))); + Assert.assertEquals(false, gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(15, 00))); + Assert.assertEquals(true, gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(8, 00))); + Assert.assertEquals(false, gasolineraAbierta("08:00-14:00 y 16:00-20:00", LocalTime.of(14, 00,00,1))); + Assert.assertEquals(true, gasolineraAbierta("24H", LocalTime.of(10, 00))); + Assert.assertEquals(false, gasolineraAbierta("Todo el día", LocalTime.of(10, 00))); + Assert.assertEquals(false, gasolineraAbierta("Sin detalles de horario", LocalTime.of(10, 00))); } diff --git a/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsTest.java b/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsTest.java index e0e6718..31f8cb8 100644 --- a/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsTest.java +++ b/AndroidProject/app/src/test/java/es/unican/gasolineras/common/UtilsTest.java @@ -112,8 +112,8 @@ public void rellenaListaCombusitblesTest() { //Compruebo que la lista tiene todos los elementos Assert.assertEquals("La lista no contiene todos los combustibles.", - listaCombustiblesParaRellenar.size(), - 14); + 14, + listaCombustiblesParaRellenar.size()); // Verificar elementos uno por uno for (int i = 0; i < listaCompleta.size(); i++) { @@ -135,8 +135,8 @@ public void rellenaListaCombusitblesTest() { //Compruebo que la lista tiene todos los elementos Assert.assertEquals("La lista no contiene todos los combustibles.", - listaCombustiblesParaRellenar.size(), - 6); + 6, + listaCombustiblesParaRellenar.size()); // Verificar elementos uno por uno for (int i = 0; i < listaParcial.size(); i++) { @@ -158,8 +158,8 @@ public void rellenaListaCombusitblesTest() { //Compruebo que la lista tiene todos los elementos Assert.assertEquals("La lista contiene algun combustible.", - listaCombustiblesParaRellenar.size(), - 0); + 0, + listaCombustiblesParaRellenar.size()); // Verificar elementos uno por uno for (int i = 0; i < listaVacia.size(); i++) {