Skip to content

Commit

Permalink
Now the coffeebrewingeventrepository can return the top brewers, sorted.
Browse files Browse the repository at this point in the history
  • Loading branch information
roughike committed Feb 13, 2017
1 parent fe8343c commit 00b50b9
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,30 @@ class CoffeeEventRepositoryTest {
assertThat(coffeeEventRepository.getAccidentCountForUser(user), equalTo(3L))
}

@Test
fun getTopBrewers_ReturnsTopBrewersSorted() {
coffeeEventRepository.recordBrewingEvent()
coffeeEventRepository.recordBrewingEvent()

val brewingMaster = User(id = "abc123")
coffeeEventRepository.recordBrewingEvent(brewingMaster)
coffeeEventRepository.recordBrewingEvent(brewingMaster)
coffeeEventRepository.recordBrewingEvent(brewingMaster)

val brewingApprentice = User(id = "a1b2c3")
coffeeEventRepository.recordBrewingEvent(brewingApprentice)
coffeeEventRepository.recordBrewingEvent(brewingApprentice)

val brewingNoob = User(id = "cba321")
coffeeEventRepository.recordBrewingEvent(brewingNoob)

val sortedBrewers = coffeeEventRepository.getTopBrewers()
assertThat(sortedBrewers.size, equalTo(3))
assertThat(sortedBrewers[0].id, equalTo(brewingMaster.id))
assertThat(sortedBrewers[1].id, equalTo(brewingApprentice.id))
assertThat(sortedBrewers[2].id, equalTo(brewingNoob.id))
}

private fun coffeeEventCount() = with(Realm.getDefaultInstance()) {
val count = where(CoffeeBrewingEvent::class.java)
.equalTo("isSuccessful", true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,26 @@ interface CoffeeEventRepository {

fun getLastBrewingEvent(): CoffeeBrewingEvent?
fun getLastBrewingAccident(): CoffeeBrewingEvent?
fun getTopBrewers(): List<User>
}

class RealmCoffeeEventRepository : CoffeeEventRepository {
override fun getTopBrewers() = with(Realm.getDefaultInstance()) {
val users = where(CoffeeBrewingEvent::class.java)
.isNotNull("user")
.findAll()

val copy = copyFromRealm(users)
.groupBy(CoffeeBrewingEvent::user)
.entries
.sortedByDescending { it.value.size }
.map { it.key }
.filterNotNull()

close()
return@with copy
}

override fun recordBrewingEvent(user: User?) = with(Realm.getDefaultInstance()) {
var event: CoffeeBrewingEvent? = null
executeTransaction {
Expand Down

0 comments on commit 00b50b9

Please sign in to comment.