Skip to content
Closed
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.d4rk.androidtutorials.java.data.repository;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.Context;

import com.d4rk.androidtutorials.java.BuildConfig;
import com.d4rk.androidtutorials.java.R;
import com.d4rk.androidtutorials.java.ui.screens.about.repository.AboutRepository;

import org.junit.Test;

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

public class AboutRepositoryTest {

@Test
public void getVersionString_formatsFromContextTemplate() {
Context context = org.mockito.Mockito.mock(Context.class);
when(context.getApplicationContext()).thenReturn(context);
when(context.getString(R.string.app_version)).thenReturn("v%s (%d)");

AboutRepository repository = new AboutRepository(context);

String expected = String.format("v%s (%d)", BuildConfig.VERSION_NAME, BuildConfig.VERSION_CODE);
assertEquals(expected, repository.getVersionString());

verify(context).getString(R.string.app_version);
}

@Test
public void getCurrentYear_returnsFormattedYear() {
Context context = org.mockito.Mockito.mock(Context.class);
when(context.getApplicationContext()).thenReturn(context);

AboutRepository repository = new AboutRepository(context);

String expected = new SimpleDateFormat("yyyy", Locale.getDefault())
.format(Calendar.getInstance().getTime());

assertEquals(expected, repository.getCurrentYear());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
package com.d4rk.androidtutorials.java.data.repository;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.Activity;
import android.content.Context;

import com.d4rk.androidtutorials.java.ui.screens.help.repository.HelpRepository;
import com.google.android.play.core.review.ReviewInfo;
import com.google.android.play.core.review.ReviewManager;
import com.google.android.play.core.review.ReviewManagerFactory;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;

import org.junit.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;

public class HelpRepositoryTest {

@SuppressWarnings("unchecked")
@Test
public void requestReviewFlow_notifiesSuccessListener() {
Context context = mock(Context.class);
ReviewManager reviewManager = mock(ReviewManager.class);
Task<ReviewInfo> task = mock(Task.class);
ReviewInfo reviewInfo = mock(ReviewInfo.class);
com.d4rk.androidtutorials.java.data.repository.HelpRepository.OnReviewInfoListener listener =
mock(com.d4rk.androidtutorials.java.data.repository.HelpRepository.OnReviewInfoListener.class);

try (MockedStatic<ReviewManagerFactory> reviewManagerFactoryMockedStatic = Mockito.mockStatic(ReviewManagerFactory.class)) {
reviewManagerFactoryMockedStatic.when(() -> ReviewManagerFactory.create(context)).thenReturn(reviewManager);
when(reviewManager.requestReviewFlow()).thenReturn(task);
when(task.addOnSuccessListener(any(OnSuccessListener.class))).thenAnswer(invocation -> {
OnSuccessListener<ReviewInfo> onSuccessListener = invocation.getArgument(0);
onSuccessListener.onSuccess(reviewInfo);
return task;
});
when(task.addOnFailureListener(any(OnFailureListener.class))).thenReturn(task);

HelpRepository repository = new HelpRepository(context);

repository.requestReviewFlow(listener);

verify(listener).onSuccess(reviewInfo);
}
}

@SuppressWarnings("unchecked")
@Test
public void requestReviewFlow_notifiesFailureListener() {
Context context = mock(Context.class);
ReviewManager reviewManager = mock(ReviewManager.class);
Task<ReviewInfo> task = mock(Task.class);
Exception error = new Exception("failure");
com.d4rk.androidtutorials.java.data.repository.HelpRepository.OnReviewInfoListener listener =
mock(com.d4rk.androidtutorials.java.data.repository.HelpRepository.OnReviewInfoListener.class);

try (MockedStatic<ReviewManagerFactory> reviewManagerFactoryMockedStatic = Mockito.mockStatic(ReviewManagerFactory.class)) {
reviewManagerFactoryMockedStatic.when(() -> ReviewManagerFactory.create(context)).thenReturn(reviewManager);
when(reviewManager.requestReviewFlow()).thenReturn(task);
when(task.addOnSuccessListener(any(OnSuccessListener.class))).thenReturn(task);
when(task.addOnFailureListener(any(OnFailureListener.class))).thenAnswer(invocation -> {
OnFailureListener onFailureListener = invocation.getArgument(0);
onFailureListener.onFailure(error);
return task;
});

HelpRepository repository = new HelpRepository(context);

repository.requestReviewFlow(listener);

verify(listener).onFailure(error);
}
}

@Test
public void launchReviewFlow_forwardsToManager() {
Context context = mock(Context.class);
Activity activity = mock(Activity.class);
ReviewManager reviewManager = mock(ReviewManager.class);
ReviewInfo reviewInfo = mock(ReviewInfo.class);

try (MockedStatic<ReviewManagerFactory> reviewManagerFactoryMockedStatic = Mockito.mockStatic(ReviewManagerFactory.class)) {
reviewManagerFactoryMockedStatic.when(() -> ReviewManagerFactory.create(context)).thenReturn(reviewManager);
HelpRepository repository = new HelpRepository(context);

repository.launchReviewFlow(activity, reviewInfo);

verify(reviewManager).launchReviewFlow(activity, reviewInfo);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.d4rk.androidtutorials.java.data.repository;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;

import com.d4rk.androidtutorials.java.R;

import org.junit.Test;

public class LessonRepositoryTest {

private final com.d4rk.androidtutorials.java.ui.screens.android.repository.LessonRepository repository =
new com.d4rk.androidtutorials.java.ui.screens.android.repository.LessonRepository();

@Test
public void getLesson_knownLessonReturnsRecord() {
LessonRepository.Lesson expected = new LessonRepository.Lesson(
R.string.alert_dialog,
R.raw.text_alertdialog_java,
R.raw.text_center_button_xml
);

LessonRepository.Lesson result = repository.getLesson("AlertDialog");

assertEquals(expected, result);
}

@Test
public void getLesson_emptyNameThrows() {
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> repository.getLesson("")
);
assertEquals("Unknown lesson: ", exception.getMessage());
}

@Test
public void getLesson_unknownLessonThrows() {
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> repository.getLesson("Unknown")
);
assertEquals("Unknown lesson: Unknown", exception.getMessage());
}
}
Loading
Loading