From 8a8e6e7b49a736423418cb7f91f3064f660aa3f1 Mon Sep 17 00:00:00 2001 From: Ehren Kret Date: Wed, 15 Sep 2021 16:49:20 -0500 Subject: [PATCH] Rename name to id in the stored badge information and expose id in the profile endpoint --- .../ConfiguredProfileBadgeConverter.java | 4 ++- .../textsecuregcm/entities/Badge.java | 14 ++++++-- .../ConfiguredProfileBadgeConverterTest.java | 34 +++++++++---------- .../controllers/ProfileControllerTest.java | 2 +- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java b/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java index 275656d19..cdb9f87c3 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverter.java @@ -90,7 +90,9 @@ public class ConfiguredProfileBadgeConverter implements ProfileBadgeConverter { .filter(accountBadge -> accountBadge.isVisible() && now.isBefore(accountBadge.getExpiration()) && knownBadges.containsKey(accountBadge.getId())) - .map(accountBadge -> new Badge(knownBadges.get(accountBadge.getId()).getImageUrl(), + .map(accountBadge -> new Badge( + accountBadge.getId(), + knownBadges.get(accountBadge.getId()).getImageUrl(), resourceBundle.getString(accountBadge.getId() + "_name"), resourceBundle.getString(accountBadge.getId() + "_description"))) .collect(Collectors.toList()); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java index 5d321c98d..a7ffb379c 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/Badge.java @@ -11,20 +11,27 @@ import java.net.URL; import java.util.Objects; public class Badge { + private final String id; private final URL imageUrl; private final String name; private final String description; @JsonCreator public Badge( + @JsonProperty("id") final String id, @JsonProperty("imageUrl") final URL imageUrl, @JsonProperty("name") final String name, @JsonProperty("description") final String description) { + this.id = id; this.imageUrl = imageUrl; this.name = name; this.description = description; } + public String getId() { + return id; + } + public URL getImageUrl() { return imageUrl; } @@ -46,12 +53,13 @@ public class Badge { return false; } Badge badge = (Badge) o; - return Objects.equals(imageUrl, badge.imageUrl) && Objects.equals(name, - badge.name) && Objects.equals(description, badge.description); + return Objects.equals(id, badge.id) && Objects.equals(imageUrl, + badge.imageUrl) && Objects.equals(name, badge.name) && Objects.equals( + description, badge.description); } @Override public int hashCode() { - return Objects.hash(imageUrl, name, description); + return Objects.hash(id, imageUrl, name, description); } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java index 32ab220b4..83537ac6f 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/badges/ConfiguredProfileBadgeConverterTest.java @@ -51,7 +51,7 @@ public class ConfiguredProfileBadgeConverterTest { when(clock.instant()).thenReturn(Instant.ofEpochSecond(42)); } - private static String nameFor(int i) { + private static String idFor(int i) { return "Badge-" + i; } @@ -63,16 +63,16 @@ public class ConfiguredProfileBadgeConverterTest { } } - private static String rbNameFor(int i) { + private static String nameFor(int i) { return "TRANSLATED NAME " + i; } - private static String rbDesriptionFor(int i) { + private static String desriptionFor(int i) { return "TRANSLATED DESCRIPTION " + i; } private static BadgeConfiguration newBadge(int i) { - return new BadgeConfiguration(nameFor(i), imageUrlFor(i)); + return new BadgeConfiguration(idFor(i), imageUrlFor(i)); } private BadgesConfiguration createBadges(int count) { @@ -80,8 +80,8 @@ public class ConfiguredProfileBadgeConverterTest { Object[][] objects = new Object[count * 2][2]; for (int i = 0; i < count; i++) { badges.add(newBadge(i)); - objects[(i * 2)] = new Object[]{nameFor(i) + "_name", rbNameFor(i)}; - objects[(i * 2) + 1] = new Object[]{nameFor(i) + "_description", rbDesriptionFor(i)}; + objects[(i * 2)] = new Object[]{idFor(i) + "_name", nameFor(i)}; + objects[(i * 2) + 1] = new Object[]{idFor(i) + "_description", desriptionFor(i)}; } resourceBundle = new ListResourceBundle() { @Override @@ -94,7 +94,7 @@ public class ConfiguredProfileBadgeConverterTest { private BadgeConfiguration getBadge(BadgesConfiguration badgesConfiguration, int i) { return badgesConfiguration.getBadges().stream() - .filter(badgeConfiguration -> nameFor(i).equals(badgeConfiguration.getName())) + .filter(badgeConfiguration -> idFor(i).equals(badgeConfiguration.getName())) .findFirst().orElse(null); } @@ -137,14 +137,14 @@ public class ConfiguredProfileBadgeConverterTest { Instant expired = Instant.ofEpochSecond(41); Instant notExpired = Instant.ofEpochSecond(43); return Stream.of( - arguments(nameFor(0), expired, false, null), - arguments(nameFor(0), notExpired, false, null), - arguments(nameFor(0), expired, true, null), - arguments(nameFor(0), notExpired, true, new Badge(imageUrlFor(0), rbNameFor(0), rbDesriptionFor(0))), - arguments(nameFor(1), expired, false, null), - arguments(nameFor(1), notExpired, false, null), - arguments(nameFor(1), expired, true, null), - arguments(nameFor(1), notExpired, true, null) + arguments(idFor(0), expired, false, null), + arguments(idFor(0), notExpired, false, null), + arguments(idFor(0), expired, true, null), + arguments(idFor(0), notExpired, true, new Badge(idFor(0), imageUrlFor(0), nameFor(0), desriptionFor(0))), + arguments(idFor(1), expired, false, null), + arguments(idFor(1), notExpired, false, null), + arguments(idFor(1), expired, true, null), + arguments(idFor(1), notExpired, true, null) ); } @@ -161,7 +161,7 @@ public class ConfiguredProfileBadgeConverterTest { ArgumentCaptor controlArgumentCaptor = setupResourceBundle(enGb); badgeConverter.convert(List.of(enGb, en, esUs), - List.of(new AccountBadge(nameFor(0), Instant.ofEpochSecond(43), true))); + List.of(new AccountBadge(idFor(0), Instant.ofEpochSecond(43), true))); Control control = controlArgumentCaptor.getValue(); assertThatNullPointerException().isThrownBy(() -> control.getFormats(null)); @@ -186,7 +186,7 @@ public class ConfiguredProfileBadgeConverterTest { // this should always terminate at the system default locale since the development defined bundle should get // returned at that point anyhow badgeConverter.convert(List.of(enGb, Locale.getDefault(), en, esUs), - List.of(new AccountBadge(nameFor(0), Instant.ofEpochSecond(43), true))); + List.of(new AccountBadge(idFor(0), Instant.ofEpochSecond(43), true))); Control control2 = controlArgumentCaptor.getValue(); assertThat(control2.getFallbackLocale(ConfiguredProfileBadgeConverter.BASE_NAME, enGb)).isEqualTo( diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java index 44fc75954..c8b61c902 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/controllers/ProfileControllerTest.java @@ -104,7 +104,7 @@ class ProfileControllerTest { (acceptableLanguages, accountBadges) -> { try { return List.of( - new Badge(new URL("https://example.com/badge/1"), "Test Badge", "This badge is in unit tests.") + new Badge("TEST1", new URL("https://example.com/badge/1"), "Test Badge", "This badge is in unit tests.") ); } catch (MalformedURLException e) { throw new AssertionError(e);