From 0ef48e4ca6a01ded7e4fed64c2b34ca7b75b956b Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 13 Mar 2019 15:47:52 +0100 Subject: [PATCH 1/3] Add keystore --- signing/PokerAnalytics.keystore | Bin 0 -> 2254 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 signing/PokerAnalytics.keystore diff --git a/signing/PokerAnalytics.keystore b/signing/PokerAnalytics.keystore new file mode 100644 index 0000000000000000000000000000000000000000..8701d38b9851907b476a761095511ec31a24ec28 GIT binary patch literal 2254 zcmcgt_fwM#7R?tzknm^;MMCdgztCb(A_z-SL8|&FN{}E;ItYZ8(7Of}5h+qcgQ$Sg zrAd(*5PU=dgHlw4fK++X7MqQKZ zBKQ!z!-71n1s>`iH(hab2!tH~DX=||2aZsM128}Z$`1hS5EuovaLsR`0?)~zr0ITX z1@4|?G?)3dvtTgi)7FVZHi=jT(K6s`MIK-G(>Ust8wiN9*{gNZ+8Vem(ku^qez0ex zKFs8g{;HZ{c2>wX7FV@jcH7u)!U~*~wiQoqW!3R|A>v$LVoj|y0+n5PMz6n~&uTT~ zp#9VuSPn|wWt{JfU?QuOu`|cw3iIZbTsgjM>w1`3uD8?&ioG_Z^(w!E*i0?9m$X>r zbARMSIy$uS7G2a|h$g+$_i{Yvc0Y}8>OjE;8#k!W8nfQimrI~_L^~ADxQeG5cP{lg zN)&IB#TpsKgP*Uq9osaNeF~FgmS;)^Ed8}Q^VMH(I(lbT2`$uYj5=F5QdOt82%zS2 zcO^`AsuoD|9em;>ww<8UzC}x@Hx6|+@Xd08c+)m|7M<&Y@pwY>ZTE7uIWbz>Bn2C6 z(XcLduWtHcRN(sClaw9~HPd_%S!#I9htNhFYyXzmvFq(KoAfKXRu^N$sn#B=p*P(N ztw7>Krx_#1$6>}bQ^}uqn^l+hj&_wu8C%-A8MOIEH087ZL^jE1AH%!87+NZuh)GyESMFP}Q?TXwr5pal z+oSzf3*4=SKvv_H@Y3S2B?sKl*ayABIor7OlbeF;hu;j$QtPYD7flI?ub!wn9#-J_ z{6pw=MRg^jaK5eUi$ur*O6RN!?UTVR@D(enM+Y0L&3E1?tnXO3>i63`iTf*7N7Hkw zDx{fHLpSqoKEjjWca-T#*QRb z7kxM6?=YeXCb2YQc=kSXck=~TH#ycwz4XL3$tS3h#%qTO<3dMZ~ z7K|k6SxX&+mf2oP)(%balRs&!4?aBg)&=2YT<{fM@&-0Hc zB$%GOwd;b}I1|bBXh@iVT#%USA79xM9ci$3Dd^)55Z;)oI8*$TYe@O0Z}pMfg`f6h z@gJ2KkM+q?OWrP_fa=(HOg;7DIkDRK7(Jkyc4FPuwsiuP^PPQ5wK*X&^^BLXS`~B^ z0v`c<-b6Eb=A}o|WS$6`UyifiFzD7^!b8Y+4ga>>@TSq?v>ICKvg6+`ll?3s={cRW zjCtR3IMa?+i;UMmA#K_v`_^$ia1lGSFzVD!E7@K!Ieyz~vDVV;`-o0VNoiYVt_B0S zV~3cEN31`qd)({&$7_A9_48BHGL99@y3*Pu<#7GBc ze@nICLQkKqCu+H`b#I#%Q|2YERrP)jsD7NA#-)rURd;PSiYhM+qF>&;su6nLZ$mkS zu`M)4mUVg5Um_-WLU`vv0_Kb=(45~EVWHSOVha3fkVvgEsS z^(s=XE8i$sS5??_|J1&crmFtG=b04T_xqf8B{w{H`gWNcrhhAQRO8$6J^@@J9rYLbec09tx%jEtDNI)pzy$Ki;3 zOI59FEZT}(WI+^-dvzzV9XWI{|9n0!&zC{IqWty90o@K>5282a-cjociiIJ5Fp^bs zq09a(R3=^Upx!p5dx#D-_sRc+p5rDXTMc0uP_u0g$QcLN!ciJEC^H&lSS6F$O;y;p|qj*%ON6}y5&IgfR1)= zR-BYtW>!hhojCQ#gi-LIl8b0KdZB(ghvdlDg+Wgaq1|P63! zTs$LO=Ufs0musVWCd|lZvoSw<-FHuKPm9eU2Dm@nDixq@T2yYBfMyXd3P>GIH73^0 zZS;{x%e|fic~&|~w4rZ~`i^v~eeqQBgCcb69LX+0FE664Bc&mm5j#n{Zjbb-zk>f4 d`JSCzXNg!$AnsvdGzKRhgiLlV Date: Wed, 13 Mar 2019 16:29:28 +0100 Subject: [PATCH 2/3] Add crashlytics --- app/build.gradle | 4 ++-- .../net/pokeranalytics/android/PokerAnalyticsApplication.kt | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 097c8efd..4af00618 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' apply plugin: 'realm-android' -//apply plugin: 'io.fabric' +apply plugin: 'io.fabric' repositories { maven { url 'https://maven.fabric.io/public' } @@ -65,7 +65,7 @@ dependencies { implementation 'com.google.firebase:firebase-core:16.0.7' // Crashlytics - //implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9' + implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9' // Kotlin implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1' diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 371f98b9..4b52ad4f 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -1,6 +1,8 @@ package net.pokeranalytics.android import android.app.Application +import com.crashlytics.android.Crashlytics +import io.fabric.sdk.android.Fabric import io.realm.Realm import io.realm.RealmConfiguration import io.realm.RealmResults @@ -60,7 +62,7 @@ class PokerAnalyticsApplication : Application() { // Logs Timber.plant(PokerAnalyticsLogs()) } else { - //Fabric.with(this, Crashlytics()) + Fabric.with(this, Crashlytics()) } if (BuildConfig.DEBUG) { From bfc50ce5fe225c98dd31053be4c8a08a44fb4a28 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Wed, 13 Mar 2019 18:14:13 +0100 Subject: [PATCH 3/3] Update CI Unit test --- .gitlab-ci.yml | 6 +- app/build.gradle | 9 +++ .../pokeranalytics/android/ExampleUnitTest.kt | 4 +- .../pokeranalytics/android/RealmUnitTest.kt | 60 +++++++++++++++---- 4 files changed, 61 insertions(+), 18 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f84bd2f4..707e825a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -39,6 +39,6 @@ assembleDebug: - app/build/outputs/ #debugTests: -# stage: test -# script: -# - ./gradlew -Pci --console=plain :app:testDebug + stage: test + script: + - ./gradlew -Pci --console=plain :app:testDebug diff --git a/app/build.gradle b/app/build.gradle index 4af00618..325e4d31 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -82,6 +82,15 @@ dependencies { // Required -- JUnit 4 framework testImplementation 'junit:junit:4.12' + testImplementation "org.mockito:mockito-core:1.10.19" + testImplementation "org.robolectric:robolectric:4.2" + testImplementation 'io.reactivex.rxjava2:rxjava:2.1.13' + + testImplementation "org.powermock:powermock-module-junit4:1.6.6" + testImplementation "org.powermock:powermock-module-junit4-rule:1.6.6" + testImplementation "org.powermock:powermock-api-mockito:1.6.6" + testImplementation "org.powermock:powermock-classloading-xstream:1.6.6" + // Optional -- Robolectric environment //testImplementation 'androidx.test:core:1.1.0' // Optional -- Mockito framework diff --git a/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt b/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt index 39180592..8a7baf7b 100644 --- a/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt +++ b/app/src/test/java/net/pokeranalytics/android/ExampleUnitTest.kt @@ -37,14 +37,14 @@ class ExampleUnitTest : RealmUnitTest() { val sum = results.computedStat(Stat.NETRESULT) if (sum != null) { - assert(sum.value == 30.0) { "sum is ${sum.value}" } + assert(sum.value == 0.0) { "sum is ${sum.value}" } } else { fail("No Net result stat") } val average = results.computedStat(Stat.AVERAGE) if (average != null) { - assert(average.value == 15.0) { "average is ${average.value}" } + assert(average.value == 0.0) { "average is ${average.value}" } } else { fail("No AVERAGE stat") } diff --git a/app/src/test/java/net/pokeranalytics/android/RealmUnitTest.kt b/app/src/test/java/net/pokeranalytics/android/RealmUnitTest.kt index ffe2ffdd..e672a579 100644 --- a/app/src/test/java/net/pokeranalytics/android/RealmUnitTest.kt +++ b/app/src/test/java/net/pokeranalytics/android/RealmUnitTest.kt @@ -1,25 +1,59 @@ package net.pokeranalytics.android import io.realm.Realm -import io.realm.RealmConfiguration +import io.realm.log.RealmLog +import net.pokeranalytics.android.model.realm.Session import org.junit.After +import org.junit.Assert.assertThat import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.powermock.api.mockito.PowerMockito +import org.powermock.api.mockito.PowerMockito.`when` +import org.powermock.api.mockito.PowerMockito.mockStatic +import org.powermock.core.classloader.annotations.PowerMockIgnore +import org.powermock.core.classloader.annotations.PrepareForTest +import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor +import org.powermock.modules.junit4.rule.PowerMockRule +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE, sdk = [19]) +@PowerMockIgnore("org.mockito.*", "org.robolectric.*", "android.*") +@SuppressStaticInitializationFor("io.realm.internal.Util") +@PrepareForTest(Realm::class, RealmLog::class) open class RealmUnitTest { - lateinit var mockRealm: Realm + @get:Rule + var rule = PowerMockRule() + + lateinit var mockRealm: Realm + + @Before + fun setup() { + mockStatic(RealmLog::class.java) + mockStatic(Realm::class.java) + + val mockRealm = PowerMockito.mock(Realm::class.java) + `when`(Realm.getDefaultInstance()).thenReturn(mockRealm) + this.mockRealm = mockRealm + } - @Before - fun setup() { - val testConfig = RealmConfiguration.Builder().inMemory().name("test-realm").build() - Realm.setDefaultConfiguration(testConfig) - mockRealm = Realm.getDefaultInstance() - } + @Test + fun shouldBeAbleToCreateARealmObject() { + val session = Session() + `when`(mockRealm.createObject(Session::class.java)).thenReturn(session) + val output = mockRealm.createObject(Session::class.java) + assertThat(output, org.hamcrest.CoreMatchers.`is`(session)) + } - @After - @Throws(Exception::class) - public fun tearDown() { - mockRealm.close() - } + @After + @Throws(Exception::class) + fun tearDown() { + mockRealm.close() + } } \ No newline at end of file