Skip to content

Commit 5d7c285

Browse files
Gabi Scardine SilvaGabi Scardine Silva
Gabi Scardine Silva
authored and
Gabi Scardine Silva
committed
Convert Entry
1 parent 63e5a67 commit 5d7c285

File tree

11 files changed

+105
-119
lines changed

11 files changed

+105
-119
lines changed

app/src/main/java/io/intrepid/contest/models/Entry.java

-44
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package io.intrepid.contest.models
2+
3+
import android.support.v4.util.SparseArrayCompat
4+
import java.util.*
5+
6+
open class Entry {
7+
var id: UUID
8+
var title: String? = null
9+
var createdAt: Date? = null
10+
var updatedAt: Date? = null
11+
var photoUrl: String? = null
12+
@Transient private val mapOfIndexToScore = SparseArrayCompat<Int>()
13+
@Transient private var categoriesSize: Int = 0
14+
15+
init {
16+
id = UUID.randomUUID()
17+
}
18+
19+
val isCompletelyScored: Boolean
20+
get() = mapOfIndexToScore.size() == categoriesSize
21+
22+
val ratingAverage: Int
23+
get() {
24+
var sum = 0
25+
for (index in 0..mapOfIndexToScore.size() - 1) {
26+
sum += mapOfIndexToScore.get(index)
27+
}
28+
return sum / categoriesSize
29+
}
30+
31+
fun getScoreAt(categoryIndex: Int): Int {
32+
return mapOfIndexToScore.get(categoryIndex)
33+
}
34+
35+
fun setCategoriesSize(categoriesSize: Int) {
36+
this.categoriesSize = categoriesSize
37+
}
38+
39+
fun acceptScore(position: Int, newRating: Int) {
40+
mapOfIndexToScore.put(position, newRating)
41+
}
42+
}

app/src/main/java/io/intrepid/contest/rest/MockRestApi.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ private List<Entry> makeListOfEntries() {
222222
List<Entry> entries = new ArrayList<>();
223223
for (int i = 0; i < 3; i++) {
224224
Entry entry = new Entry();
225-
entry.title = "Test Entry " + i;
226-
entry.photoUrl = TEST_ENTRY_IMAGE;
225+
entry.setTitle("Test Entry " + i);
226+
entry.setPhotoUrl(TEST_ENTRY_IMAGE);
227227
entries.add(entry);
228228
}
229229
return entries;

app/src/main/java/io/intrepid/contest/screens/adminstatus/EntryReviewViewHolder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ private static View inflateView(ViewGroup parent) {
3232

3333
public void bind(Entry entry) {
3434
Picasso.with(itemView.getContext())
35-
.load(entry.photoUrl).resizeDimen(R.dimen.entry_review_row_size, R.dimen.entry_review_row_size)
35+
.load(entry.getPhotoUrl()).resizeDimen(R.dimen.entry_review_row_size, R.dimen.entry_review_row_size)
3636
.into(entryThumbnail);
37-
entryTitleTextView.setText(entry.title);
37+
entryTitleTextView.setText(entry.getTitle());
3838
}
3939
}

app/src/main/java/io/intrepid/contest/screens/contestjudging/EntryViewHolder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@ void onEntryClick() {
4545

4646
void bindEntry(Entry entry) {
4747
this.entry = entry;
48-
submissionTitleField.setText(entry.title);
48+
submissionTitleField.setText(entry.getTitle());
4949
if (entry.isCompletelyScored()) {
5050
checkMarkIcon.setVisibility(View.VISIBLE);
5151
}
5252
scoreField.setText(String.valueOf(entry.getRatingAverage()));
5353
Picasso.with(itemView.getContext())
54-
.load(entry.photoUrl)
54+
.load(entry.getPhotoUrl())
5555
.placeholder(R.drawable.default_entry_icon)
5656
.into(entryThumbnail);
5757
}

app/src/main/java/io/intrepid/contest/screens/contestjudging/scoreentries/ScoreEntriesPresenter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ private void fetchEntriesForContest() {
4949
entryBallots.clear();
5050
for (Entry entry : entries) {
5151
entry.setCategoriesSize(categories.size());
52-
EntryBallot ballot = new EntryBallot(entry.id);
52+
EntryBallot ballot = new EntryBallot(entry.getId());
5353
for(Category category : categories){
5454
ballot.addScore(new Score(category, 0));
5555
}

app/src/main/java/io/intrepid/contest/screens/contestjudging/scoreentries/entrydetail/EntryPageViewHolder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private static View inflateView(ViewGroup parent) {
4848

4949
void bindEntry(Entry entry) {
5050
setupCategoriesList(entry);
51-
String photoUrl = entry.photoUrl;
51+
String photoUrl = entry.getPhotoUrl();
5252
int imageWidth = (int) itemView.getResources().getDimension(R.dimen.rating_image_card_width);
5353
int imageHeight = (int) itemView.getResources().getDimension(R.dimen.rating_image_card_height);
5454
Picasso.with(itemView.getContext()).load(photoUrl).resize(imageWidth, imageHeight).into(topImageCard);

app/src/main/java/io/intrepid/contest/screens/entrysubmission/entryimage/EntryImagePresenter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void onEntrySubmitted() {
8282
}
8383

8484
private void showResult(EntryResponse response) {
85-
if ((response.getEntry() == null) || (response.getEntry().id == null)) {
85+
if ((response.getEntry() == null) || (response.getEntry().getId() == null)) {
8686
Timber.d("Entry was not created.");
8787
getView().showInvalidEntryErrorMessage();
8888
return;

app/src/test/java/io/intrepid/contest/screens/contestjudging/scoreentries/entrieslist/EntriesListPresenterTest.kt

+7-13
Original file line numberDiff line numberDiff line change
@@ -21,39 +21,33 @@ import java.util.*
2121
class EntriesListPresenterTest : BasePresenterTest<EntriesListPresenter>() {
2222
@Mock
2323
private lateinit var mockView: View
24-
@Mock
25-
private lateinit var mockEntries: List<Entry>
26-
@Mock
27-
private lateinit var mockEntry: Entry
28-
@Mock
29-
private lateinit var mockEntryIterator: Iterator<Entry>
24+
25+
private lateinit var entries: List<Entry>
3026

3127
@Before
3228
fun setup() {
29+
entries = mutableListOf(Entry(), Entry())
3330
`when`(mockPersistentSettings.currentContestId).thenReturn(UUID.randomUUID())
34-
`when`(mockView.entries).thenReturn(mockEntries)
35-
`when`(mockEntryIterator.hasNext()).thenReturn(true, true, false)
36-
`when`(mockEntryIterator.next()).thenReturn(mockEntry).thenReturn(mockEntry)
37-
`when`(mockEntries.iterator()).thenReturn(mockEntryIterator)
31+
`when`(mockView.entries).thenReturn(entries)
3832
presenter = EntriesListPresenter(mockView, testConfiguration)
3933
}
4034

4135
@Test
42-
fun onViewCreatedShouldTriggerViewToShowEntriesList() {
36+
fun onViewCreatedShouldTriggerViewToShowEntriesListWhenEntriesAreNotCompletelyRated() {
37+
entries[0].setCategoriesSize(1)
4338
presenter.onViewCreated()
4439
verify<View>(mockView).showEntriesList(false)
4540
}
4641

4742
@Test
4843
fun onViewCreatedShouldShowSubmitButtonWhenEntriesAreCompletelyRated() {
49-
`when`(mockEntry.isCompletelyScored).thenReturn(true)
5044
presenter.onViewCreated()
5145
verify<View>(mockView).showSubmitButton(true)
5246
}
5347

5448
@Test
5549
fun onViewCreatedShouldHideSubmitButtonWhenEntriesAreNotCompletelyRated() {
56-
`when`(mockEntry.isCompletelyScored).thenReturn(false)
50+
entries[0].setCategoriesSize(1)
5751
presenter.onViewCreated()
5852
verify<View>(mockView).showSubmitButton(false)
5953
}

app/src/test/java/io/intrepid/contest/screens/contestjudging/scoreentries/entrydetail/EntryDetailPresenterTest.kt

+29-28
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,18 @@ class EntryDetailPresenterTest : BasePresenterTest<EntryDetailPresenter>() {
1818
@Mock
1919
private lateinit var mockView: View
2020
@Mock
21-
private lateinit var mockEntry: Entry
22-
@Mock
2321
private lateinit var mockBallot: EntryBallot
2422
@Mock
2523
private lateinit var mockCategory: Category
2624

25+
private lateinit var entry: Entry
26+
2727
@Before
2828
fun setup() {
29-
mockEntry.id = UUID.randomUUID()
30-
`when`(mockView.entryToRate).thenReturn(mockEntry)
29+
entry = Entry().apply {
30+
id = UUID.randomUUID()
31+
}
32+
`when`(mockView.entryToRate).thenReturn(entry)
3133
presenter = EntryDetailPresenter(mockView, testConfiguration)
3234
}
3335

@@ -37,26 +39,6 @@ class EntryDetailPresenterTest : BasePresenterTest<EntryDetailPresenter>() {
3739
verify<View>(mockView).showEntries(anyList<Entry>())
3840
}
3941

40-
private fun makeCompletedBallot() {
41-
val completeBallot = EntryBallot(UUID.randomUUID())
42-
`when`(mockView.entryBallot).thenReturn(completeBallot)
43-
completeBallot.addScore(Score(mockCategory, 1))
44-
45-
val completedBallots = ArrayList<EntryBallot>()
46-
completedBallots.add(completeBallot)
47-
`when`(mockView.allBallots).thenReturn(completedBallots)
48-
}
49-
50-
private fun makeIncompleteBallots() {
51-
val incompleteBallot = EntryBallot(UUID.randomUUID()).apply {
52-
addScore(Score(Category("TEST", "TEST"), 0))
53-
addScore(Score(Category("TESTER", "TEST"), 0))
54-
}
55-
56-
`when`(mockView.entryBallot).thenReturn(incompleteBallot)
57-
`when`(mockView.allBallots).thenReturn(listOf(incompleteBallot))
58-
}
59-
6042
@Test
6143
fun onPageSwipedShouldCauseViewToUpdateToolbarTitle() {
6244
`when`(mockView.allEntries).thenReturn(listOf(Entry(), Entry()))
@@ -95,16 +77,35 @@ class EntryDetailPresenterTest : BasePresenterTest<EntryDetailPresenter>() {
9577
}
9678

9779
@Test
98-
fun onPageScrolledShouldCauseViewToSetNextInvisible() {
99-
`when`(mockEntry.isCompletelyScored).thenReturn(false)
80+
fun onPageScrolledShouldCauseViewToSetNextInvisibleWhenEntriesAreNotCompletelyScored() {
81+
entry.setCategoriesSize(1)
10082
presenter.onPageScrolled()
10183
verify<View>(mockView).setNextEnabled(false)
10284
}
10385

10486
@Test
105-
fun onPageScrolledShouldCauseViewToSetNextVisibleWhenBallotIsScored() {
106-
`when`(mockEntry.isCompletelyScored).thenReturn(true)
87+
fun onPageScrolledShouldCauseViewToSetNextVisibleWhenEntriesAreCompletelyScored() {
10788
presenter.onPageScrolled()
10889
verify<View>(mockView).setNextEnabled(true)
10990
}
91+
92+
private fun makeCompletedBallot() {
93+
val completeBallot = EntryBallot(UUID.randomUUID())
94+
`when`(mockView.entryBallot).thenReturn(completeBallot)
95+
completeBallot.addScore(Score(mockCategory, 1))
96+
97+
val completedBallots = ArrayList<EntryBallot>()
98+
completedBallots.add(completeBallot)
99+
`when`(mockView.allBallots).thenReturn(completedBallots)
100+
}
101+
102+
private fun makeIncompleteBallots() {
103+
val incompleteBallot = EntryBallot(UUID.randomUUID()).apply {
104+
addScore(Score(Category("TEST", "TEST"), 0))
105+
addScore(Score(Category("TESTER", "TEST"), 0))
106+
}
107+
108+
`when`(mockView.entryBallot).thenReturn(incompleteBallot)
109+
`when`(mockView.allBallots).thenReturn(listOf(incompleteBallot))
110+
}
110111
}

app/src/test/java/io/intrepid/contest/screens/contestoverview/ContestOverviewPresenterTest.kt

+18-25
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,27 @@
11
package io.intrepid.contest.screens.contestoverview
22

3-
import org.junit.Before
4-
import org.junit.Test
5-
import org.mockito.Mock
6-
7-
import java.util.ArrayList
8-
import java.util.UUID
9-
103
import io.intrepid.contest.R
114
import io.intrepid.contest.models.Category
125
import io.intrepid.contest.models.Contest
13-
import io.intrepid.contest.models.Entry
146
import io.intrepid.contest.models.ScoreWeight
157
import io.intrepid.contest.rest.ContestWrapper
168
import io.intrepid.contest.screens.contestoverview.ContestOverviewContract.View
179
import io.intrepid.contest.testutils.BasePresenterTest
1810
import io.reactivex.Observable
19-
2011
import io.reactivex.Observable.error
21-
import org.mockito.ArgumentMatchers.any
22-
import org.mockito.ArgumentMatchers.anyInt
23-
import org.mockito.ArgumentMatchers.anyList
24-
import org.mockito.Mockito.verify
12+
import org.junit.Before
13+
import org.junit.Test
14+
import org.mockito.ArgumentMatchers.*
15+
import org.mockito.Mock
2516
import org.mockito.Mockito.`when`
17+
import org.mockito.Mockito.verify
18+
import java.util.*
2619

2720
class ContestOverviewPresenterTest : BasePresenterTest<ContestOverviewPresenter>() {
2821
@Mock
2922
private lateinit var mockView: View
30-
@Mock
31-
private lateinit var mockContest: Contest
23+
24+
private var contest: Contest = Contest()
3225

3326
@Before
3427
fun setup() {
@@ -37,15 +30,6 @@ class ContestOverviewPresenterTest : BasePresenterTest<ContestOverviewPresenter>
3730
`when`(mockPersistentSettings.currentContestId).thenReturn(UUID.randomUUID())
3831
}
3932

40-
private fun setupSuccessfulContestDetailsCall() {
41-
val response = ContestWrapper(mockContest)
42-
`when`(mockRestApi.getContestDetails(any<String>())).thenReturn(Observable.just(response))
43-
}
44-
45-
private fun setupFailedContestDetailsCall() {
46-
`when`(mockRestApi.getContestDetails(any<String>())).thenReturn(error<ContestWrapper>(Throwable()))
47-
}
48-
4933
@Test
5034
fun onViewCreatedShouldShowErrorOnContestDetailCallFailure() {
5135
setupFailedContestDetailsCall()
@@ -91,7 +75,6 @@ class ContestOverviewPresenterTest : BasePresenterTest<ContestOverviewPresenter>
9175

9276
@Test
9377
fun onViewCreatedShouldCauseVIewToShowContestTitle() {
94-
`when`<List<Entry>>(mockContest.entries).thenReturn(ArrayList<Entry>())
9578
setupSuccessfulContestDetailsCall()
9679

9780
presenter.onViewCreated()
@@ -133,4 +116,14 @@ class ContestOverviewPresenterTest : BasePresenterTest<ContestOverviewPresenter>
133116
presenter.onBackPressed()
134117
verify<View>(mockView).returnToSplashScreen()
135118
}
119+
120+
private fun setupSuccessfulContestDetailsCall() {
121+
contest.entries = mutableListOf()
122+
val response = ContestWrapper(contest)
123+
`when`(mockRestApi.getContestDetails(any<String>())).thenReturn(Observable.just(response))
124+
}
125+
126+
private fun setupFailedContestDetailsCall() {
127+
`when`(mockRestApi.getContestDetails(any<String>())).thenReturn(error<ContestWrapper>(Throwable()))
128+
}
136129
}

0 commit comments

Comments
 (0)