浏览代码

[FEAT] add implementation to the interface

Adrien Carteron 2 年之前
父节点
当前提交
eca4a73059

+ 0 - 11
src/main/kotlin/re/chasam/models/Tounament.kt

@@ -1,11 +0,0 @@
-package re.chasam.models
-
-import re.chasam.models.impl.Player
-
-interface Tournament {
-    fun getPlayer(name : String) : Player?
-    fun addOrUpdate(player : Player)
-    fun addOrUpdate(name : String, score : Int = 0)
-    fun clean()
-    fun updateRank()
-}

+ 43 - 0
src/main/kotlin/re/chasam/models/Tournament.kt

@@ -0,0 +1,43 @@
+package re.chasam.models
+
+import re.chasam.models.impl.Player
+
+interface Tournament {
+    var players: MutableList<Player>
+    fun getPlayer(name : String) : Player? {
+        val player = Player(name)
+        val index = players.indexOf(player)
+        if (index == -1)
+            return null
+        return players[index]
+    }
+    fun addOrUpdate(player : Player) {
+        val index = players.indexOf(player)
+        println("index: $index")
+        if (index == -1)
+            players.add(player)
+        else
+            players[index] = player
+        println(players)
+
+        updateRank()
+    }
+    fun addOrUpdate(name : String, score : Int = 0) {
+        val player = Player(name, score)
+        addOrUpdate(player)
+    }
+    fun clean() {
+        players.clear()
+    }
+    fun updateRank() {
+        players.sortDescending()
+        var rank = 0
+        var score = 0
+        for (player in players) {
+            if (player.score != score)
+                rank ++
+            player.rank = rank
+            score = player.score
+        }
+    }
+}

+ 7 - 36
src/main/kotlin/re/chasam/models/impl/TournamentImpl.kt

@@ -5,47 +5,18 @@ import re.chasam.connector.impl.Mongo
 import re.chasam.models.Tournament
 
 class TournamentImpl : Tournament, KoinComponent {
-    var players = mutableListOf<Player>()
-    private val mg = Mongo()
+    private var connector = Mongo()
+    override var players: MutableList<Player> = connector.listAll().toMutableList()
+
     init {
-        players = mg.listAll().toMutableList()
         updateRank()
     }
-    override fun getPlayer(name: String) : Player? {
-        val player = Player(name)
-        val index = players.indexOf(player)
-        if (index == -1)
-            return null
-        return players[index]
-    }
     override fun addOrUpdate(player : Player) {
-        val index = players.indexOf(player)
-        println("index: $index")
-        if (index == -1)
-            players.add(player)
-        else
-            players[index] = player
-        println(players)
-        mg.insertOrUpdate(player.name, player.score)
-        updateRank()
-    }
-    override fun addOrUpdate(name : String, score : Int){
-        val player = Player(name, score)
-        addOrUpdate(player)
+        super.addOrUpdate(player)
+        connector.insertOrUpdate(player.name, player.score)
     }
     override fun clean() {
-        players.clear()
-        mg.dropAll()
-    }
-    override fun updateRank() {
-        players.sortDescending()
-        var rank = 0
-        var score = 0
-        for (player in players) {
-            if (player.score != score)
-                rank ++
-            player.rank = rank
-            score = player.score
-        }
+        super.clean()
+        connector.dropAll()
     }
 }

+ 49 - 0
src/test/kotlin/re/chasam/models/TournamentTest.kt

@@ -0,0 +1,49 @@
+package re.chasam.models
+
+import org.junit.Test
+import re.chasam.models.impl.Player
+import kotlin.test.assertEquals
+
+class Tournament4Test(override var players: MutableList<Player>) : Tournament{
+}
+
+class TournamentTest {
+    @Test
+    fun getPlayer() {
+        var tournament = Tournament4Test(mutableListOf(
+            Player("Player 1"),
+            Player("Player 2", 1, 3),
+            Player("Player 3"),
+            Player("Player 4")))
+
+        val player1 = Player("Player 1", 1)
+        val player2 = Player("Player 2",2)
+        val player3 = Player("Player 3",3)
+        val player4 = Player("Player 4", 4)
+
+        assertEquals(player1, tournament.getPlayer("Player 1"))
+        assertEquals(player2, tournament.getPlayer("Player 2"))
+        assertEquals(player3, tournament.getPlayer("Player 3"))
+        assertEquals(player4, tournament.getPlayer("Player 4"))
+
+        tournament.getPlayer("Player 2")?.let { assertEquals(1, it.score) }
+        tournament.getPlayer("Player 2")?.let { assertEquals(3, it.rank) }
+    }
+    @Test
+    fun updateRank() {
+        var tournament = Tournament4Test(mutableListOf(
+            Player("Player 1", 30),
+            Player("Player 2", 10),
+            Player("Player 3",20),
+            Player("Player 4",40),
+            Player("Player 5", 30)))
+
+        tournament.updateRank()
+        println(tournament.players)
+        tournament.getPlayer("Player 1")?.let { assertEquals(2, it.rank) }
+        tournament.getPlayer("Player 2")?.let { assertEquals(4, it.rank) }
+        tournament.getPlayer("Player 3")?.let { assertEquals(3, it.rank) }
+        tournament.getPlayer("Player 4")?.let { assertEquals(1, it.rank) }
+        tournament.getPlayer("Player 5")?.let { assertEquals(2, it.rank) }
+    }
+}