diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index c55bb6f..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: CI - Build & Test - -on: - push: - branches: - - dev - - master - pull_request: - branches: - - dev - - -jobs: - build-test: - runs-on: ubuntu-latest - - services: - mysql: - image: mysql:8.3.0 - env: - MYSQL_DATABASE: lookaudb - MYSQL_ROOT_PASSWORD: password - ports: - - 3306:3306 - options: >- - --health-cmd="mysqladmin ping -h localhost" - --health-interval=5s - --health-timeout=10s - --health-retries=5 - - selenium: - image: selenium/standalone-chrome:4.23.0 - ports: - - 4444:4444 - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Set up Java - uses: actions/setup-java@v4 - with: - distribution: temurin - java-version: 17 - - - name: Install Maven dependencies and run tests - working-directory: backend - run: mvn test -Dgroups=!selenium - diff --git a/.github/workflows/ci_cd.yml b/.github/workflows/ci_cd.yml new file mode 100644 index 0000000..423567b --- /dev/null +++ b/.github/workflows/ci_cd.yml @@ -0,0 +1,234 @@ +name: CI/CD - Test, Sonar & Docker + +on: + push: + branches: [ "dev", "main" ] + pull_request: + branches: [ "main" ] + + +jobs: + + #TEST - BACKEND + backend-tests: + name: Backend Tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Cache Maven packages + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven + + - name: Run backend tests (excluding Selenium) + working-directory: backend + run: mvn -B verify -Dgroups=!selenium + + + #TEST - FRONTEND + #frontend-tests: + # name: Frontend Tests + #runs-on: ubuntu-22.04 + # needs: backend-tests + + # steps: + # - uses: actions/checkout@v4 + + # --- Java --- + # - name: Set up Java 18 + # uses: actions/setup-java@v4 + # with: + # distribution: temurin + # java-version: 18 + + # --- Chromium --- + # - name: Install Chromium (prevent auto-updates) + #run: | + # sudo apt-get update + # sudo apt-get install -y chromium-browser + # sudo apt-mark hold chromium-browser + # sudo apt-mark hold google-chrome-stable + + # --- Docker: MySQL --- + # - name: Set up Docker MySQL container + #run: | + # sudo docker run -d \ + # --name lookau-mysql-ci \ + # -p 3306:3306 \ + # -e MYSQL_DATABASE=lookau_test \ + # -e MYSQL_ROOT_PASSWORD=password \ + # mysql:8.3.0 + + # --- Dockerize para esperar DB --- + # - name: Install Dockerize + # run: curl -sSL https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz | sudo tar -C /usr/local/bin -xzv + + #- name: Wait for MySQL to start + #run: dockerize -wait tcp://localhost:3306 -timeout 1m + + # --- Environment variables --- + #- name: Set environment variables + #run: | + #echo "GMAIL_USERNAME=${{ secrets.GMAIL_USERNAME }}" >> $GITHUB_ENV + #echo "GMAIL_PASSWORD=${{ secrets.GMAIL_PASSWORD }}" >> $GITHUB_ENV + + # --- env.properties --- + #- name: Create env.properties file + #run: | + #echo "GMAIL_USERNAME=${{ secrets.GMAIL_USERNAME }}" > backend/src/main/resources/env.properties + #echo "GMAIL_PASSWORD=${{ secrets.GMAIL_PASSWORD }}" >> backend/src/main/resources/env.properties + + # --- Line endings fix --- + #- name: Convert line endings to Unix format + #run: sed -i 's/\r$//' backend/mvnw + + # --- Make mvnw executable --- + #- name: Make mvnw executable + #run: chmod +x backend/mvnw + + # --- Build backend --- + #- name: Build with Maven + #run: backend/mvnw -B package --file backend/pom.xml -DskipTests + + # --- Run backend --- + #- name: Run backend + #run: | + #nohup backend/mvnw spring-boot:run --file backend/pom.xml & + #sleep 120 + + # --- Node.js --- + #- name: Set up Node.js + #uses: actions/setup-node@v4 + #with: + #node-version: 18 + + # --- Angular CLI --- + #- name: Install Angular CLI + #run: npm install -g @angular/cli + #working-directory: frontend + + #- name: Do not share Angular CLI telemetry + #run: ng analytics off + #working-directory: frontend + + #- name: Install frontend dependencies + #run: npm install + #working-directory: frontend + + # --- Run Angular app --- + #- name: Run Angular application + #run: | + #nohup ng serve & + #sleep 120 + #working-directory: frontend + + #- name: Show frontend logs + #run: cat frontend/frontend.log || true + + # --- Selenium tests --- + #- name: Run Selenium tests + #run: backend/mvnw test -P selenium-tests --file backend/pom.xml + + + #SONAR + sonar-analysis: + name: SonarCloud Analysis + runs-on: ubuntu-latest + needs: backend-tests + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + + - name: Cache Maven packages + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven + + - name: Cache SonarCloud packages + uses: actions/cache@v4 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + + - name: Run backend tests + working-directory: backend + run: mvn clean verify -Dgroups=!selenium + + + - name: Run Sonar on PR + if: github.event_name == 'pull_request' + working-directory: backend + run: | + mvn sonar:sonar \ + -Dsonar.projectKey=codeurjc-students_2025-LookAu \ + -Dsonar.organization=codeurjc-students \ + -Dsonar.host.url=https://sonarcloud.io \ + -Dsonar.login=${{ secrets.SONAR_TOKEN }} \ + -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml \ + -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} \ + -Dsonar.pullrequest.branch=${{ github.head_ref }} \ + -Dsonar.pullrequest.base=${{ github.base_ref }} + + - name: Run Sonar on branch + if: github.event_name != 'pull_request' + working-directory: backend + run: | + mvn sonar:sonar \ + -Dsonar.projectKey=codeurjc-students_2025-LookAu \ + -Dsonar.organization=codeurjc-students \ + -Dsonar.host.url=https://sonarcloud.io \ + -Dsonar.login=${{ secrets.SONAR_TOKEN }} \ + -Dsonar.branch.name=${GITHUB_REF_NAME##*/} \ + -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml + + + + + + #DOCKER DEPLOY + publish-docker: + name: Publish Docker + runs-on: ubuntu-latest + needs: sonar-analysis + if: github.event_name == 'pull_request' && github.base_ref == 'main' + steps: + - uses: actions/checkout@v4 + + - name: Log in to DockerHub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build Docker image + working-directory: ./docker + run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/lookau:${{ github.sha }} -f Dockerfile .. + + - name: Tag as PR build + run: docker tag ${{ secrets.DOCKERHUB_USERNAME }}/lookau:${{ github.sha }} ${{ secrets.DOCKERHUB_USERNAME }}/lookau:pr-${{ github.event.pull_request.number }} + + - name: Push Docker image to DockerHub + run: | + docker push ${{ secrets.DOCKERHUB_USERNAME }}/lookau:${{ github.sha }} + docker push ${{ secrets.DOCKERHUB_USERNAME }}/lookau:pr-${{ github.event.pull_request.number }} diff --git a/.github/workflows/sonar-initial.yml b/.github/workflows/sonar-initial.yml new file mode 100644 index 0000000..a57cc4b --- /dev/null +++ b/.github/workflows/sonar-initial.yml @@ -0,0 +1,36 @@ +name: Sonar Initial Analysis + +on: + push: + branches: [ "main" ] + +jobs: + sonarcloud: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 17 + + - name: Cache Maven packages + uses: actions/cache@v4 + with: + path: ~/.m2/repository + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven + + - name: SonarCloud Scan + env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + working-directory: backend + run: > + mvn -B verify -Dgroups=!selenium org.sonarsource.scanner.maven:sonar-maven-plugin:sonar + -Dsonar.projectKey=codeurjc-students_2025-LookAu + -Dsonar.organization=codeurjc-students + -Dsonar.host.url=https://sonarcloud.io diff --git a/backend/pom.xml b/backend/pom.xml index 7f1bba2..8bfdcb0 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -8,16 +8,40 @@ lookau 1.0.0-SNAPSHOT + + + selenium-tests + + test + selenium + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.1.2 + + ${groups} + + + + + + + + org.springframework.boot spring-boot-starter-parent 3.0.0 - + UTF-8 17 + codeurjc-students @@ -214,6 +238,33 @@ maven-surefire-plugin 3.5.2 + + + org.sonarsource.scanner.maven + sonar-maven-plugin + 4.0.0.4121 + + + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + + prepare-agent + + + + report + verify + + report + + + + + diff --git a/backend/src/main/java/com/codeurjc/backend/DataInitializer.java b/backend/src/main/java/com/codeurjc/backend/DataInitializer.java index 0cb1e2a..8850137 100644 --- a/backend/src/main/java/com/codeurjc/backend/DataInitializer.java +++ b/backend/src/main/java/com/codeurjc/backend/DataInitializer.java @@ -426,7 +426,6 @@ public void init() throws Exception { } - private byte[] loadResource(String resourcePath) throws IOException { try (InputStream inputStream = getClass().getResourceAsStream(resourcePath)) { if (inputStream != null) { diff --git a/backend/src/main/java/com/codeurjc/backend/repository/TicketRepository.java b/backend/src/main/java/com/codeurjc/backend/repository/TicketRepository.java index fd5643f..16bfda0 100644 --- a/backend/src/main/java/com/codeurjc/backend/repository/TicketRepository.java +++ b/backend/src/main/java/com/codeurjc/backend/repository/TicketRepository.java @@ -25,6 +25,7 @@ public interface TicketRepository extends JpaRepository{ List findAllByTeamId(Long id); List findAllByTeam(Team team); + @Query("SELECT t FROM Ticket t WHERE t.statusName = :statusName AND t.date <= CURRENT_DATE") List findAllByStatusName(String statusName); List findAllByDate(LocalDate date); diff --git a/backend/src/main/java/com/codeurjc/backend/restcontroller/auth/LoginRestController.java b/backend/src/main/java/com/codeurjc/backend/restcontroller/auth/LoginRestController.java index a987138..a31c959 100644 --- a/backend/src/main/java/com/codeurjc/backend/restcontroller/auth/LoginRestController.java +++ b/backend/src/main/java/com/codeurjc/backend/restcontroller/auth/LoginRestController.java @@ -36,7 +36,6 @@ public ResponseEntity login( @CookieValue(name = "accessToken", required = false) String accessToken, @CookieValue(name = "refreshToken", required = false) String refreshToken, @RequestBody LoginRequest loginRequest) { - System.out.println("LoginRequest recibido: " + loginRequest); return userService.login(loginRequest, accessToken, refreshToken); } diff --git a/backend/src/main/java/com/codeurjc/backend/scheduler/LotteryScheduler.java b/backend/src/main/java/com/codeurjc/backend/scheduler/LotteryScheduler.java index 7db5251..ab4e6d5 100644 --- a/backend/src/main/java/com/codeurjc/backend/scheduler/LotteryScheduler.java +++ b/backend/src/main/java/com/codeurjc/backend/scheduler/LotteryScheduler.java @@ -9,8 +9,10 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Profile; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import com.codeurjc.backend.model.Ticket; import com.codeurjc.backend.model.API.BonolotoAPI; @@ -31,6 +33,7 @@ @Component +@Profile("!test") public class LotteryScheduler { @Autowired @@ -49,11 +52,11 @@ public class LotteryScheduler { /*************************/ /*************************/ + @Transactional @Scheduled(fixedDelay = 60000) public synchronized void run() throws JsonMappingException, JsonProcessingException, InterruptedException{ if (running) { - System.out.println("Scheduler ya en ejecución. Saltando..."); return; } running = true; @@ -86,7 +89,6 @@ public synchronized void run() throws JsonMappingException, JsonProcessingExcept }catch(Exception e){ System.err.println("Error in scheduled job: " + e.getMessage()); - e.printStackTrace(); } finally { running = false; } @@ -116,7 +118,7 @@ private void checkAndChangeStatusByType(List lTickets, Map lTicketAPI = scraperService.getResults(key, mTypeToDate.get(key).get(0), mTypeToDate.get(key).get(mTypeToDate.get(key).size() - 1)); - + //check the status ticket by type if(!lTicketAPI.isEmpty()){ switch (key){ @@ -163,9 +165,12 @@ private void checkAndChangeStatusByType(List lTickets, Map> getMapsPendingTickets(List lTick return mTypeToTicketPending; } + + /********************/ + /******* HELP *******/ + /********************/ + + private List setStatusWrongDate(Map mTypeToDateToTicketPending){ + + List lTicketsToUpdateByType = new ArrayList(); + + for(Ticket ticket: mTypeToDateToTicketPending.values()){ + ticket.setStatusName("Wrong Date"); + + lTicketsToUpdateByType.add(ticket); + } + + return lTicketsToUpdateByType; + + } } \ No newline at end of file diff --git a/backend/src/main/java/com/codeurjc/backend/security/jwt/SecurityCipher.java b/backend/src/main/java/com/codeurjc/backend/security/jwt/SecurityCipher.java index 6df9261..02537d1 100644 --- a/backend/src/main/java/com/codeurjc/backend/security/jwt/SecurityCipher.java +++ b/backend/src/main/java/com/codeurjc/backend/security/jwt/SecurityCipher.java @@ -27,7 +27,6 @@ public static void setKey() { key = Arrays.copyOf(key, 16); secretKey = new SecretKeySpec(key, "AES"); } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); } } @@ -42,7 +41,6 @@ public static String encrypt(String strToEncrypt) { cipher.init(Cipher.ENCRYPT_MODE, secretKey); return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8))); } catch (Exception e) { - e.printStackTrace(); } return null; } @@ -58,7 +56,6 @@ public static String decrypt(String strToDecrypt) { cipher.init(Cipher.DECRYPT_MODE, secretKey); return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); } catch (Exception e) { - e.printStackTrace(); } return null; } diff --git a/backend/src/main/java/com/codeurjc/backend/service/AccountService.java b/backend/src/main/java/com/codeurjc/backend/service/AccountService.java index 8c06469..d781355 100644 --- a/backend/src/main/java/com/codeurjc/backend/service/AccountService.java +++ b/backend/src/main/java/com/codeurjc/backend/service/AccountService.java @@ -233,7 +233,6 @@ public Page getAccountTicketsPaged(List tickets, Pageable dtoList.add(ticketTeamDTO); } catch (Exception e) { System.err.println("Error al convertir el ticket: " + ticket); - e.printStackTrace(); } } diff --git a/backend/src/main/java/com/codeurjc/backend/service/ScraperService.java b/backend/src/main/java/com/codeurjc/backend/service/ScraperService.java index be623a0..2779449 100644 --- a/backend/src/main/java/com/codeurjc/backend/service/ScraperService.java +++ b/backend/src/main/java/com/codeurjc/backend/service/ScraperService.java @@ -29,8 +29,9 @@ public List getResults(String type, String firstDate, String lastDate) throws WebDriver driver = webDriverProvider.createDriver(); try{ + //create url for scraping - String url = "https://www.loteriasyapuestas.es/servicios/buscadorSorteos?game_id="+ type + "&celebrados=false&fechaInicioInclusiva="+ lastDate + "&fechaFinInclusiva=" + firstDate; + String url = "https://www.loteriasyapuestas.es/servicios/buscadorSorteos?game_id="+ type + "&celebrados=true&fechaInicioInclusiva="+ lastDate + "&fechaFinInclusiva=" + firstDate; //create webdriver driver.get(url); @@ -54,18 +55,18 @@ public List getResults(String type, String firstDate, String lastDate) throws } String cleanJson = json.trim(); - // Caso 1: respuesta es solo un mensaje entre comillas + + //if the response not found tickets if (cleanJson.startsWith("\"") || cleanJson.contains("No se ha encontrado")) { return List.of(); } - // Caso 2: si no empieza por "[" es que no es un array JSON válido + //if the response is not a JSON valid if (!cleanJson.startsWith("[")) { return List.of(); - } - - + } + //if the response is ok ObjectMapper objectMapper = new ObjectMapper(); switch (type) { @@ -104,7 +105,7 @@ public List getResults(String type, String firstDate, String lastDate) throws } } finally { - driver.quit(); // ✅ SIEMPRE se cierra + driver.quit(); } } } diff --git a/backend/src/main/java/com/codeurjc/backend/service/TeamService.java b/backend/src/main/java/com/codeurjc/backend/service/TeamService.java index acc8300..92c8883 100644 --- a/backend/src/main/java/com/codeurjc/backend/service/TeamService.java +++ b/backend/src/main/java/com/codeurjc/backend/service/TeamService.java @@ -108,7 +108,6 @@ public Page getTeamTicketsPaged(String teamId, Pageable pageable) dtoList.add(ticketTeamDTO); } catch (Exception e) { System.err.println("Error al convertir el ticket: " + ticket); - e.printStackTrace(); } } diff --git a/backend/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/backend/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000..e906dc6 --- /dev/null +++ b/backend/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,27 @@ +{"properties": [ + { + "name": "SELENIUM_URL", + "type": "java.lang.String", + "description": "A description for 'SELENIUM_URL'" + }, + { + "name": "jwt.secret", + "type": "java.lang.String", + "description": "A description for 'jwt.secret'" + }, + { + "name": "server.ssl.verify-client", + "type": "java.lang.String", + "description": "A description for 'server.ssl.verify-client'" + }, + { + "name": "SELENIUM_URL", + "type": "java.lang.String", + "description": "A description for 'SELENIUM_URL'" + }, + { + "name": "SELENIUM_URL", + "type": "java.lang.String", + "description": "A description for 'SELENIUM_URL'" + } +]} \ No newline at end of file diff --git a/backend/src/main/resources/application-docker.properties b/backend/src/main/resources/application-docker.properties index 959b59b..fe9c292 100644 --- a/backend/src/main/resources/application-docker.properties +++ b/backend/src/main/resources/application-docker.properties @@ -4,13 +4,11 @@ server.ssl.key-store=classpath:docker-keystore.jks server.ssl.key-store-password=webapp server.ssl.key-alias=lookau-docker server.ssl.key-password=webapp -server.ssl.verify-client=false spring.datasource.url=jdbc:mysql://lookau-DB:3306/lookaudb spring.datasource.username=root spring.datasource.password=password -SELENIUM_URL=http://selenium:4444/wd/hub logging.level.org.apache.tomcat=WARN logging.level.org.apache.coyote=WARN \ No newline at end of file diff --git a/backend/src/test/java/com/salenium/LoginSeleniumTest.java b/backend/src/test/java/com/salenium/LoginSeleniumTest.java index 4137683..190dc72 100644 --- a/backend/src/test/java/com/salenium/LoginSeleniumTest.java +++ b/backend/src/test/java/com/salenium/LoginSeleniumTest.java @@ -6,9 +6,11 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; - +import org.junit.jupiter.api.TestMethodOrder; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -28,6 +30,7 @@ import io.github.bonigarcia.wdm.WebDriverManager; +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) @Tag("selenium") @SpringBootTest(classes = LookAu.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") @@ -87,10 +90,10 @@ void tearDown() { } @Test + @Order(4) void testLoginValid() { - driver.get(baseUrl+"/login"); - System.out.println("Current URL: " + driver.getCurrentUrl()); + driver.get(baseUrl+"/login"); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".input-login-1"))); @@ -105,7 +108,9 @@ void testLoginValid() { @Test + @Order(1) void testLoginInvalid() { + driver.get(baseUrl+"/login"); driver.findElement(By.cssSelector(".input-login-1")).sendKeys("wrong@nope.com"); @@ -113,10 +118,12 @@ void testLoginInvalid() { driver.findElement(By.cssSelector("input[type=submit]")).click(); wait.until(ExpectedConditions.urlContains("/login")); + assertTrue(driver.getCurrentUrl().contains("/login")); } @Test + @Order(3) void testSignupValid() { driver.get(baseUrl+"/signup"); @@ -139,8 +146,9 @@ void testSignupValid() { } @Test + @Order(2) void testSignupRepear() { - + //nick name repeat driver.get(baseUrl+"/signup"); diff --git a/backend/src/test/java/com/salenium/ProfileSeleniumTest.java b/backend/src/test/java/com/salenium/ProfileSeleniumTest.java index 23f7dfc..438b9db 100644 --- a/backend/src/test/java/com/salenium/ProfileSeleniumTest.java +++ b/backend/src/test/java/com/salenium/ProfileSeleniumTest.java @@ -7,9 +7,11 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; - +import org.junit.jupiter.api.TestMethodOrder; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; @@ -31,6 +33,7 @@ import io.github.bonigarcia.wdm.WebDriverManager; +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) @Tag("selenium") @SpringBootTest(classes = LookAu.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") @@ -88,6 +91,7 @@ void tearDown() { } @Test + @Order(8) void testAddFriend() { //loggin @@ -129,6 +133,7 @@ void testAddFriend() { } @Test + @Order(5) void testAceptPendingFriendAndAjaxMyFriends() { // login @@ -193,6 +198,7 @@ void testAceptPendingFriendAndAjaxMyFriends() { @Test + @Order(7) void testDenyPendingFriendAndAjaxMyFriends() { //login @@ -254,6 +260,7 @@ void testDenyPendingFriendAndAjaxMyFriends() { @Test + @Order(6) void testDeleteFriend() { //loggin diff --git a/backend/src/test/java/com/salenium/TeamsAndTicketsSeleniumTest.java b/backend/src/test/java/com/salenium/TeamsAndTicketsSeleniumTest.java index e028f09..7d0c625 100644 --- a/backend/src/test/java/com/salenium/TeamsAndTicketsSeleniumTest.java +++ b/backend/src/test/java/com/salenium/TeamsAndTicketsSeleniumTest.java @@ -10,9 +10,11 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; - +import org.junit.jupiter.api.TestMethodOrder; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; @@ -33,6 +35,7 @@ import io.github.bonigarcia.wdm.WebDriverManager; +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) @Tag("selenium") @SpringBootTest(classes = LookAu.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") @@ -90,7 +93,9 @@ void tearDown() { @Test + @Order(15) void testCreateNewTeam() throws InterruptedException { + driver.get(baseUrl + "/login"); // Login @@ -118,6 +123,7 @@ void testCreateNewTeam() throws InterruptedException { @Test + @Order(12) void testEditTicketTeamDiscard() { //login @@ -167,6 +173,7 @@ void testEditTicketTeamDiscard() { @Test + @Order(13) void testEditTicketTeamSave() { //login @@ -217,6 +224,7 @@ void testEditTicketTeamSave() { @Test + @Order(11) void testEditTicketTeamQuinielaSave() { //login @@ -280,6 +288,7 @@ void testEditTicketTeamQuinielaSave() { @Test + @Order(10) void testCreateTicketTeamBonolotoAndFilters() { //login @@ -360,6 +369,7 @@ void testCreateTicketTeamBonolotoAndFilters() { @Test + @Order(14) void testFilter(){ //login @@ -407,6 +417,7 @@ void testFilter(){ } @Test + @Order(9) void testLeaveTeam(){ //login diff --git a/backend/src/test/resources/application-test.properties b/backend/src/test/resources/application-test.properties index 4082965..3e802df 100644 --- a/backend/src/test/resources/application-test.properties +++ b/backend/src/test/resources/application-test.properties @@ -8,5 +8,7 @@ spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.jpa.show-sql=true spring.jpa.defer-datasource-initialization=true +spring.task.scheduling.enabled=false + server.port=8080 server.ssl.enabled=false \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 02f02aa..96ed8ea 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,7 +1,3 @@ -# In project root: -# docker pull etheko/bookmarks-forums -# cd docker -# docker-compose -p bookmarks-forums up --build services: lookau-app: diff --git a/frontend/proxy.ci.conf.json b/frontend/proxy.ci.conf.json new file mode 100644 index 0000000..f13c683 --- /dev/null +++ b/frontend/proxy.ci.conf.json @@ -0,0 +1,11 @@ +{ + "/api": { + "target": "http://localhost:8080", + "secure": false, + "changeOrigin": true, + "logLevel": "debug", + "headers": { + "Connection": "keep-alive" + } + } +} diff --git a/frontend/src/app/components/individual/individual.component.ts b/frontend/src/app/components/individual/individual.component.ts index b77aa47..c42c072 100644 --- a/frontend/src/app/components/individual/individual.component.ts +++ b/frontend/src/app/components/individual/individual.component.ts @@ -52,7 +52,6 @@ export class IndividualComponent { }else{ this.getPersonalTickets(); } - console.log(this.lTickets) } getPersonalTickets(){ @@ -98,7 +97,6 @@ export class IndividualComponent { getTeam(){ this.teamService.getTeam(this.teamId).subscribe( (response) => { - console.log(response); this.team = response; }, (error) => { diff --git a/frontend/src/app/components/personal/cardTicketsPersonal.component.ts b/frontend/src/app/components/personal/cardTicketsPersonal.component.ts index d0a98cd..98c57f3 100644 --- a/frontend/src/app/components/personal/cardTicketsPersonal.component.ts +++ b/frontend/src/app/components/personal/cardTicketsPersonal.component.ts @@ -239,7 +239,6 @@ export class CardTicketsPersonalComponent { getDataTicketType(data: string) { this.ticketType = data; - console.log('Recibido del hijo:', data); } diff --git a/frontend/src/app/components/personal/newCardTicketsPersonal.component.ts b/frontend/src/app/components/personal/newCardTicketsPersonal.component.ts index aee74db..46e74a9 100644 --- a/frontend/src/app/components/personal/newCardTicketsPersonal.component.ts +++ b/frontend/src/app/components/personal/newCardTicketsPersonal.component.ts @@ -255,7 +255,6 @@ export class NewCardTicketsPersonal { getDataTicketType(data: string) { this.ticketType = data; - console.log('Recibido del hijo:', data); } diff --git a/frontend/src/app/components/teams/cardTicketsTeams.component.ts b/frontend/src/app/components/teams/cardTicketsTeams.component.ts index 12f716d..92d82eb 100644 --- a/frontend/src/app/components/teams/cardTicketsTeams.component.ts +++ b/frontend/src/app/components/teams/cardTicketsTeams.component.ts @@ -241,7 +241,6 @@ export class CardTicketsTeamsComponent { getDataTicketType(data: string) { this.ticketType = data; - console.log('Recibido del hijo:', data); } @@ -307,10 +306,7 @@ export class CardTicketsTeamsComponent { }); } - }); - - console.log(this.transactions); - + }); } genereteWinningTransactions(participants: string[], buyer: string, ticketPrice: number, prizeAmount: number, claimer: string) { diff --git a/frontend/src/app/components/teams/editTeam.component.ts b/frontend/src/app/components/teams/editTeam.component.ts index 704af5f..f365da9 100644 --- a/frontend/src/app/components/teams/editTeam.component.ts +++ b/frontend/src/app/components/teams/editTeam.component.ts @@ -78,8 +78,6 @@ export class EditTeamComponent { this.teamService.getAccountsTeam(String(this.teamId)).subscribe( (response) => { this.accounts = response; - console.log(this.accounts); - console.log(response); }, (error) => { this.router.navigate(['/error']); @@ -122,10 +120,8 @@ export class EditTeamComponent { hasTicketDependence(): boolean{ let nickName = this.authService.getUserNickName(); - console.log(nickName); for (let ticket of this.tickets) { - console.log(ticket); if (ticket.paidByName === nickName || ticket.claimedBy === nickName) { return true; diff --git a/frontend/src/app/components/teams/newCardTicketsTeams.component.ts b/frontend/src/app/components/teams/newCardTicketsTeams.component.ts index 65350f6..6d2db31 100644 --- a/frontend/src/app/components/teams/newCardTicketsTeams.component.ts +++ b/frontend/src/app/components/teams/newCardTicketsTeams.component.ts @@ -257,7 +257,6 @@ export class NewCardTicketsTeamsComponent { getDataTicketType(data: string) { this.ticketType = data; - console.log('Recibido del hijo:', data); }