Skip to content

Commit

Permalink
Did the test, still working on the widget(creating a db)
Browse files Browse the repository at this point in the history
  • Loading branch information
emmaunel committed Jul 5, 2018
1 parent 86d4235 commit 2084a27
Show file tree
Hide file tree
Showing 19 changed files with 415 additions and 7 deletions.
Binary file modified .idea/caches/build_file_checksums.ser
Binary file not shown.
15 changes: 15 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ dependencies {
implementation 'com.android.support.test.espresso:espresso-idling-resource:3.0.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-intents:3.0.2'
androidTestImplementation('com.android.support.test.espresso:espresso-contrib:3.0.1'){

exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude group: 'com.android.support', module: 'support-annotations'
exclude module: 'recyclerview-v7'
}

//design
implementation 'com.android.support:design:27.1.1'
Expand Down Expand Up @@ -61,4 +69,11 @@ dependencies {

// ExoPlayer
implementation 'com.google.android.exoplayer:exoplayer:r2.2.0'

//Room(Database)
implementation 'android.arch.persistence.room:runtime:1.1.1'
annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

//Debug database
debugImplementation 'com.amitshekhar.android:debug-db:1.0.3'
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.wordpress.ayo218.bakingapp;

import android.support.test.espresso.IdlingRegistry;
import android.support.test.espresso.IdlingResource;
import android.support.test.rule.ActivityTestRule;

import com.wordpress.ayo218.bakingapp.ui.activity.MainActivity;

import org.junit.After;
import org.junit.Before;
import org.junit.Rule;

public abstract class BaseTest {
protected BaseApplication baseApplication;
protected IdlingResource idlingResource;

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

@Before
public void registerIdlingResource() {
baseApplication = (BaseApplication) mainActivityActivityTestRule.getActivity().getApplicationContext();
idlingResource = baseApplication.getIdlingResources();
// Register Idling Resources
IdlingRegistry.getInstance().register(idlingResource);
}

@After
public void unregisterIdlingResource() {
if (idlingResource != null) {
IdlingRegistry.getInstance().unregister(idlingResource);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package com.wordpress.ayo218.bakingapp;

import android.content.Context;
import android.content.Intent;
import android.support.test.espresso.contrib.RecyclerViewActions;
import android.support.test.espresso.intent.Intents;

import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.intent.Intents.intended;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent;
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasExtraWithKey;
import android.support.test.runner.AndroidJUnit4;

import com.wordpress.ayo218.bakingapp.model.Recipes;
import com.wordpress.ayo218.bakingapp.ui.activity.RecipeDetailActivity;
import com.wordpress.ayo218.bakingapp.ui.activity.RecipeStepsDetail;
import com.wordpress.ayo218.bakingapp.utils.Prefs;

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

import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static junit.framework.Assert.assertNotNull;

@RunWith(AndroidJUnit4.class)
public class RecipeTest extends BaseTest{

public static void getMeToRecipeInfo(int recipePosition) {
onView(withId(R.id.main_recipes_recyclerview))
.perform(RecyclerViewActions.actionOnItemAtPosition(recipePosition, click()));
}

public static void selectRecipeStep(int recipeStep) {
onView(withId(R.id.recipe_step_list_recycler))
.perform(RecyclerViewActions.actionOnItemAtPosition(recipeStep, click()));
}

@Test
public void clickRecyclerITemWithKey(){
Intents.init();
getMeToRecipeInfo(0);

intended(hasExtraWithKey(RecipeDetailActivity.RECIPE_KEY));
Intents.release();
}

@Test
public void clickOnRecyclerViewItem_opensRecipeInfoActivity() {

getMeToRecipeInfo(0);

onView(withId(R.id.ingredients_txt))
.check(matches(isDisplayed()));

onView(withId(R.id.recipe_step_list_recycler))
.check(matches(isDisplayed()));
}

@Test
public void clickOnRecyclerViewStepItem_opensRecipeStepActivity_orFragment() {
getMeToRecipeInfo(0);

boolean twoPaneMode = baseApplication.getResources().getBoolean(R.bool.twoPaneMode);
if (!twoPaneMode) {
// Checks if the keys are present and the intent launched is RecipeStepDetailActivity
Intents.init();
selectRecipeStep(1);
intended(hasComponent(RecipeStepsDetail.class.getName()));
intended(hasExtraWithKey(RecipeDetailActivity.RECIPE_KEY));
intended(hasExtraWithKey(RecipeStepsDetail.STEP_SELECTED_KEY));
Intents.release();

// Check TabLayout
onView(withId(R.id.tabs))
.check(matches(isCompletelyDisplayed()));
} else {
selectRecipeStep(1);

onView(withId(R.id.exoplayer_view))
.check(matches(isDisplayed()));
}
}

@Test
public void checkAddWidgetButtonFunctionality() {
// Clear the preferences values
baseApplication.getSharedPreferences(Prefs.PREF, Context.MODE_PRIVATE).edit()
.clear()
.commit();

getMeToRecipeInfo(0);

onView(withId(R.id.add_widget))
.check(matches(isDisplayed()))
.perform(click());

// Get the recipe base64 string from the sharedPrefs
Recipes recipe = Prefs.loadRecipe(baseApplication);

// Assert recipe is not null
assertNotNull(recipe);
}
}
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<uses-permission android:name="android.permission.INTERNET" />

<application
android:name=".BaseApplication"
android:allowBackup="true"
android:icon="@drawable/ic_cupcake"
android:label="@string/app_name"
Expand Down
30 changes: 30 additions & 0 deletions app/src/main/java/com/wordpress/ayo218/bakingapp/AppDatabase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.wordpress.ayo218.bakingapp;

import android.arch.persistence.room.Database;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.RoomDatabase;
import android.content.Context;

import com.wordpress.ayo218.bakingapp.model.Recipes;

@Database(entities = Recipes.class, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {

private static final Object LOCK = new Object();
private static final String DATABASE_TABLE = "favoriteDB";
private static AppDatabase database;

public static AppDatabase getsInstance(Context context) {
if (database == null) {
synchronized (LOCK) {
database = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, AppDatabase.DATABASE_TABLE)
.build();
}
}

return database;
}

public abstract FavoriteDao favoriteDao();
}
56 changes: 56 additions & 0 deletions app/src/main/java/com/wordpress/ayo218/bakingapp/AppExecutors.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.wordpress.ayo218.bakingapp;

import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

public class AppExecutors {

private static final Object LOCK = new Object();
private static AppExecutors sInstance;
private final Executor diskIO;
private final Executor mainThread;
private final Executor networkIO;


public AppExecutors(Executor diskIO, Executor mainThread, Executor networkIO) {
this.diskIO = diskIO;
this.mainThread = mainThread;
this.networkIO = networkIO;
}

public static AppExecutors getsInstance() {
if (sInstance == null) {
synchronized (LOCK) {
sInstance = new AppExecutors(Executors.newSingleThreadExecutor(),
Executors.newFixedThreadPool(3),
new MainThreadExecutor());
}
}
return sInstance;
}

public Executor diskIO() {
return diskIO;
}

public Executor mainThread() {
return mainThread;
}

public Executor networkIO() {
return networkIO;
}

private static class MainThreadExecutor implements Executor {
private Handler mainThreadHandler = new Handler(Looper.getMainLooper());

@Override
public void execute(@NonNull Runnable command) {
mainThreadHandler.post(command);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.wordpress.ayo218.bakingapp;

import android.app.Application;
import android.support.annotation.VisibleForTesting;
import android.support.test.espresso.IdlingResource;

import com.wordpress.ayo218.bakingapp.idlingResources.RecipeIdlingResources;

public class BaseApplication extends Application {

private RecipeIdlingResources idlingResources;

@VisibleForTesting
private IdlingResource initialize(){
if (idlingResources == null) {
idlingResources = new RecipeIdlingResources();
}
return idlingResources;
}

public BaseApplication(){
if (BuildConfig.DEBUG) {
initialize();
}
}

public void setIdleState(boolean state) {
if (idlingResources != null) {
idlingResources.setIsdleNow(state);
}
}

public RecipeIdlingResources getIdlingResources() {
return idlingResources;
}
}
16 changes: 16 additions & 0 deletions app/src/main/java/com/wordpress/ayo218/bakingapp/FavoriteDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.wordpress.ayo218.bakingapp;

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.OnConflictStrategy;

import com.wordpress.ayo218.bakingapp.model.Recipes;

@Dao
public interface FavoriteDao {



@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertRecipe(Recipes recipes);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Expand Down Expand Up @@ -45,7 +46,7 @@ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.recipe_serving.setText(context.getString(R.string.servings, recipesList.get(position).getServings()));

String recipes_img = recipesList.get(position).getImage();
if (!recipes_img.isEmpty()){
if (!TextUtils.isEmpty(recipesList.get(position).getImage())){
Picasso.get()
.load(recipesList.get(position).getImage())
.placeholder(R.drawable.ic_dinner)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.wordpress.ayo218.bakingapp.idlingResources;

import android.support.annotation.Nullable;
import android.support.test.espresso.IdlingResource;

import java.util.concurrent.atomic.AtomicBoolean;

public class RecipeIdlingResources implements IdlingResource {

@Nullable
private volatile ResourceCallback callback;

private AtomicBoolean isdleNow = new AtomicBoolean(true);

@Override
public String getName() {
return this.getClass().getName();
}

@Override
public boolean isIdleNow() {
return isdleNow.get();
}

@Override
public void registerIdleTransitionCallback(ResourceCallback callback) {
this.callback = callback;
}

public void setIsdleNow(boolean idleNow){
isdleNow.set(idleNow);
if (idleNow && callback != null) {
callback.onTransitionToIdle();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ public Ingredients() {
this.ingredient = "";
}

public Ingredients(int quantity, String measure, String ingredient) {
this.quantity = quantity;
this.measure = measure;
this.ingredient = ingredient;
}

protected Ingredients(Parcel in) {
quantity = in.readInt();
Expand Down
Loading

0 comments on commit 2084a27

Please sign in to comment.