samuelchassot/SDP-SwissTeam

View on GitHub
app/src/androidTest/java/ch/epfl/swissteam/services/PostActivityTest.java

Summary

Maintainability
A
1 hr
Test Coverage
package ch.epfl.swissteam.services;

import android.content.Intent;
import android.support.test.espresso.contrib.DrawerActions;
import android.support.test.espresso.contrib.NavigationViewActions;

import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;

import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import ch.epfl.swissteam.services.models.Post;
import ch.epfl.swissteam.services.models.User;
import ch.epfl.swissteam.services.providers.DBUtility;
import ch.epfl.swissteam.services.providers.GoogleSignInSingleton;
import ch.epfl.swissteam.services.view.activities.PostActivity;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant;
import static android.support.test.espresso.matcher.ViewMatchers.isClickable;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static ch.epfl.swissteam.services.view.builders.PostAdapter.POST_TAG;
import static ch.epfl.swissteam.services.TestUtils.personalClick;
import static ch.epfl.swissteam.services.TestUtils.sleep;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;

public class PostActivityTest extends SocializeTest<PostActivity>{

    private Post post;
    private User user;

    public PostActivityTest(){
        setTestRule(PostActivity.class);
    }

    @Override
    public void initialize() {
        TestUtils.addTestPost();
        user = TestUtils.getTestUser();
        post = TestUtils.getTestPost();
        GoogleSignInSingleton.putUniqueID(user.getGoogleId_());
        post.addToDB(DBUtility.get().getDb_());
        user.addToDB(DBUtility.get().getDb_());
        sleep(400);
    }

    @Test
    public void infoAboutPostCorrespondToTheGivenPost(){
        onView(withId(R.id.textview_postactivity_title)).check(matches(withText(post.getTitle_())));
        onView(withId(R.id.textview_postactivity_body)).check(matches(withText(post.getBody_())));
        onView(withId(R.id.textview_postactivity_date)).check(matches(withText(
                (new SimpleDateFormat("dd/MM/yyyy", Locale.FRENCH)).format(new Date(post.getTimestamp_()).getTime()))));
        onView(withId(R.id.textview_postactivity_username)).check(matches(withText(user.getName_())));
    }

    @Test
    public void theLocationOfThePostOnTheMapCorrespondToThePost(){
        Marker marker = testRule_.getActivity().getMarker();
        testRule_.getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if(marker != null){
                LatLng markerPos = marker.getPosition();
                assertEquals(markerPos.latitude, post.getLatitude_(), 0.01);
                assertEquals(markerPos.longitude, post.getLongitude_(), 0.01);
                assertEquals(marker.getTitle(), post.getTitle_());}
            }
        });

    }

    @Test
    public void canClickOnlyOnceOnToDoButton(){
        onView(withId(R.id.button_postactivity_todo)).perform(personalClick());
        onView(withId(R.id.button_postactivity_todo)).check(matches(not(isClickable())));
    }

    @Test
    public void canClickOnlToDoButtonAndItAppearsInTodoListFragment(){
        onView(withId(R.id.button_postactivity_todo)).perform(personalClick());

        onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
        onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.button_maindrawer_todoList));

        onView(withId(R.id.recyclerview_todofragment)).check(matches((hasDescendant(withText(post.getTitle_())))));
        onView(withId(R.id.recyclerview_todofragment)).check(matches((hasDescendant(withText(post.getBody_())))));
    }

    @Override
    public Intent getActivityIntent(){
        Intent intent = new Intent();
        intent.putExtra(POST_TAG, post);
        return intent;
    }

}