@Test
  public void traitsAreCopied() {
    assertThat(analyticsContext.traits()).isEqualTo(traits).isNotSameAs(traits);

    Traits traits = new Traits().putAnonymousId("foo");
    analyticsContext.setTraits(traits);
    assertThat(analyticsContext.traits()).isEqualTo(traits).isNotSameAs(traits);
  }
  @Test
  public void copyIsImmutable() {
    AnalyticsContext copy = analyticsContext.unmodifiableCopy();

    //noinspection EmptyCatchBlock
    try {
      copy.put("foo", "bar");
      fail("Inserting into copy should throw UnsupportedOperationException");
    } catch (UnsupportedOperationException expected) {

    }
  }
  @Test
  public void copyReturnsSameMappings() {
    AnalyticsContext copy = analyticsContext.unmodifiableCopy();

    assertThat(copy)
        .hasSameSizeAs(analyticsContext)
        .isNotSameAs(analyticsContext)
        .isEqualTo(analyticsContext);
    for (Map.Entry<String, Object> entry : analyticsContext.entrySet()) {
      assertThat(copy).contains(MapEntry.entry(entry.getKey(), entry.getValue()));
    }
  }
Ejemplo n.º 4
0
  @Test
  public void logoutClearsTraitsAndUpdatesContext() {
    analyticsContext.setTraits(new Traits().putAge(20).putAvatar("bar"));

    analytics.logout();

    verify(traitsCache).delete();
    verify(traitsCache)
        .set(
            argThat(
                new TypeSafeMatcher<Traits>() {
                  @Override
                  protected boolean matchesSafely(Traits traits) {
                    return !isNullOrEmpty(traits.anonymousId());
                  }

                  @Override
                  public void describeTo(Description description) {}
                }));
    assertThat(analyticsContext.traits()).hasSize(1).containsKey("anonymousId");
  }
  @Test
  public void create() {
    analyticsContext = AnalyticsContext.create(RuntimeEnvironment.application, traits);
    assertThat(analyticsContext) //
        .containsKey("app") //
        .containsKey("device") //
        .containsKey("library") //
        .containsEntry("locale", "en-US") //
        .containsKey("network") //
        .containsKey("os") //
        .containsKey("screen")
        .containsEntry("userAgent", "undefined") //
        .containsKey("timezone") // value depends on where the tests are run
        .containsKey("traits");

    assertThat(analyticsContext.getValueMap("app")) //
        .containsEntry("name", "com.segment.analytics.core.tests")
        .containsEntry("version", BuildConfig.VERSION_NAME)
        .containsEntry("namespace", "com.segment.analytics.core.tests")
        .containsEntry("build", BuildConfig.VERSION_CODE);

    assertThat(analyticsContext.getValueMap("device")) //
        .containsEntry("id", "unknown")
        .containsEntry("manufacturer", "unknown")
        .containsEntry("model", "unknown")
        .containsEntry("name", "unknown");

    assertThat(analyticsContext.getValueMap("library")) //
        .containsEntry("name", "analytics-android")
        .containsEntry("version", BuildConfig.VERSION_NAME);

    // TODO: mock network state?
    assertThat(analyticsContext.getValueMap("network")).isEmpty();

    assertThat(analyticsContext.getValueMap("os")) //
        .containsEntry("name", "Android") //
        .containsEntry("version", "unknown");

    assertThat(analyticsContext.getValueMap("screen")) //
        .containsEntry("density", 1.5f) //
        .containsEntry("width", 480) //
        .containsEntry("height", 800);
  }
Ejemplo n.º 6
0
  @Test
  public void identifyUpdatesCache() {
    analytics.identify("foo", new Traits().putValue("bar", "qaz"), null);

    assertThat(traits)
        .contains(MapEntry.entry("userId", "foo"))
        .contains(MapEntry.entry("bar", "qaz"));
    assertThat(analyticsContext.traits())
        .contains(MapEntry.entry("userId", "foo"))
        .contains(MapEntry.entry("bar", "qaz"));
    verify(traitsCache).set(traits);
    verify(integration)
        .identify(
            argThat(
                new NoDescriptionMatcher<IdentifyPayload>() {
                  @Override
                  protected boolean matchesSafely(IdentifyPayload item) {
                    // Exercises a bug where payloads didn't pick up userId in identify correctly.
                    // https://github.com/segmentio/analytics-android/issues/169
                    return item.userId().equals("foo");
                  }
                }));
  }