From 4dce939935bc6439ef100b810564871383375fec Mon Sep 17 00:00:00 2001 From: SebaMutuku Date: Tue, 31 Jan 2023 15:33:19 +0300 Subject: [PATCH] Amendment of gradle wrapper properties --- build.gradle | 6 +- gradle/wrapper/gradle-wrapper.properties | 2 +- p2p-sync/build.gradle | 20 +++- p2p-sync/src/main/AndroidManifest.xml | 3 +- .../p2p/shadows/ShadowConnectionsClient.java | 1 + .../sync/handler/SyncSenderHandlerTest.java | 62 +++++------ sample/build.gradle | 105 ++++++++++++++++-- 7 files changed, 148 insertions(+), 51 deletions(-) diff --git a/build.gradle b/build.gradle index 4f9994f..59eb471 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { maven{ url "https://plugins.gradle.org/m2/" } } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:4.0.2' classpath 'gradle.plugin.org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.12.0' classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.30.0" @@ -42,9 +42,9 @@ ext { version = VERSION_NAME ext.androidToolsBuildGradle = '30.0.3' ext.androidBuildToolsVersion = '30.0.3' - androidMinSdkVersion = 18 + androidMinSdkVersion = 19 androidCompileSdkVersion = 31 - androidTargetSdkVersion = 31 + androidTargetSdkVersion = 29 } ext { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1147304..b19777b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Jan 19 12:26:01 EAT 2023 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/p2p-sync/build.gradle b/p2p-sync/build.gradle index 3ae2d91..ecd514f 100644 --- a/p2p-sync/build.gradle +++ b/p2p-sync/build.gradle @@ -8,6 +8,11 @@ jacoco { } android { + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 + } + compileSdkVersion androidCompileSdkVersion buildToolsVersion androidBuildToolsVersion @@ -40,12 +45,15 @@ android { } } - testOptions.unitTests.includeAndroidResources = true + testOptions { + unitTests { + includeAndroidResources = true + } + } lintOptions { lintConfig file("lint.xml") abortOnError false } - namespace 'org.smartregister.p2p' } dependencies { @@ -68,14 +76,14 @@ dependencies { androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' testImplementation 'org.mockito:mockito-inline:2.25.0' - testImplementation "org.robolectric:robolectric:4.9" + testImplementation "org.robolectric:robolectric:4.3.1" // ZXING DEPENDENCIES - implementation('com.journeyapps:zxing-android-embedded:3.6.0') { + implementation('com.journeyapps:zxing-android-embedded:4.3.0') { exclude group: 'com.android.support', module: 'support-v4' } - implementation 'com.google.zxing:core:3.3.2' - implementation 'com.google.code.gson:gson:2.10' + implementation 'com.google.zxing:core:3.5.1' + implementation 'com.google.code.gson:gson:2.10.1' // Room implementation "android.arch.persistence.room:runtime:$room_version" diff --git a/p2p-sync/src/main/AndroidManifest.xml b/p2p-sync/src/main/AndroidManifest.xml index 14271f5..13e9920 100644 --- a/p2p-sync/src/main/AndroidManifest.xml +++ b/p2p-sync/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ - + diff --git a/p2p-sync/src/test/java/org/smartregister/p2p/shadows/ShadowConnectionsClient.java b/p2p-sync/src/test/java/org/smartregister/p2p/shadows/ShadowConnectionsClient.java index 961381f..9a6397e 100644 --- a/p2p-sync/src/test/java/org/smartregister/p2p/shadows/ShadowConnectionsClient.java +++ b/p2p-sync/src/test/java/org/smartregister/p2p/shadows/ShadowConnectionsClient.java @@ -1,5 +1,6 @@ package org.smartregister.p2p.shadows; + import com.google.android.gms.nearby.connection.ConnectionsClient; import org.robolectric.annotation.Implements; diff --git a/p2p-sync/src/test/java/org/smartregister/p2p/sync/handler/SyncSenderHandlerTest.java b/p2p-sync/src/test/java/org/smartregister/p2p/sync/handler/SyncSenderHandlerTest.java index a51e505..a20a7a9 100644 --- a/p2p-sync/src/test/java/org/smartregister/p2p/sync/handler/SyncSenderHandlerTest.java +++ b/p2p-sync/src/test/java/org/smartregister/p2p/sync/handler/SyncSenderHandlerTest.java @@ -1,5 +1,13 @@ package org.smartregister.p2p.sync.handler; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; + import com.google.android.gms.nearby.connection.Payload; import com.google.android.gms.nearby.connection.PayloadTransferUpdate; @@ -42,12 +50,6 @@ import java.util.Optional; import java.util.TreeSet; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - /** * Created by Ephraim Kigamba - ekigamba@ona.io on 29/03/2019 */ @@ -56,29 +58,25 @@ @Config(shadows = {ShadowAppDatabase.class, ShadowTasker.class, ShadowPayload.class}) public class SyncSenderHandlerTest { + private final DataType event = new DataType("event", DataType.Type.NON_MEDIA, 1); + private final DataType client = new DataType("client", DataType.Type.NON_MEDIA, 2); + private final DataType profilePic = new DataType("profile-pic", DataType.Type.MEDIA, 3); @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - private TestSyncSenderHandler syncSenderHandler; @Mock private P2pModeSelectContract.SenderPresenter senderPresenter; - @Mock private P2PAuthorizationService authorizationService; @Mock private SenderTransferDao senderTransferDao; @Mock private ReceiverTransferDao receiverTransferDao; - private TreeSet dataSyncOrder; - private DataType event = new DataType("event", DataType.Type.NON_MEDIA, 1); - private DataType client = new DataType("client", DataType.Type.NON_MEDIA, 2); - private DataType profilePic = new DataType("profile-pic", DataType.Type.MEDIA, 3); - @Before public void setUp() throws Exception { - P2PLibrary.init(new P2PLibrary.Options(RuntimeEnvironment.application, "some password", "username" + P2PLibrary.init(new P2PLibrary.Options(RuntimeEnvironment.application, "somepassword", "username" , authorizationService, receiverTransferDao, senderTransferDao)); dataSyncOrder = new TreeSet<>(); @@ -155,7 +153,7 @@ public void sendNextManifestShouldCallSendJSONDataManifestWhenNonMediaDataTypeIs syncSenderHandler.sendNextManifest(); Mockito.verify(syncSenderHandler, Mockito.times(1)) - .sendJsonDataManifest(Mockito.any(DataType.class)); + .sendJsonDataManifest(any(DataType.class)); } @Test @@ -170,7 +168,7 @@ public void sendNextManifestShouldCallSendMultimediaDataManifestWhenMediaDataTyp syncSenderHandler.sendNextManifest(); Mockito.verify(syncSenderHandler, Mockito.times(1)) - .sendMultimediaDataManifest(Mockito.any(DataType.class)); + .sendMultimediaDataManifest(any(DataType.class)); } @Test @@ -207,7 +205,7 @@ public void onPayloadTransferUpdateShouldCallSendNextPayloadAndResetFlagsWhenMan .when(syncSenderHandler) .sendNextPayload(); - PayloadTransferUpdate payloadTransferUpdate = Mockito.mock(PayloadTransferUpdate.class); + PayloadTransferUpdate payloadTransferUpdate = mock(PayloadTransferUpdate.class); Mockito.doReturn(payloadId) .when(payloadTransferUpdate) @@ -225,7 +223,7 @@ public void onPayloadTransferUpdateShouldCallSendNextPayloadAndResetFlagsWhenMan .sendNextPayload(); assertFalse((boolean) ReflectionHelpers.getField(syncSenderHandler, "awaitingManifestTransfer")); - assertEquals(Optional.of(0l), ReflectionHelpers.getField(syncSenderHandler, "awaitingManifestId")); + assertEquals(Optional.of(0L), ReflectionHelpers.getField(syncSenderHandler, "awaitingManifestId")); assertNull(ReflectionHelpers.getField(syncSenderHandler, "payloadRetry")); } @@ -238,7 +236,7 @@ public void onPayloadTransferUpdateShouldRetrySendingManifestWhenStatusManifestU .when(syncSenderHandler) .sendNextPayload(); - PayloadTransferUpdate payloadTransferUpdate = Mockito.mock(PayloadTransferUpdate.class); + PayloadTransferUpdate payloadTransferUpdate = mock(PayloadTransferUpdate.class); Mockito.doReturn(payloadId) .when(payloadTransferUpdate) @@ -248,7 +246,7 @@ public void onPayloadTransferUpdateShouldRetrySendingManifestWhenStatusManifestU .when(payloadTransferUpdate) .getStatus(); - SyncPackageManifest syncPackageManifest = Mockito.mock(SyncPackageManifest.class); + SyncPackageManifest syncPackageManifest = mock(SyncPackageManifest.class); ReflectionHelpers.setField(syncSenderHandler, "awaitingManifestTransfer", true); ReflectionHelpers.setField(syncSenderHandler, "awaitingManifestId", payloadId); @@ -271,7 +269,7 @@ public void onPayloadTransferUpdateShouldReportFatalSyncErrorToPresenterWhenMani .when(syncSenderHandler) .sendNextPayload(); - PayloadTransferUpdate payloadTransferUpdate = Mockito.mock(PayloadTransferUpdate.class); + PayloadTransferUpdate payloadTransferUpdate = mock(PayloadTransferUpdate.class); Mockito.doReturn(payloadId) .when(payloadTransferUpdate) @@ -286,7 +284,7 @@ public void onPayloadTransferUpdateShouldReportFatalSyncErrorToPresenterWhenMani syncSenderHandler.onPayloadTransferUpdate(payloadTransferUpdate); Mockito.verify(senderPresenter, Mockito.times(1)) - .errorOccurredSync(Mockito.any(Exception.class)); + .errorOccurredSync(any(Exception.class)); } @Test @@ -297,7 +295,7 @@ public void onProcessStringShouldCallSendNextManifestWhenPayloadStatusUpdateForP .when(syncSenderHandler) .sendNextManifest(); - Payload awaitingPayload = Mockito.mock(Payload.class); + Payload awaitingPayload = mock(Payload.class); Mockito.doReturn(payloadId) .when(awaitingPayload) @@ -330,7 +328,7 @@ public void onPayloadTransferUpdateShouldRetrySendingPayloadWhenPayloadStatusUpd long payloadId = 9; int status = PayloadTransferUpdate.Status.FAILURE; - PayloadTransferUpdate payloadTransferUpdate = Mockito.mock(PayloadTransferUpdate.class); + PayloadTransferUpdate payloadTransferUpdate = mock(PayloadTransferUpdate.class); Mockito.doReturn(payloadId) .when(payloadTransferUpdate) @@ -340,7 +338,7 @@ public void onPayloadTransferUpdateShouldRetrySendingPayloadWhenPayloadStatusUpd .when(payloadTransferUpdate) .getStatus(); - Payload awaitingPayload = Mockito.mock(Payload.class); + Payload awaitingPayload = mock(Payload.class); Mockito.doReturn(payloadId) .when(awaitingPayload) @@ -370,7 +368,7 @@ public void onPayloadTransferUpdateShouldReportFatalErrorToPresenterWhenPayloadS long payloadId = 9; int status = PayloadTransferUpdate.Status.CANCELED; - PayloadTransferUpdate payloadTransferUpdate = Mockito.mock(PayloadTransferUpdate.class); + PayloadTransferUpdate payloadTransferUpdate = mock(PayloadTransferUpdate.class); Mockito.doReturn(payloadId) .when(payloadTransferUpdate) @@ -380,7 +378,7 @@ public void onPayloadTransferUpdateShouldReportFatalErrorToPresenterWhenPayloadS .when(payloadTransferUpdate) .getStatus(); - Payload awaitingPayload = Mockito.mock(Payload.class); + Payload awaitingPayload = mock(Payload.class); Mockito.doReturn(payloadId) .when(awaitingPayload) @@ -391,14 +389,14 @@ public void onPayloadTransferUpdateShouldReportFatalErrorToPresenterWhenPayloadS syncSenderHandler.onPayloadTransferUpdate(payloadTransferUpdate); Mockito.verify(senderPresenter, Mockito.times(1)) - .errorOccurredSync(Mockito.any(Exception.class)); + .errorOccurredSync(any(Exception.class)); } @Test public void sendMultimediaDataManifestShouldCallPresenterSendManifest() { DataType dataType = new DataType("pic", DataType.Type.MEDIA, 5); - File mockFile = Mockito.mock(File.class); + File mockFile = mock(File.class); MultiMediaData multiMediaData = new MultiMediaData(mockFile, 8923); HashMap details = new HashMap<>(); details.put("fileRecordId", "928"); @@ -408,7 +406,7 @@ public void sendMultimediaDataManifestShouldCallPresenterSendManifest() { HashMap remainingLastRecords = ReflectionHelpers.getField(syncSenderHandler, "remainingLastRecordIds"); remainingLastRecords.put("pic", 0L); - Payload payload = Mockito.mock(Payload.class); + Payload payload = mock(Payload.class); Mockito.doReturn(898L) .when(payload) .getId(); @@ -427,7 +425,7 @@ public void sendMultimediaDataManifestShouldCallPresenterSendManifest() { syncSenderHandler.sendMultimediaDataManifest(dataType); Mockito.verify(senderPresenter, Mockito.times(1)) - .sendManifest(Mockito.any(SyncPackageManifest.class)); + .sendManifest(any(SyncPackageManifest.class)); } @Test @@ -435,7 +433,7 @@ public void sendJsonDataManifestShouldCallPresenterSendManifest() { DataType dataType = new DataType("Person", DataType.Type.NON_MEDIA, 5); JsonData multiMediaData = new JsonData(new JSONArray(), 8923); - Payload payload = Mockito.mock(Payload.class); + Payload payload = mock(Payload.class); Mockito.doReturn(898L) .when(payload) .getId(); diff --git a/sample/build.gradle b/sample/build.gradle index 27f157f..0134dfe 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,36 +1,125 @@ -apply plugin: 'com.android.application' +apply plugin: 'com.android.library' +apply plugin: 'jacoco' +apply plugin: 'com.github.kt3k.coveralls' + + +jacoco { + toolVersion = "0.8.2" +} android { compileSdkVersion androidCompileSdkVersion buildToolsVersion androidBuildToolsVersion + defaultPublishConfig !isReleaseBuild() ? "debug" : "release" + defaultConfig { - applicationId "org.smartregister.p2p.sample" minSdkVersion androidMinSdkVersion targetSdkVersion androidTargetSdkVersion versionCode 1 versionName version + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + javaCompileOptions { + annotationProcessorOptions { + arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] + } + } } buildTypes { + + debug { + testCoverageEnabled true + minifyEnabled false + } + release { minifyEnabled false + testCoverageEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } - namespace 'org.smartregister.p2p.sample' + + testOptions.unitTests.includeAndroidResources = true + lintOptions.abortOnError = false } dependencies { - implementation project(":p2p-sync") - implementation 'com.jakewharton.timber:timber:5.0.1' + implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:2.0.4' - testImplementation 'junit:junit:4.13.2' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.google.android.gms:play-services-nearby:16.0.0' + implementation ('com.google.android.gms:play-services-location:16.0.0') { + exclude group: 'com.android.support', module: 'support-v4' + } + + implementation 'com.google.android.gms:play-services-vision:17.0.2' + + implementation 'com.jakewharton.timber:timber:4.7.1' + + testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + testImplementation 'org.mockito:mockito-inline:2.25.0' + testImplementation "org.robolectric:robolectric:4.2" + + // ZXING DEPENDENCIES + implementation('com.journeyapps:zxing-android-embedded:3.6.0') { + exclude group: 'com.android.support', module: 'support-v4' + } + implementation 'com.google.zxing:core:3.3.0' + implementation 'com.google.code.gson:gson:2.8.5' + + // Room + implementation "android.arch.persistence.room:runtime:$room_version" + annotationProcessor "android.arch.persistence.room:compiler:$room_version" + // Room Test helpers + testImplementation "android.arch.persistence.room:testing:$room_version" + + // Encrypted SQLite help + implementation "com.commonsware.cwac:saferoom:1.0.2" - implementation 'com.google.code.gson:gson:2.10' } + +task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) { + + reports { + xml.enabled = true + html.enabled = true + } + + getReports().getXml().setDestination(file("${buildDir}/reports/jacoco/jacocoRootReport/merged.xml")) + getReports().getHtml().setDestination(file("${buildDir}/reports/jacoco/jacocoRootReport/html")) + + def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*', '**/*$ViewBinder*.*'] + def debugTree = fileTree(dir: "$project.buildDir/intermediates/classes/debug", excludes: fileFilter) + def mainSrc = "$project.projectDir/src/main/java" + + getSourceDirectories().setFrom([mainSrc]) + getClassDirectories().setFrom([debugTree]) + getExecutionData().setFrom(dir: project.buildDir, includes: [ + 'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec' + ]) + +} + +tasks.withType(Test) { + jacoco.includeNoLocationClasses = true +} + +coveralls { + jacocoReportPath = "${buildDir}/reports/jacoco/jacocoRootReport/merged.xml" + // Re-add the line below if coveralls still cannot shows "No source file found on the project: "p2p-sync" + // after adding some code files + //sourceDirs += ["src/main/java"] +} + +def isReleaseBuild() { + return version.contains("SNAPSHOT") == false +} + +apply from: '../maven.gradle' \ No newline at end of file