@Test
  public void shouldLogEventToSaasAnalyticsWhenUserDidnotLogIn() throws Exception {
    Event event = new Event(Event.Type.CDEC_FIRST_LOGIN, Collections.emptyMap());

    Response response = service.logSaasAnalyticsEvent(event);

    assertEquals(response.getStatus(), Response.Status.ACCEPTED.getStatusCode());
    verify(mockFacade).logSaasAnalyticsEvent(event, null);
  }
  @Test
  public void shouldLogEventToSaasAnalyticsWhenUserLoggedIn() throws Exception {
    SaasUserCredentials testUserCredentials =
        new SaasUserCredentials(TEST_ACCESS_TOKEN, TEST_ACCOUNT_ID);
    service.saasUserCredentials = testUserCredentials;

    Event event = new Event(Event.Type.CDEC_FIRST_LOGIN, Collections.emptyMap());

    Response response = service.logSaasAnalyticsEvent(event);

    assertEquals(response.getStatus(), Response.Status.ACCEPTED.getStatusCode());
    verify(mockFacade).logSaasAnalyticsEvent(event, TEST_ACCESS_TOKEN);
  }
  @Test
  public void shouldThrowBadRequestErrorIfEventHasTooManyParameters() throws Exception {
    SaasUserCredentials testUserCredentials =
        new SaasUserCredentials(TEST_ACCESS_TOKEN, TEST_ACCOUNT_ID);
    service.saasUserCredentials = testUserCredentials;

    Map<String, String> parameters = new HashMap<>();
    IntStream.range(0, Event.MAX_EXTENDED_PARAMS_NUMBER + 1)
        .forEach(i -> parameters.put(String.valueOf(i), "a"));

    Event event = new Event(Event.Type.CDEC_FIRST_LOGIN, parameters);

    Response response = service.logSaasAnalyticsEvent(event);

    assertEquals(response.getStatus(), Response.Status.BAD_REQUEST.getStatusCode());
    assertEquals(
        response.getEntity().toString(),
        format(
            "{message=The number of parameters exceeded the limit of extended parameters in %s}",
            Event.MAX_EXTENDED_PARAMS_NUMBER));
    verify(mockFacade, never()).logSaasAnalyticsEvent(any(Event.class), any(String.class));
  }