Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
127 changes: 84 additions & 43 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'

android {
compileSdkVersion versions.compileSdk
buildToolsVersion versions.buildTools
compileSdkVersion 25
buildToolsVersion "25.0.3"

defaultConfig {
applicationId "com.ikholopov.yamblz.weather.weathermobilization"
minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk
versionCode versions.version
versionName versions.versionName
resValue "string", "api_key", (project.findProperty("API_KEY") ?: "")
resValue "string", "google_api_key", (project.findProperty("GOOGLE_API_KEY") ?: "")
resValue "string", "location", (project.findProperty("LOCATION") ?: "")
minSdkVersion 16
targetSdkVersion 25
versionCode 2
versionName "2.0.0"

buildConfigField "String", "GOOGLE_API_KEY", (project.findProperty("GOOGLE_API_KEY") ?: "")
buildConfigField "String", "OPENWEATHERMAP_API_KEY", (project.findProperty("OPENWEATHERMAP_API_KEY") ?: "")
testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
}

Expand All @@ -37,43 +39,82 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

ext.versions = [
supportLibs : "25.3.1",
constraintLayout : "1.0.2",
room : "1.0.0-alpha5",

threetenabp : "1.0.5",
butterKnife : "8.7.0",

toggleButtonGroup : "1.0.2",
dagger : "2.11",

gson : "2.8.1",
rxjava : "2.1.1",
rxandroid : "2.0.1",
rxbinding : "2.0.0",
retrofit : "2.3.0",

junit : "4.12",
mockito : "1.10.19",
assertj : "2.8.0",
jUnitParams : "1.1.0",
robolectric : "3.3.2",
espresso : "2.2.2",

leakCanary : "1.5.1"
]

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile libraries.supportAppCompat
compile libraries.supportDesign
compile libraries.supportPreference
compile libraries.supportConstraintLayout
compile libraries.support

compile libraries.seekbar

compile libraries.butterKnife
annotationProcessor libraries.butterKnifeCompiler

compile libraries.dagger
annotationProcessor libraries.daggerCompiler

debugCompile libraries.leakCanaryDebug
releaseCompile libraries.leakCanaryRelease

testCompile libraries.junit
testCompile libraries.mockito
testCompile libraries.assertj
testCompile libraries.jUnitParams
testCompile libraries.robolectric

compile libraries.gson
compile libraries.rxjava
compile libraries.rxandroid
compile libraries.rxbinding
compile libraries.retrofit
compile libraries.converterGson
compile libraries.adapterRxjava2

androidTestCompile libraries.assertj
androidTestCompile libraries.espresso, {

compile "com.android.support:appcompat-v7:$versions.supportLibs"
compile "com.android.support:design:$versions.supportLibs"
compile "com.android.support.constraint:constraint-layout:$versions.constraintLayout"
compile "com.android.support:support-v4:$versions.supportLibs"
compile "com.android.support:cardview-v7:$versions.supportLibs"

compile "android.arch.persistence.room:runtime:$versions.room"
compile "android.arch.persistence.room:rxjava2:$versions.room"
annotationProcessor "android.arch.persistence.room:compiler:$versions.room"

compile "com.nex3z:toggle-button-group:$versions.toggleButtonGroup"

compile "com.jakewharton.threetenabp:threetenabp:$versions.threetenabp"
compile "com.jakewharton:butterknife:$versions.butterKnife"
annotationProcessor "com.jakewharton:butterknife-compiler:$versions.butterKnife"

compile "com.google.dagger:dagger:$versions.dagger"
annotationProcessor "com.google.dagger:dagger-compiler:$versions.dagger"

compile "com.google.code.gson:gson:$versions.gson"
compile "io.reactivex.rxjava2:rxjava:$versions.rxjava"
compile "io.reactivex.rxjava2:rxandroid:$versions.rxandroid"
compile "com.jakewharton.rxbinding2:rxbinding:$versions.rxbinding"
compile "com.jakewharton.rxbinding2:rxbinding-support-v4:$versions.rxbinding"
compile "com.squareup.retrofit2:retrofit:$versions.retrofit"
compile "com.squareup.retrofit2:converter-gson:$versions.retrofit"
compile "com.squareup.retrofit2:adapter-rxjava2:$versions.retrofit"

debugCompile "com.squareup.leakcanary:leakcanary-android:$versions.leakCanary"
releaseCompile "com.squareup.leakcanary:leakcanary-android-no-op:$versions.leakCanary"

testCompile "junit:junit:$versions.junit"
testCompile "org.mockito:mockito-core:$versions.mockito"
testCompile "org.assertj:assertj-core:$versions.assertj"
testCompile "pl.pragmatists:JUnitParams:$versions.jUnitParams"
testCompile "org.robolectric:robolectric:$versions.robolectric"

androidTestCompile "org.assertj:assertj-core:$versions.assertj"
androidTestCompile "com.android.support.test.espresso:espresso-core:$versions.espresso", {
exclude group: 'com.android.support', module: 'support-annotations'
}
}
}
16 changes: 12 additions & 4 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,12 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

-printmapping mapping.txt
-keep class com.ikholopov.yamblz.weather.weathermobilization.data.dto.** { *; }
-keep class com.ikholopov.yamblz.weather.weathermobilization.data.CurrentWeather { *; }
-keep class com.ikholopov.yamblz.weather.weathermobilization.data.CityInfo { *; }
-keep class com.ikholopov.yamblz.weather.weathermobilization.data.CityAutoComplete { *; }

-keep class com.ikholopov.yamblz.weather.weathermobilization.model.network.dto.** { *; }
-keep class com.ikholopov.yamblz.weather.weathermobilization.model.network.CityInfo { *; }
-keep class com.ikholopov.yamblz.weather.weathermobilization.model.* { *; }

# Retrofit 2.X
## https://square.github.io/retrofit/ ##
Expand All @@ -43,3 +44,10 @@

-dontwarn okio.**
-dontwarn javax.annotation.**

# Retrolambda
-dontwarn java.lang.invoke.*
-dontwarn **$$Lambda$*

-dontwarn android.arch.util.paging.CountedDataSource
-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource
Original file line number Diff line number Diff line change
Expand Up @@ -5,61 +5,31 @@
import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;

import com.ikholopov.yamblz.weather.weathermobilization.R;
import com.ikholopov.yamblz.weather.weathermobilization.ui.PageObjects.CitiesPage;
import com.ikholopov.yamblz.weather.weathermobilization.ui.PageObjects.SettingsPage;

import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withContentDescription;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withParent;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.allOf;

@RunWith(AndroidJUnit4.class)
@LargeTest
public class MainActivityTest {

@Rule
public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>(MainActivity.class);

@After
public void tearDown() {
activityTestRule.getActivity().getSupportLoaderManager().destroyLoader(0);
}

@Test
public void showWeatherOnStartTest() throws Throwable {
onView(withId(R.id.weather_location)).check(matches(isDisplayed()));
public void showCitiesOnStartTest() throws Throwable {
CitiesPage.obtain().assertOn();
}

@Test
public void navigateToAboutTest() throws Throwable {
onView(allOf(withContentDescription("Open navigation drawer"),
withParent(withId(R.id.toolbar)), isDisplayed()))
.perform(click());

onView(allOf(withId(R.id.design_menu_item_text), withText(R.string.nav_drawer_about), isDisplayed()))
.perform(click());

onView(withId(R.id.about_message)).check(matches(withText(R.string.about_message)));
}

@Test
public void navigateToSettingsTest() throws Throwable {
onView(allOf(withContentDescription("Open navigation drawer"),
withParent(withId(R.id.toolbar)), isDisplayed()))
.perform(click());

onView(allOf(withId(R.id.design_menu_item_text), withText(R.string.nav_drawer_settings), isDisplayed()))
.perform(click());
public void navigateToSettingAndBackTest() throws Throwable {
CitiesPage.obtain().clickSettings();
SettingsPage.obtain().assertOn();

onView(withId(R.id.unitsOption)).check(matches(isDisplayed()));
SettingsPage.obtain().clickBack();
CitiesPage.obtain().assertOn();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.ikholopov.yamblz.weather.weathermobilization.ui.PageObjects;

import com.ikholopov.yamblz.weather.weathermobilization.R;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;

/**
* Created by turist on 13.08.2017.
*/

public class CitiesPage {

private static CitiesPage instance;

public static CitiesPage obtain() {
if (instance == null)
instance = new CitiesPage();
return instance;
}

public CitiesPage assertOn() {
onView(withId(R.id.search_edit))
.check(matches(isDisplayed()));
onView(withId(R.id.cities_list))
.check(matches(isDisplayed()));
return instance;
}

public CitiesPage clickSettings() {
onView(withId(R.id.settings_button)).perform(click());
return instance;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.ikholopov.yamblz.weather.weathermobilization.ui.PageObjects;

import com.ikholopov.yamblz.weather.weathermobilization.R;
import com.ikholopov.yamblz.weather.weathermobilization.model.preferences.TemperatureFormat;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static com.ikholopov.yamblz.weather.weathermobilization.model.preferences.TemperatureFormat.CELSIUS;

/**
* Created by turist on 13.08.2017.
*/

public class SettingsPage {

private static SettingsPage instance;

public static SettingsPage obtain() {
if (instance == null)
instance = new SettingsPage();
return instance;
}

public SettingsPage assertOn() {
onView(withId(R.id.temperature_unit_button)).check(matches(isDisplayed()));
return instance;
}

public SettingsPage clickBack() {
onView(withId(R.id.back_button)).perform(click());
return instance;
}

public SettingsPage switchTemperature(@TemperatureFormat.Units int target) {
onView(withId(target == CELSIUS ? R.id.choice_c : R.id.choice_f)).perform(click());
return instance;
}
}
Loading