Skip to content

Commit 467cba5

Browse files
committed
test: replace Gmail with Mailpit
1 parent f35b8e2 commit 467cba5

15 files changed

Lines changed: 63 additions & 234 deletions

File tree

.github/workflows/ci.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,10 @@ jobs:
100100
TEST_DV_PROJECT_URL: ${{ vars.TEST_DV_PROJECT_URL }}
101101
TEST_ECV_PROJECT_ID: ${{ vars.TEST_ECV_PROJECT_ID }}
102102
TEST_ECV_PROJECT_URL: ${{ vars.TEST_ECV_PROJECT_URL }}
103-
GMAIL_CREDENTIALS: ${{ secrets.GMAIL_CREDENTIALS }}
104-
GMAIL_TOKEN: ${{ secrets.GMAIL_TOKEN }}
103+
TEST_MAILPIT_URL: ${{ secrets.TEST_MAILPIT_URL }}
104+
TEST_MAILPIT_USER: ${{ secrets.TEST_MAILPIT_USER }}
105+
TEST_MAILPIT_PASS: ${{ secrets.TEST_MAILPIT_PASS }}
106+
TEST_MAILPIT_EMAIL_ADDRESS: ${{ secrets.TEST_MAILPIT_EMAIL_ADDRESS }}
105107
with:
106108
api-level: 35
107109
arch: "x86_64"

miracl-sdk/build.gradle

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ android {
7979

8080
buildConfigField "String", "ECV_PROJECT_ID", "\"${project.getProperties().get('miracltrust.ecvProjectId')}\""
8181
buildConfigField "String", "ECV_PROJECT_URL", "\"${project.getProperties().get('miracltrust.ecvProjectUrl')}\""
82+
83+
buildConfigField "String", "MAILPIT_URL", "\"${project.getProperties().get('mailpit.url')}\""
84+
buildConfigField "String", "MAILPIT_USER", "\"${project.getProperties().get('mailpit.user')}\""
85+
buildConfigField "String", "MAILPIT_PASS", "\"${project.getProperties().get('mailpit.pass')}\""
86+
buildConfigField "String", "MAILPIT_EMAIL_ADDRESS", "\"${project.getProperties().get('mailpit.emailAddress')}\""
8287
}
8388
}
8489

@@ -154,8 +159,6 @@ dependencies {
154159
androidTestRuntimeOnly(libs.jjwt.orgjson) {
155160
exclude(group: 'org.json', module: 'json') // Provided by Android natively
156161
}
157-
158-
androidTestImplementation project(':utilities')
159162
}
160163

161164
apiValidation {

miracl-sdk/gradle.properties

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,9 @@ miracltrust.dvProjectId=
66
miracltrust.dvProjectUrl=
77

88
miracltrust.ecvProjectId=
9-
miracltrust.ecvProjectUrl=
9+
miracltrust.ecvProjectUrl=
10+
11+
mailpit.url=
12+
mailpit.user=
13+
mailpit.pass=
14+
mailpit.emailAddress=

miracl-sdk/src/androidTest/java/com/miracl/trust/MIRACLTrustJavaTest.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33

44
import static com.miracl.trust.utilities.UtilitiesKt.USER_ID;
55
import static com.miracl.trust.utilities.UtilitiesKt.USER_PIN_LENGTH;
6+
import static com.miracl.trust.utilities.UtilitiesKt.createMailpitUserId;
67
import static com.miracl.trust.utilities.UtilitiesKt.getUnixTime;
78
import static com.miracl.trust.utilities.UtilitiesKt.randomHash;
89
import static com.miracl.trust.utilities.UtilitiesKt.randomNumericPin;
910

10-
import android.content.Context;
1111
import android.net.Uri;
1212

1313
import androidx.test.platform.app.InstrumentationRegistry;
@@ -31,9 +31,9 @@
3131
import com.miracl.trust.signing.SigningException;
3232
import com.miracl.trust.signing.SigningResult;
3333
import com.miracl.trust.storage.UserStorageException;
34-
import com.miracl.trust.utilities.GmailService;
3534
import com.miracl.trust.utilities.JwtHelper;
3635
import com.miracl.trust.utilities.MIRACLService;
36+
import com.miracl.trust.utilities.MailpitService;
3737
import com.miracl.trust.utilities.VerifySignatureResponse;
3838

3939
import org.junit.Assert;
@@ -78,21 +78,21 @@ public void testDefaultVerification() throws ConfigurationException {
7878
miraclTrust.updateProjectSettings(BuildConfig.DV_PROJECT_ID, BuildConfig.DV_PROJECT_URL);
7979

8080
long timestamp = getUnixTime();
81-
miraclTrust.sendVerificationEmail(USER_ID, result -> {
81+
String userId = createMailpitUserId();
82+
miraclTrust.sendVerificationEmail(userId, result -> {
8283
Assert.assertTrue(result instanceof MIRACLSuccess);
8384

84-
Context context = InstrumentationRegistry.getInstrumentation().getContext();
85-
String verificationUrl = GmailService.INSTANCE.getVerificationUrl(context, USER_ID, USER_ID, timestamp);
85+
String verificationUrl = MailpitService.INSTANCE.getVerificationUrl(userId, timestamp);
8686
Assert.assertNotNull(verificationUrl);
8787

8888
miraclTrust.getActivationToken(
8989
Uri.parse(verificationUrl),
9090
activationTokenResult -> {
9191
Assert.assertTrue(activationTokenResult instanceof MIRACLSuccess);
9292

93-
String userId = ((MIRACLSuccess<ActivationTokenResponse, ActivationTokenException>)
94-
activationTokenResult).getValue().getUserId();
95-
Assert.assertEquals(USER_ID, userId);
93+
ActivationTokenResponse activationTokenResponse =
94+
((MIRACLSuccess<ActivationTokenResponse, ActivationTokenException>) activationTokenResult).getValue();
95+
Assert.assertEquals(userId, activationTokenResponse.getUserId());
9696
}
9797
);
9898
});

miracl-sdk/src/androidTest/java/com/miracl/trust/registration/RegistrationTest.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import com.miracl.trust.MIRACLTrust
99
import com.miracl.trust.configuration.Configuration
1010
import com.miracl.trust.delegate.PinProvider
1111
import com.miracl.trust.network.ApiException
12-
import com.miracl.trust.utilities.GmailService
1312
import com.miracl.trust.utilities.MIRACLService
13+
import com.miracl.trust.utilities.MailpitService
1414
import com.miracl.trust.utilities.USER_ID
15+
import com.miracl.trust.utilities.createMailpitUserId
1516
import com.miracl.trust.utilities.generateWrongPin
1617
import com.miracl.trust.utilities.getUnixTime
1718
import com.miracl.trust.utilities.randomNumericPin
@@ -63,12 +64,12 @@ class RegistrationTest {
6364
// Send verification email
6465
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
6566
val timestamp = getUnixTime()
66-
val sendEmailResult = miraclTrust.sendVerificationEmail(USER_ID)
67+
val userId = createMailpitUserId()
68+
val sendEmailResult = miraclTrust.sendVerificationEmail(userId)
6769
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
6870

6971
// Fetch the verification URL from the email
70-
val context = InstrumentationRegistry.getInstrumentation().context
71-
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, USER_ID, timestamp)
72+
val verificationUrl = MailpitService.getVerificationUrl(userId, timestamp)
7273
Assert.assertNotNull(verificationUrl)
7374

7475
// Get activation token
@@ -77,10 +78,10 @@ class RegistrationTest {
7778

7879
// Register
7980
val activationToken = (activationTokenResult as MIRACLSuccess).value.activationToken
80-
val result = register(activationToken = activationToken)
81+
val result = register(userId = userId, activationToken = activationToken)
8182

8283
Assert.assertTrue(result is MIRACLSuccess)
83-
Assert.assertEquals(USER_ID, (result as MIRACLSuccess).value.userId)
84+
Assert.assertEquals(userId, (result as MIRACLSuccess).value.userId)
8485
Assert.assertEquals(dvProjectId, result.value.projectId)
8586
}
8687

miracl-sdk/src/androidTest/java/com/miracl/trust/registration/VerificationTest.kt

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ import com.miracl.trust.model.User
1414
import com.miracl.trust.session.AuthenticationSessionDetails
1515
import com.miracl.trust.session.AuthenticationSessionException
1616
import com.miracl.trust.util.secondsSince1970
17-
import com.miracl.trust.utilities.GmailService
1817
import com.miracl.trust.utilities.MIRACLService
18+
import com.miracl.trust.utilities.MailpitService
1919
import com.miracl.trust.utilities.USER_ID
20+
import com.miracl.trust.utilities.createMailpitUserId
2021
import com.miracl.trust.utilities.generateWrongPin
2122
import com.miracl.trust.utilities.getUnixTime
2223
import com.miracl.trust.utilities.randomNumericPin
@@ -27,7 +28,6 @@ import org.junit.Before
2728
import org.junit.Test
2829
import java.net.URL
2930
import java.util.Date
30-
import java.util.UUID
3131

3232
class VerificationTest {
3333
private val projectId = BuildConfig.CUV_PROJECT_ID
@@ -58,16 +58,14 @@ class VerificationTest {
5858
fun testDefaultVerification() = runTest(testCoroutineDispatcher) {
5959
// Send verification email
6060
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
61-
val addressParts = USER_ID.split("@")
62-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
61+
val email = createMailpitUserId()
6362

6463
val timestamp = getUnixTime()
6564
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
6665
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
6766

6867
// Fetch the verification URL from the email
69-
val context = InstrumentationRegistry.getInstrumentation().context
70-
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
68+
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
7169
Assert.assertNotNull(verificationUrl)
7270

7371
// Get activation token
@@ -80,8 +78,7 @@ class VerificationTest {
8078
fun testDefaultVerificationBackoff() = runTest(testCoroutineDispatcher) {
8179
// Send verification email
8280
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
83-
val addressParts = USER_ID.split("@")
84-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
81+
val email = createMailpitUserId()
8582

8683
var sendEmailResult = miraclTrust.sendVerificationEmail(email)
8784
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
@@ -97,8 +94,7 @@ class VerificationTest {
9794
fun testDefaultVerificationWithSessionDetails() = runTest(testCoroutineDispatcher) {
9895
// Send verification email
9996
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
100-
val addressParts = USER_ID.split("@")
101-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
97+
val email = createMailpitUserId()
10298

10399
val qrCode = MIRACLService.obtainAccessId(dvProjectId, dvProjectUrl).qrURL
104100
var authenticationSessionDetailsResult:
@@ -122,8 +118,7 @@ class VerificationTest {
122118
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
123119

124120
// Fetch the verification URL from the email
125-
val context = InstrumentationRegistry.getInstrumentation().context
126-
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
121+
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
127122
Assert.assertNotNull(verificationUrl)
128123

129124
// Get activation token
@@ -138,8 +133,7 @@ class VerificationTest {
138133
fun testDefaultVerificationWithCrossDeviceSession() = runTest(testCoroutineDispatcher) {
139134
// Send verification email
140135
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
141-
val addressParts = USER_ID.split("@")
142-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
136+
val email = createMailpitUserId()
143137

144138
val qrCode = MIRACLService.obtainAccessId(dvProjectId, dvProjectUrl).qrURL
145139
val crossDeviceSessionResult = miraclTrust.getCrossDeviceSessionFromQRCode(qrCode)
@@ -155,8 +149,7 @@ class VerificationTest {
155149
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
156150

157151
// Fetch the verification URL from the email
158-
val context = InstrumentationRegistry.getInstrumentation().context
159-
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
152+
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
160153
Assert.assertNotNull(verificationUrl)
161154

162155
// Get activation token
@@ -171,16 +164,14 @@ class VerificationTest {
171164
fun testDefaultVerificationWithMpinId() = runTest(testCoroutineDispatcher) {
172165
// Send verification email
173166
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
174-
val addressParts = USER_ID.split("@")
175-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
167+
val email = createMailpitUserId()
176168

177169
val timestamp = System.currentTimeMillis() / 1000
178170
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
179171
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
180172

181173
// Fetch the verification URL from the email
182-
val context = InstrumentationRegistry.getInstrumentation().context
183-
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
174+
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
184175
Assert.assertNotNull(verificationUrl)
185176

186177
// Get activation token
@@ -210,16 +201,14 @@ class VerificationTest {
210201
fun testEmailCodeVerification() = runTest(testCoroutineDispatcher) {
211202
// Send verification email
212203
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
213-
val addressParts = USER_ID.split("@")
214-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
204+
val email = createMailpitUserId()
215205

216206
val timestamp = System.currentTimeMillis() / 1000
217207
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
218208
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
219209

220210
// Fetch the verification code from the email
221-
val context = InstrumentationRegistry.getInstrumentation().context
222-
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
211+
val code = MailpitService.getVerificationCode(email, timestamp)
223212
Assert.assertNotNull(code)
224213

225214
// Get activation token
@@ -232,16 +221,14 @@ class VerificationTest {
232221
fun testEmailCodeVerificationWithMpinId() = runTest(testCoroutineDispatcher) {
233222
// Send verification email
234223
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
235-
val addressParts = USER_ID.split("@")
236-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
224+
val email = createMailpitUserId()
237225

238226
val timestamp = System.currentTimeMillis() / 1000
239227
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
240228
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
241229

242230
// Fetch the verification URL from the email
243-
val context = InstrumentationRegistry.getInstrumentation().context
244-
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
231+
val code = MailpitService.getVerificationCode(email, timestamp)
245232
Assert.assertNotNull(code)
246233

247234
// Get activation token
@@ -271,16 +258,14 @@ class VerificationTest {
271258
fun testEmailCodeVerificationWithoutMpinId() = runTest(testCoroutineDispatcher) {
272259
// Send verification email
273260
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
274-
val addressParts = USER_ID.split("@")
275-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
261+
val email = createMailpitUserId()
276262

277263
val timestamp = System.currentTimeMillis() / 1000
278264
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
279265
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
280266

281267
// Fetch the verification URL from the email
282-
val context = InstrumentationRegistry.getInstrumentation().context
283-
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
268+
val code = MailpitService.getVerificationCode(email, timestamp)
284269
Assert.assertNotNull(code)
285270

286271
// Get activation token
@@ -314,16 +299,14 @@ class VerificationTest {
314299
fun testEmailCodeVerificationWithRevokedMpinId() = runTest(testCoroutineDispatcher) {
315300
// Send verification email
316301
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
317-
val addressParts = USER_ID.split("@")
318-
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
302+
val email = createMailpitUserId()
319303

320304
val timestamp = System.currentTimeMillis() / 1000
321305
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
322306
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
323307

324308
// Fetch the verification URL from the email
325-
val context = InstrumentationRegistry.getInstrumentation().context
326-
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
309+
val code = MailpitService.getVerificationCode(email, timestamp)
327310
Assert.assertNotNull(code)
328311

329312
// Get activation token

miracl-sdk/src/androidTest/java/com/miracl/trust/utilities/Utilities.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.miracl.trust.utilities
22

3+
import com.miracl.trust.test.BuildConfig
34
import java.util.UUID
45
import kotlin.random.Random
56
import kotlin.random.nextInt
@@ -9,6 +10,13 @@ const val USER_PIN_LENGTH = 4
910
const val WRONG_FORMAT_PIN = "FAIL"
1011
const val SINGLE_DIGIT_LIMITER = 10
1112

13+
fun createMailpitUserId(): String {
14+
return BuildConfig.MAILPIT_EMAIL_ADDRESS.replace(
15+
"{tag}",
16+
UUID.randomUUID().toString().lowercase()
17+
)
18+
}
19+
1220
fun randomNumericPin(length: Int = USER_PIN_LENGTH): String {
1321
var pass = ""
1422

run-instrumentation-tests.sh

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
11
#!/bin/sh
22

3-
TEST_CREDENTIALS_DIR="./utilities/src/main/res/raw"
4-
mkdir -p $TEST_CREDENTIALS_DIR
5-
echo $GMAIL_CREDENTIALS > "${TEST_CREDENTIALS_DIR}/credentials.json"
6-
echo $GMAIL_TOKEN > "${TEST_CREDENTIALS_DIR}/token.json"
7-
8-
#Instrumentation tests
93
./gradlew connectedAndroidTest \
104
-Pmiracltrust.cuvProjectId="$TEST_CUV_PROJECT_ID" \
115
-Pmiracltrust.cuvProjectUrl="$TEST_CUV_PROJECT_URL" \
126
-Pmiracltrust.cuvServiceAccountToken="$TEST_CUV_SERVICE_ACCOUNT_TOKEN" \
137
-Pmiracltrust.dvProjectId="$TEST_DV_PROJECT_ID" \
148
-Pmiracltrust.dvProjectUrl="$TEST_DV_PROJECT_URL" \
159
-Pmiracltrust.ecvProjectId="$TEST_ECV_PROJECT_ID" \
16-
-Pmiracltrust.ecvProjectUrl="$TEST_ECV_PROJECT_URL"
17-
18-
GRADLE_EXIT_CODE=$?
19-
20-
rm "${TEST_CREDENTIALS_DIR}/credentials.json"
21-
rm "${TEST_CREDENTIALS_DIR}/token.json"
22-
23-
exit $GRADLE_EXIT_CODE
10+
-Pmiracltrust.ecvProjectUrl="$TEST_ECV_PROJECT_URL" \
11+
-Pmailpit.url=$TEST_MAILPIT_URL \
12+
-Pmailpit.user=$TEST_MAILPIT_USER \
13+
-Pmailpit.pass=$TEST_MAILPIT_PASS \
14+
-Pmailpit.emailAddress=$TEST_MAILPIT_EMAIL_ADDRESS

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ dependencyResolutionManagement {
2020
}
2121

2222
rootProject.name = 'MIRACLTrust'
23-
include ':miracl-sdk', ':utilities'
23+
include ':miracl-sdk'

utilities/.gitignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)