public EclipseProfile getPublicProfile(String personId) {
        checkApiUrl();
        var urlTemplate = eclipseApiUrl + "account/profile/{personId}";
        var uriVariables = Map.of("personId", personId);
        var headers = new HttpHeaders();
        headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
        var request = new HttpEntity<Void>(headers);

        try {
            var response = restTemplate.exchange(urlTemplate, HttpMethod.GET, request, String.class, uriVariables);
            return parseEclipseProfile(response);
        } catch (RestClientException exc) {
            if (exc instanceof HttpStatusCodeException) {
                var status = ((HttpStatusCodeException) exc).getStatusCode();
                if (status == HttpStatus.NOT_FOUND)
                    throw new ErrorResultException("No Eclipse profile data available for user: " + personId);
            }

            var url = UriComponentsBuilder.fromUriString(urlTemplate).build(uriVariables);
            logger.error("Get request failed with URL: " + url, exc);
            throw new ErrorResultException("Request for retrieving user profile failed: " + exc.getMessage(),
                    HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
@Test
    public void testGetPublicProfile() throws Exception {
        var urlTemplate = "https://test.openvsx.eclipse.org/account/profile/{personId}";
        Mockito.when(restTemplate.exchange(eq(urlTemplate), eq(HttpMethod.GET), any(HttpEntity.class), eq(String.class), eq(Map.of("personId", "test"))))
                .thenReturn(mockProfileResponse());

        var profile = eclipse.getPublicProfile("test");

        assertThat(profile).isNotNull();
        assertThat(profile.name).isEqualTo("test");
        assertThat(profile.githubHandle).isEqualTo("test");
        assertThat(profile.publisherAgreements).isNotNull();
        assertThat(profile.publisherAgreements.openVsx).isNotNull();
        assertThat(profile.publisherAgreements.openVsx.version).isEqualTo("1");
    }