Skip to content

Commit 6d87d2c

Browse files
author
Patrick Jackson
committed
update kotlin, redux, ktor, kotlinx.serialization
1 parent aaaf38d commit 6d87d2c

File tree

19 files changed

+116
-478
lines changed

19 files changed

+116
-478
lines changed

android/build.gradle

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
apply plugin: 'com.android.application'
32

43
apply plugin: 'kotlin-android'
@@ -10,6 +9,10 @@ apply plugin: 'kotlinx-serialization'
109
apply plugin: 'kotlin-kapt'
1110

1211
android {
12+
compileOptions {
13+
targetCompatibility = "8"
14+
sourceCompatibility = "8"
15+
}
1316
compileSdkVersion 28
1417
defaultConfig {
1518
applicationId "com.willowtreeapps.namegame"
@@ -46,9 +49,9 @@ android {
4649

4750
dependencies {
4851
implementation fileTree(dir: 'libs', include: ['*.jar'])
49-
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
52+
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
5053
implementation 'androidx.appcompat:appcompat:1.0.2'
51-
implementation 'com.google.android.material:material:1.1.0-alpha04'
54+
implementation 'com.google.android.material:material:1.1.0-alpha08'
5255
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
5356
implementation "android.arch.navigation:navigation-fragment-ktx:$ktxVersion"
5457
implementation "android.arch.navigation:navigation-ui-ktx:$ktxVersion"
@@ -66,15 +69,16 @@ dependencies {
6669
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
6770
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
6871
implementation project(':common')
69-
implementation 'nl.dionsegijn:konfetti:1.1.2'
72+
implementation 'nl.dionsegijn:konfetti:1.1.3'
7073
implementation "com.russhwolf:multiplatform-settings:$multiplatformSettingsVersion"
7174

72-
kapt 'com.github.bumptech.glide:compiler:4.8.0'
75+
kapt 'com.github.bumptech.glide:compiler:4.9.0'
7376
testImplementation 'junit:junit:4.12'
74-
androidTestImplementation 'androidx.test:runner:1.1.1'
75-
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
77+
testImplementation "io.ktor:ktor-client-serialization-jvm:$ktorVersion"
78+
androidTestImplementation 'androidx.test:runner:1.2.0'
79+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
7680

77-
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha4'
81+
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
7882
implementation 'com.google.firebase:firebase-core:16.0.8'
7983
implementation 'com.google.firebase:firebase-auth:16.2.1'
8084
implementation 'com.firebaseui:firebase-ui-auth:4.3.2'

android/src/test/java/com/willowtreeapps/namegame/ReducersTest.kt

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package com.willowtreeapps.namegame
33
import com.willowtreeapps.common.*
44
import com.willowtreeapps.common.repo.MockRepositoryFactory
55
import com.willowtreeapps.common.repo.ProfileItemRepository
6+
import com.willowtreeapps.common.repo.generateQuestions
7+
import com.willowtreeapps.common.util.takeRandomDistinct
68
import kotlinx.coroutines.runBlocking
79
import org.junit.Assert.*
810
import org.junit.Test
@@ -34,7 +36,7 @@ class ReducersTest {
3436
@Test
3537
fun `generate N distinct random rounds`() {
3638

37-
val itemHolder = runBlocking { ProfileItemRepository(MockRepositoryFactory().success()).fetchItems() }.response
39+
val itemHolder = runBlocking { ProfileItemRepository(MockRepositoryFactory().success()).fetchItems(10) }.response
3840
val rounds = generateQuestions(itemHolder?.items!!, 10)
3941

4042
assertEquals(10, rounds.size)
@@ -43,39 +45,39 @@ class ReducersTest {
4345

4446
@Test
4547
fun `isLoadingProfiles set true`() {
46-
val final = reducer(generateInitialTestState(), Actions.FetchingItemsStartedAction())
48+
val final = reducer(generateInitialTestState(), Actions.FetchingItemsStartedAction()) as AppState
4749

4850
assertTrue(final.isLoadingItems)
4951
}
5052

5153
@Test
5254
fun `isLoadingProfiles set false on success`() {
5355
val initial = generateInitialTestState().copy(isLoadingItems = true)
54-
val final = reducer(initial, Actions.FetchingItemsSuccessAction(runBlocking { ProfileItemRepository(MockRepositoryFactory().success()).fetchItems() }.response!!))
56+
val final = reducer(initial, Actions.FetchingItemsSuccessAction(runBlocking { ProfileItemRepository(MockRepositoryFactory().success()).fetchItems(10) }.response!!)) as AppState
5557

5658
assertFalse(final.isLoadingItems)
5759
}
5860

5961
@Test
6062
fun `isLoadingProfiles set false on failure`() {
6163
val initial = generateInitialTestState().copy(isLoadingItems = true)
62-
val final = reducer(initial, Actions.FetchingItemsFailedAction("Test failure"))
64+
val final = reducer(initial, Actions.FetchingItemsFailedAction("Test failure")) as AppState
6365

6466
assertFalse(final.isLoadingItems)
6567
}
6668

6769
@Test
6870
fun `NextQuestionAction - increments currentRoundIndex`() {
6971
val initial = generateInitialTestState()
70-
val final = reducer(initial, Actions.NextQuestionAction())
72+
val final = reducer(initial, Actions.NextQuestionAction()) as AppState
7173

7274
assertEquals(1, final.currentQuestionIndex)
7375
}
7476

7577
@Test
7678
fun `NextQuestionAction - sets waitingForNextQuestion = false`() {
7779
val initial = generateInitialTestState()
78-
val final = reducer(initial, Actions.NextQuestionAction())
80+
val final = reducer(initial, Actions.NextQuestionAction()) as AppState
7981

8082
assertEquals(false, final.waitingForNextQuestion)
8183
}
@@ -85,7 +87,7 @@ class ReducersTest {
8587
val initial = generateInitialTestState()
8688
val answer = initial.currentQuestionItem().displayName()
8789

88-
val final = reducer(initial, Actions.NamePickedAction(answer))
90+
val final = reducer(initial, Actions.NamePickedAction(answer)) as AppState
8991

9092
assertEquals(Question.Status.CORRECT, final.currentQuestion?.status)
9193
}
@@ -95,7 +97,7 @@ class ReducersTest {
9597
val initial = generateInitialTestState()
9698
val answer = "wrong answer"
9799

98-
val final = reducer(initial, Actions.NamePickedAction(answer))
100+
val final = reducer(initial, Actions.NamePickedAction(answer)) as AppState
99101

100102
assertEquals(Question.Status.INCORRECT, final.currentQuestion?.status)
101103
}
@@ -105,7 +107,7 @@ class ReducersTest {
105107
val initial = staticTestState(stanLee)
106108
val answer = justinTimberlake.displayName()
107109

108-
val final = reducer(initial, Actions.NamePickedAction(answer))
110+
val final = reducer(initial, Actions.NamePickedAction(answer)) as AppState
109111

110112
assertEquals(Question.Status.INCORRECT, final.currentQuestion?.status)
111113
}
@@ -116,7 +118,7 @@ class ReducersTest {
116118
val initial = generateInitialTestState()
117119
val answer = "wrong answer"
118120

119-
val final = reducer(initial, Actions.NamePickedAction(answer))
121+
val final = reducer(initial, Actions.NamePickedAction(answer)) as AppState
120122

121123
assertEquals(null, final.currentQuestion?.answerName)
122124
}
@@ -128,7 +130,7 @@ class ReducersTest {
128130
val initial = staticTestState(stanLee)
129131
val answer = "stan bee"
130132

131-
val final = reducer(initial, Actions.NamePickedAction(answer))
133+
val final = reducer(initial, Actions.NamePickedAction(answer)) as AppState
132134

133135
assertEquals("Stan Lee", final.currentQuestion?.answerName)
134136
}
@@ -140,7 +142,7 @@ class ReducersTest {
140142
val initial = staticTestState(stanLee)
141143
val answer = "stan bee"
142144

143-
val final = reducer(initial, Actions.NamePickedAction(answer))
145+
val final = reducer(initial, Actions.NamePickedAction(answer)) as AppState
144146

145147
assertEquals(Question.Status.CORRECT, final.currentQuestion?.status)
146148
}
@@ -150,7 +152,7 @@ class ReducersTest {
150152
fun `mark current round as TIMES when time is up`() {
151153
val initial = generateInitialTestState()
152154

153-
val final = reducer(initial, Actions.TimesUpAction())
155+
val final = reducer(initial, Actions.TimesUpAction()) as AppState
154156

155157
assertEquals(Question.Status.TIMES_UP, final.currentQuestion?.status)
156158
}
@@ -159,7 +161,7 @@ class ReducersTest {
159161
fun `decrement timer`() {
160162
val initial = generateInitialTestState()
161163

162-
val final = reducer(initial, Actions.DecrementCountDownAction())
164+
val final = reducer(initial, Actions.DecrementCountDownAction()) as AppState
163165

164166
assertEquals(initial.questionClock - 1, final.questionClock)
165167
}
@@ -168,7 +170,7 @@ class ReducersTest {
168170
fun `start question timer with initial value`() {
169171
val initial = generateInitialTestState()
170172

171-
val final = reducer(initial, Actions.StartQuestionTimerAction(10))
173+
val final = reducer(initial, Actions.StartQuestionTimerAction(10)) as AppState
172174

173175
assertEquals(10, final.questionClock)
174176
}
@@ -177,7 +179,7 @@ class ReducersTest {
177179
fun `ChangeNumQuestionsAction should update AppState`() {
178180
val initial = generateInitialTestState()
179181

180-
val final = reducer(initial, Actions.ChangeNumQuestionsSettingsAction(10))
182+
val final = reducer(initial, Actions.ChangeNumQuestionsSettingsAction(10)) as AppState
181183

182184
assertEquals(10, final.settings.numQuestions)
183185
}
@@ -186,7 +188,7 @@ class ReducersTest {
186188
fun `ChangeMicrophoneModeAction should update settings`() {
187189
val initial = generateInitialTestState()
188190

189-
val final = reducer(initial, Actions.ChangeMicrophoneModeSettingsAction(true))
191+
val final = reducer(initial, Actions.ChangeMicrophoneModeSettingsAction(true)) as AppState
190192

191193
assertEquals(true, final.settings.microphoneMode)
192194
}
@@ -195,7 +197,7 @@ class ReducersTest {
195197
fun `WillowTreeSignInSuccess should update is state`() {
196198
val initial = generateInitialTestState()
197199

198-
val final = reducer(initial, Actions.WillowTreeSignInSuccessAction())
200+
val final = reducer(initial, Actions.WillowTreeSignInSuccessAction()) as AppState
199201

200202
assertEquals(true, final.settings.isWillowTree)
201203
}
@@ -205,20 +207,20 @@ class ReducersTest {
205207
var initial = generateInitialTestState()
206208
initial = initial.copy(settings = initial.settings.copy(isWillowTree = true))
207209

208-
val final = reducer(initial, Actions.WillowTreeSignOutSuccessAction())
210+
val final = reducer(initial, Actions.WillowTreeSignOutSuccessAction()) as AppState
209211

210212
assertEquals(false, final.settings.isWillowTree)
211213
}
212214

213215
private fun generateInitialTestState(): AppState {
214-
val initialState = reducer(AppState(), Actions.FetchingItemsSuccessAction(runBlocking { ProfileItemRepository(MockRepositoryFactory().success()).fetchItems() }.response!!))
216+
val initialState = reducer(AppState(), Actions.FetchingItemsSuccessAction(runBlocking { ProfileItemRepository(MockRepositoryFactory().success()).fetchItems(10) }.response!!)) as AppState
215217
return initialState
216218
}
217219

218-
val justinTimberlake = Item(ItemId("0"), "", "Justin", "Timberlake")
219-
val bobEvans = Item(ItemId("1"), "", "Bob", "Evans")
220-
val stanLee = Item(ItemId("2"), "", "Stan", "Lee")
221-
val lukeSkywalker = Item(ItemId("3"), "", "Luke", "Skywalker")
220+
private val justinTimberlake = Item(ItemId("0"), "", "Justin", "Timberlake")
221+
private val bobEvans = Item(ItemId("1"), "", "Bob", "Evans")
222+
private val stanLee = Item(ItemId("2"), "", "Stan", "Lee")
223+
private val lukeSkywalker = Item(ItemId("3"), "", "Luke", "Skywalker")
222224

223225
fun staticTestState(correctAnswer: Item): AppState {
224226

build.gradle

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Top-level build file where you can add configuration options common to all sub-projects/modules.
22

33
buildscript {
4-
ext.kotlinVersion = '1.3.40-eap-21'
4+
ext.kotlinVersion = '1.3.41'
55
repositories {
66
google()
77
jcenter()
@@ -10,10 +10,10 @@ buildscript {
1010
maven { url 'https://dl.bintray.com/jetbrains/kotlin-native-dependencies' }
1111
}
1212
dependencies {
13-
classpath 'com.android.tools.build:gradle:3.5.0-beta01'
13+
classpath 'com.android.tools.build:gradle:3.5.0-rc01'
1414
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
1515
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlinVersion"
16-
classpath 'com.google.gms:google-services:4.2.0'
16+
classpath 'com.google.gms:google-services:4.3.0'
1717
// NOTE: Do not place your application dependencies here; they belong
1818
// in the individual module build.gradle files
1919
}
@@ -38,12 +38,11 @@ task clean(type: Delete) {
3838
}
3939

4040
ext {
41-
4241
coroutinesVersion = '1.2.0'
43-
glideVersion = '4.8.0'
42+
glideVersion = '4.9.0'
4443
stethoVersion = '1.5.0'
4544
ktxVersion = '1.0.0'
46-
ktorVersion = '1.1.4'
47-
serializationVersion = '0.10.0'
48-
multiplatformSettingsVersion = '0.3'
45+
ktorVersion = '1.2.2'
46+
serializationVersion = '0.11.1'
47+
multiplatformSettingsVersion = '0.3.2'
4948
}

common/build.gradle

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,23 @@ kotlin {
3333
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:$serializationVersion"
3434
implementation "io.ktor:ktor-client-logging:$ktorVersion"
3535
implementation "com.russhwolf:multiplatform-settings:$multiplatformSettingsVersion"
36-
implementation "com.willowtreeapps:fuzzywuzzy-kotlin:0.1.1"
37-
implementation "org.reduxkotlin:redux-kotlin:0.2.2"
38-
implementation "org.reduxkotlin:redux-kotlin-thunk:0.2.3"
36+
implementation "com.willowtreeapps:fuzzywuzzy-kotlin:0.2.1"
37+
implementation "org.reduxkotlin:redux-kotlin:0.2.4"
38+
implementation "org.reduxkotlin:redux-kotlin-thunk:0.2.5"
39+
implementation "org.reduxkotlin:redux-kotlin-reselect:0.2.5"
3940

4041

4142
implementation "io.ktor:ktor-client-core:$ktorVersion"
4243
implementation "io.ktor:ktor-client-json:$ktorVersion"
44+
implementation "io.ktor:ktor-client-serialization:$ktorVersion"
4345

4446
}
4547
}
4648
commonTest {
4749
dependencies {
4850
implementation "org.jetbrains.kotlin:kotlin-test-common"
4951
implementation "org.jetbrains.kotlin:kotlin-test-annotations-common"
52+
implementation "io.ktor:ktor-client-serialization:$ktorVersion"
5053
}
5154
}
5255
androidMain {
@@ -59,8 +62,10 @@ kotlin {
5962
implementation "io.ktor:ktor-client-core-jvm:$ktorVersion"
6063
implementation "io.ktor:ktor-client-json-jvm:$ktorVersion"
6164
implementation "io.ktor:ktor-client-logging-jvm:$ktorVersion"
65+
implementation "io.ktor:ktor-client-serialization-jvm:$ktorVersion"
6266
}
6367
}
68+
6469
jvmMain {
6570
dependencies {
6671
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
@@ -71,12 +76,14 @@ kotlin {
7176
implementation "io.ktor:ktor-client-core-jvm:$ktorVersion"
7277
implementation "io.ktor:ktor-client-json-jvm:$ktorVersion"
7378
implementation "io.ktor:ktor-client-logging-jvm:$ktorVersion"
79+
implementation "io.ktor:ktor-client-serialization-jvm:$ktorVersion"
7480
}
7581
}
7682
jvmTest {
7783
dependencies {
7884
implementation 'org.jetbrains.kotlin:kotlin-test'
7985
implementation 'org.jetbrains.kotlin:kotlin-test-junit'
86+
implementation "io.ktor:ktor-client-serialization-jvm:$ktorVersion"
8087
}
8188
}
8289

@@ -85,15 +92,18 @@ kotlin {
8592
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:$coroutinesVersion"
8693
implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:$serializationVersion"
8794
implementation "io.ktor:ktor-client-logging-native:$ktorVersion"
95+
implementation "org.reduxkotlin:redux-kotlin-reselect-iossim:0.2.4"
8896

8997
implementation "io.ktor:ktor-client-ios:$ktorVersion"
9098
implementation "io.ktor:ktor-client-core-native:$ktorVersion"
9199
implementation "io.ktor:ktor-client-json-native:$ktorVersion"
100+
implementation "io.ktor:ktor-client-serialization-native:$ktorVersion"
92101
}
93102
}
94103
}
95104
}
96105

106+
97107
android {
98108
compileSdkVersion 28
99109
defaultConfig {

0 commit comments

Comments
 (0)