diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d744bdd14..806288a1a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,39 +10,14 @@ on: workflow_dispatch: jobs: - build: - name: Pre-build - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: fkirc/skip-duplicate-actions@master - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 - - uses: actions/setup-java@v1 - with: - java-version: 11 - - uses: actions/cache@v2 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }} - - name: Build - run: ./gradlew --build-cache compileFdroidDebugUnitTestKotlin preFdroidDebugAndroidTestBuild dexBuilderFdroidDebugAndroidTest packageFdroidDebug packageFdroidDebugAndroidTest - - name: Prepare build cache - run: tar -cf prebuild.tar .build-cache .gradle app/build - - uses: actions/upload-artifact@v2 - with: - name: prebuild.tar - path: prebuild.tar - unit-tests: name: Unit tests runs-on: ubuntu-latest timeout-minutes: 10 - needs: [ build ] steps: + - uses: fkirc/skip-duplicate-actions@master - uses: actions/checkout@v2 + - uses: gradle/wrapper-validation-action@v1 - uses: actions/setup-java@v1 with: java-version: 11 @@ -52,11 +27,6 @@ jobs: ~/.gradle/caches ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }} - - uses: actions/download-artifact@v2 - with: - name: prebuild.tar - - name: Extract build cache - run: tar -xf prebuild.tar - name: Unit tests run: | ./gradlew --build-cache -Pcoverage testFdroidDebugUnitTest --stacktrace @@ -65,49 +35,12 @@ jobs: with: flags: unit - instrumentation-tests: - name: Instrumentation tests - runs-on: macOS-latest - timeout-minutes: 15 - needs: [ build ] - strategy: - fail-fast: true - matrix: - api-level: [21, 29] - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 - with: - java-version: 11 - - uses: actions/cache@v2 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }} - - uses: actions/download-artifact@v2 - with: - name: prebuild.tar - - name: Extract build cache - run: tar -xf prebuild.tar - - name: Instrumentation tests - uses: reactivecircus/android-emulator-runner@v2 - with: - api-level: ${{ matrix.api-level }} - arch: x86 - script: | - ./gradlew --build-cache -Pcoverage connectedFdroidDebugAndroidTest --stacktrace - ./gradlew --build-cache -Pcoverage jacocoTestReport --stacktrace - - uses: codecov/codecov-action@v1 - with: - flags: instrumented,api-${{ matrix.api-level }} - deploy-google-play: name: Deploy to google play runs-on: ubuntu-latest timeout-minutes: 10 environment: google-play - needs: [ build, unit-tests, instrumentation-tests ] + needs: [ unit-tests ] if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') steps: - uses: actions/checkout@v2 @@ -120,11 +53,6 @@ jobs: ~/.gradle/caches ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }} - - uses: actions/download-artifact@v2 - with: - name: prebuild.tar - - name: Extract build cache - run: tar -xf prebuild.tar - name: Decrypt keys env: ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }} diff --git a/app/build.gradle b/app/build.gradle index c2869305a..dfbc26b2a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,7 +41,8 @@ android { } sourceSets { - androidTest.assets.srcDirs += files("$projectDir/schemas".toString()) + // https://github.com/robolectric/robolectric/issues/3928#issuecomment-395309991 + debug.assets.srcDirs += files("$projectDir/schemas".toString()) } signingConfigs { @@ -103,6 +104,10 @@ android { disable 'HardwareIds' } + testOptions.unitTests { + includeAndroidResources = true + } + compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 @@ -220,11 +225,18 @@ dependencies { testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.2' testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version" + testImplementation 'org.robolectric:robolectric:4.5.1' + testImplementation "androidx.test:runner:1.3.0" + testImplementation "androidx.test.ext:junit:1.1.2" + testImplementation "androidx.test:core:1.3.0" + testImplementation "androidx.room:room-testing:$room" + testImplementation "com.google.dagger:hilt-android-testing:$hilt_version" + kaptTest "com.google.dagger:hilt-android-compiler:$hilt_version" + androidTestImplementation "androidx.test:core:1.3.0" androidTestImplementation "androidx.test:runner:1.3.0" androidTestImplementation "androidx.test.ext:junit:1.1.2" androidTestImplementation "io.mockk:mockk-android:$mockk" - androidTestImplementation "androidx.room:room-testing:$room" androidTestImplementation "org.jetbrains.kotlin:kotlin-test:$kotlin_version" } diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt similarity index 100% rename from app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt rename to app/src/test/java/io/github/wulkanowy/data/db/migrations/AbstractMigrationTest.kt diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt similarity index 92% rename from app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt rename to app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt index b312048d5..a02904733 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration12Test.kt @@ -2,14 +2,20 @@ package io.github.wulkanowy.data.db.migrations import android.content.ContentValues import android.database.sqlite.SQLiteDatabase.CONFLICT_FAIL +import android.os.Build import androidx.sqlite.db.SupportSQLiteDatabase -import androidx.test.ext.junit.runners.AndroidJUnit4 +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication import kotlinx.coroutines.runBlocking import org.junit.Test import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config import kotlin.test.assertEquals -@RunWith(AndroidJUnit4::class) +@HiltAndroidTest +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [Build.VERSION_CODES.O_MR1], application = HiltTestApplication::class) class Migration12Test : AbstractMigrationTest() { @Test diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt similarity index 95% rename from app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt rename to app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt index 15e99f5f9..2350da459 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration13Test.kt @@ -2,17 +2,26 @@ package io.github.wulkanowy.data.db.migrations import android.content.ContentValues import android.database.sqlite.SQLiteDatabase +import android.os.Build import androidx.sqlite.db.SupportSQLiteDatabase +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication import io.github.wulkanowy.data.db.Converters import io.github.wulkanowy.data.db.entities.Semester import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config import java.time.LocalDate.of import kotlin.test.assertFalse import kotlin.test.assertTrue +@HiltAndroidTest +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [Build.VERSION_CODES.O_MR1], application = HiltTestApplication::class) class Migration13Test : AbstractMigrationTest() { @Test diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt similarity index 91% rename from app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt rename to app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt index 759552589..8e744f27a 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration27Test.kt @@ -2,12 +2,21 @@ package io.github.wulkanowy.data.db.migrations import android.content.ContentValues import android.database.sqlite.SQLiteDatabase +import android.os.Build import androidx.sqlite.db.SupportSQLiteDatabase +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication import kotlinx.coroutines.runBlocking import org.junit.Assert.assertEquals import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config import kotlin.random.Random +@HiltAndroidTest +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [Build.VERSION_CODES.O_MR1], application = HiltTestApplication::class) class Migration27Test : AbstractMigrationTest() { @Test diff --git a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt similarity index 83% rename from app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt rename to app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt index 0757cf927..883cdb81c 100644 --- a/app/src/androidTest/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt +++ b/app/src/test/java/io/github/wulkanowy/data/db/migrations/Migration35Test.kt @@ -2,14 +2,23 @@ package io.github.wulkanowy.data.db.migrations import android.content.ContentValues import android.database.sqlite.SQLiteDatabase +import android.os.Build import androidx.sqlite.db.SupportSQLiteDatabase +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication import io.github.wulkanowy.utils.AppInfo import kotlinx.coroutines.runBlocking import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config import kotlin.random.Random import kotlin.test.assertEquals import kotlin.test.assertTrue +@HiltAndroidTest +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [Build.VERSION_CODES.O_MR1], application = HiltTestApplication::class) class Migration35Test : AbstractMigrationTest() { @Test @@ -17,6 +26,7 @@ class Migration35Test : AbstractMigrationTest() { with(helper.createDatabase(dbName, 34)) { createStudent(this, 1) createStudent(this, 2) + close() } helper.runMigrationsAndValidate(dbName, 35, true, Migration35(AppInfo())) @@ -57,4 +67,4 @@ class Migration35Test : AbstractMigrationTest() { put("nick", "") }) } -} \ No newline at end of file +}