Package com.eclipsesource.tabris.tracking.internal

Source Code of com.eclipsesource.tabris.tracking.internal.TrackingInfoFactoryTest

/*******************************************************************************
* Copyright (c) 2014 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    EclipseSource - initial API and implementation
******************************************************************************/
package com.eclipsesource.tabris.tracking.internal;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.Locale;
import java.util.UUID;

import org.eclipse.rap.rwt.client.Client;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import com.eclipsesource.tabris.ClientStore;
import com.eclipsesource.tabris.app.App;
import com.eclipsesource.tabris.device.ClientDevice;
import com.eclipsesource.tabris.device.ClientDevice.Platform;
import com.eclipsesource.tabris.test.util.TabrisEnvironment;
import com.eclipsesource.tabris.test.util.TabrisRequest;
import com.eclipsesource.tabris.tracking.TrackingInfo;
import com.eclipsesource.tabris.ui.UI;


public class TrackingInfoFactoryTest {

  @Rule
  public TabrisEnvironment environment = new TabrisEnvironment();

  private UI ui;
  private ClientStore clientStore;
  private TabrisRequest request;

  @Before
  public void setUp() {
    Client client = mock( Client.class );
    mockApp( client );
    mockDevice( client );
    mockClientStore( client );
    environment.setClient( client );
    request = environment.newRequest();
    mockUi();
  }

  private void mockUi() {
    Display display = new Display();
    ui = mock( UI.class );
    when( ui.getDisplay() ).thenReturn( display );
  }

  private void mockApp( Client client ) {
    App app = mock( App.class );
    when( app.getId() ).thenReturn( "appId" );
    when( app.getTabrisVersion() ).thenReturn( "tabrisVersion" );
    when( app.getVersion() ).thenReturn( "appVersion" );
    when( client.getService( App.class ) ).thenReturn( app );
  }

  private void mockDevice( Client client ) {
    ClientDevice device = mock( ClientDevice.class );
    when( device.getLocale() ).thenReturn( Locale.CANADA );
    when( device.getModel() ).thenReturn( "model" );
    when( device.getOSVersion() ).thenReturn( "osVersion" );
    when( device.getPlatform() ).thenReturn( Platform.ANDROID );
    when( device.getVendor() ).thenReturn( "vendor" );
    doReturn( Integer.valueOf( 23 ) ).when( device ).getTimezoneOffset();
    doReturn( Float.valueOf( 23F ) ).when( device ).getScaleFactor();
    when( client.getService( ClientDevice.class ) ).thenReturn( device );
  }

  private void mockClientStore( Client client ) {
    clientStore = mock( ClientStore.class );
    when( client.getService( ClientStore.class ) ).thenReturn( clientStore );
  }

  @Test
  public void testCreatesNewClientIdOnFirstAccess() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String clientId = info.getClientId();

    assertNotNull( UUID.fromString( clientId ) );
  }

  @Test
  public void testStoresNewClientIdInClientStore() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String clientId = info.getClientId();

    verify( clientStore ).add( TrackingInfoFactory.PROPERTY_ID, clientId );
  }

  @Test
  public void testUsesClientIdFromClientStore() {
    String id = UUID.randomUUID().toString();
    when( clientStore.get( TrackingInfoFactory.PROPERTY_ID ) ).thenReturn( id );
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String clientId = info.getClientId();

    assertEquals( id, clientId );
  }

  @Test
  public void testObtainsAppId() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String appId = info.getAppId();

    assertEquals( "appId", appId );
  }

  @Test
  public void testObtainsTabrisVersion() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String tabrisVersion = info.getTabrisVersion();

    assertEquals( "tabrisVersion", tabrisVersion );
  }

  @Test
  public void testObtainsAppVersion() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String appVersion = info.getAppVersion();

    assertEquals( "appVersion", appVersion );
  }

  @Test
  public void testObtainsLocale() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    Locale clientLocale = info.getClientLocale();

    assertSame( Locale.CANADA, clientLocale );
  }

  @Test
  public void testObtainsModel() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String deviceModel = info.getDeviceModel();

    assertEquals( "model", deviceModel );
  }

  @Test
  public void testObtainsOsVersion() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String deviceOsVersion = info.getDeviceOsVersion();

    assertEquals( "osVersion", deviceOsVersion );
  }

  @Test
  public void testObtainsVendor() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String deviceVendor = info.getDeviceVendor();

    assertEquals( "vendor", deviceVendor );
  }

  @Test
  public void testObtainsPlatform() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    Platform platform = info.getPlatform();

    assertSame( Platform.ANDROID, platform );
  }

  @Test
  public void testObtainsTimezoneOffset() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    int clientTimezoneOffset = info.getClientTimezoneOffset();

    assertEquals( 23, clientTimezoneOffset );
  }

  @Test
  public void testObtainsScaleFactor() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    float scaleFactor = info.getScaleFactor();

    assertEquals( 23F, scaleFactor, 0 );
  }

  @Test
  public void testObtainsScreenResolution() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    Point screenResolution = info.getScreenResolution();

    Rectangle bounds = ui.getDisplay().getBounds();
    Point expectedResolution = new Point( bounds.width, bounds.height );
    assertEquals( expectedResolution, screenResolution );
  }

  @Test
  public void testObtainsUserAgent() {
    request.setHeader( "User-Agent", "foo" );
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String userAgent = info.getUserAgent();

    assertEquals( "foo", userAgent );
  }

  @Test
  public void testObtainsClientIpFrom_X_Forwarded_For() {
    request.setHeader( "X-Forwarded-For", "12.34.56.78" );
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String ip = info.getClientIp();

    assertEquals( "12.34.56.78", ip );
  }

  @Test
  public void testObtainsClientIpFrom_Proxy_Client_IP() {
    request.setHeader( "Proxy-Client-IP", "12.34.56.78" );
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String ip = info.getClientIp();

    assertEquals( "12.34.56.78", ip );
  }

  @Test
  public void testObtainsClientIpFrom_WL_Proxy_Client_IP() {
    request.setHeader( "WL-Proxy-Client-IP", "12.34.56.78" );
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String ip = info.getClientIp();

    assertEquals( "12.34.56.78", ip );
  }

  @Test
  public void testObtainsClientIpFrom_HTTP_CLIENT_IP() {
    request.setHeader( "HTTP_CLIENT_IP", "12.34.56.78" );
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String ip = info.getClientIp();

    assertEquals( "12.34.56.78", ip );
  }

  @Test
  public void testObtainsClientIpFrom_HTTP_X_FORWARDED_FOR() {
    request.setHeader( "HTTP_X_FORWARDED_FOR", "12.34.56.78" );
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String ip = info.getClientIp();

    assertEquals( "12.34.56.78", ip );
  }

  @Test
  public void testObtainsClientIpFromRemoteAddressWithoutHeaders() {
    TrackingInfo info = TrackingInfoFactory.createInfo( ui.getDisplay() );

    String ip = info.getClientIp();

    assertNull( ip );
  }
}
TOP

Related Classes of com.eclipsesource.tabris.tracking.internal.TrackingInfoFactoryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.