From 95e3be39d689bd4670a0b04bc8190d74a6a23bc9 Mon Sep 17 00:00:00 2001 From: Angela Yu Date: Tue, 27 Jan 2026 20:49:31 -0500 Subject: [PATCH 1/2] 663: Added Filtering to Filter out Achievements Given with 0 --- .../common/components/LeaderboardManager.java | 10 ++- .../components/LeaderboardManagerTest.java | 65 +++++++++++++++++++ 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/patinanetwork/codebloom/common/components/LeaderboardManager.java b/src/main/java/org/patinanetwork/codebloom/common/components/LeaderboardManager.java index 49bbf77cc..06ceb4a63 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/components/LeaderboardManager.java +++ b/src/main/java/org/patinanetwork/codebloom/common/components/LeaderboardManager.java @@ -61,7 +61,10 @@ public void generateAchievementsForAllWinners() { log.info("on leaderboard for {}", pair.getRight().getResolvedName()); List> users = leaderboardRepository.getRankedIndexedLeaderboardUsersById( currentLeaderboard.getId(), pair.getLeft()); - List> winners = users.subList(0, maxWinners(users.size())); + List> usersWithPoints = users.stream() + .filter(indexed -> indexed.getItem().getTotalScore() > 0) + .toList(); + List> winners = usersWithPoints.subList(0, maxWinners(usersWithPoints.size())); for (int i = 0; i < winners.size(); i++) { int place = i + 1; @@ -83,7 +86,10 @@ public void generateAchievementsForAllWinners() { // handle global leaderboard List> users = leaderboardRepository.getGlobalRankedIndexedLeaderboardUsersById( currentLeaderboard.getId(), LeaderboardFilterOptions.DEFAULT); - List> winners = users.subList(0, maxWinners(users.size())); + List> usersWithPoints = users.stream() + .filter(indexed -> indexed.getItem().getTotalScore() > 0) + .toList(); + List> winners = usersWithPoints.subList(0, maxWinners(usersWithPoints.size())); for (int i = 0; i < winners.size(); i++) { int place = i + 1; diff --git a/src/test/java/org/patinanetwork/codebloom/common/components/LeaderboardManagerTest.java b/src/test/java/org/patinanetwork/codebloom/common/components/LeaderboardManagerTest.java index 77291520e..2f50b4d4a 100644 --- a/src/test/java/org/patinanetwork/codebloom/common/components/LeaderboardManagerTest.java +++ b/src/test/java/org/patinanetwork/codebloom/common/components/LeaderboardManagerTest.java @@ -444,6 +444,71 @@ void testWithAvailableLeaderboardAndThreeWinnersGlobalButFourUsers() { winners.get(1).getItem().getId()); } + @Test + void testUsersWithZeroPointsAreExcludedFromAchievements() { + var latestLeaderboard = Leaderboard.builder() + .id(UUID.randomUUID().toString()) + .name("Test Leaderboard") + .createdAt(StandardizedLocalDateTime.now()) + .build(); + + var users = Indexed.ofDefaultList(List.of( + randomPartialUserWithScore().totalScore(150_000).build(), + randomPartialUserWithScore().totalScore(0).build(), + randomPartialUserWithScore().totalScore(0).build())); + + when(leaderboardRepository.getRecentLeaderboardMetadata()).thenReturn(latestLeaderboard); + when(leaderboardRepository.getGlobalRankedIndexedLeaderboardUsersById(eq(latestLeaderboard.getId()), any())) + .thenReturn(users); + + leaderboardManager.generateAchievementsForAllWinners(); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Achievement.class); + verify(achievementRepository, times(1)).createAchievement(captor.capture()); + + var achievements = captor.getAllValues(); + var userOneAchievement = achievements.get(0); + assertAchievement( + userOneAchievement, + null, + AchievementPlaceEnum.ONE, + users.get(0).getItem().getId()); + } + + @Test + void testUsersWithZeroPointsAreExcludedFromTagAchievements() { + var latestLeaderboard = Leaderboard.builder() + .id(UUID.randomUUID().toString()) + .name("Test Leaderboard") + .createdAt(StandardizedLocalDateTime.now()) + .build(); + + var users = Indexed.ofDefaultList(List.of( + randomPartialUserWithScore().totalScore(0).build(), + randomPartialUserWithScore().totalScore(0).build())); + + users.forEach(winner -> { + var user = winner.getItem(); + user.setTags(List.of(UserTag.builder() + .id(UUID.randomUUID().toString()) + .tag(Tag.Sbu) + .userId(user.getId()) + .build())); + }); + + when(leaderboardRepository.getRecentLeaderboardMetadata()).thenReturn(latestLeaderboard); + when(leaderboardRepository.getGlobalRankedIndexedLeaderboardUsersById(eq(latestLeaderboard.getId()), any())) + .thenReturn(users); + + when(leaderboardRepository.getRankedIndexedLeaderboardUsersById( + eq(latestLeaderboard.getId()), argThat(opt -> opt.isSbu()))) + .thenReturn(users); + + leaderboardManager.generateAchievementsForAllWinners(); + + verify(achievementRepository, times(0)).createAchievement(any()); + } + @Test void testGetLeaderboardMetadata() { String testId = UUID.randomUUID().toString(); From 0f41d5a7c7578fa0416cec177cd46f4fb95032a3 Mon Sep 17 00:00:00 2001 From: Angela Yu Date: Sat, 31 Jan 2026 19:04:54 -0500 Subject: [PATCH 2/2] 663: Fix DockerFile to install all browsers to fix Bug attempted fixes attemptef fixes --- infra/Dockerfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/infra/Dockerfile b/infra/Dockerfile index baeed133e..ce7c79a01 100644 --- a/infra/Dockerfile +++ b/infra/Dockerfile @@ -36,7 +36,7 @@ WORKDIR /app COPY mvnw pom.xml ./ COPY .mvn/ .mvn/ -RUN ./mvnw dependency:resolve -B +RUN ./mvnw dependency:resolve dependency:resolve-plugins -B COPY src ./src COPY --from=frontend-build /js/dist/ src/main/resources/static/ @@ -44,16 +44,18 @@ RUN mkdir -p src/main/resources/static/email && rm -f src/main/resources/static/ COPY --from=email-build /email/out/*.html src/main/resources/static/email/ ARG COMMIT_SHA -RUN ./mvnw package -DskipTests -Dcommit.sha="${COMMIT_SHA}" +RUN ./mvnw clean package -DskipTests -Dcommit.sha="${COMMIT_SHA}" FROM eclipse-temurin:25-jre-jammy WORKDIR /app +ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright + COPY mvnw pom.xml ./ COPY .mvn/ .mvn/ RUN ./mvnw -B exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install-deps" -RUN ./mvnw -B exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install firefox" +RUN ./mvnw -B exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="install" COPY --from=backend-build /app/target/*.jar app.jar ARG SERVER_PROFILES=prod