Skip to content

Commit c799c49

Browse files
Refactor unit tests for AppUploader, LambdaTest, LambdaUploader, TestExecutor, and TestSuiteUploader for improved readability and consistency
1 parent 44ecdc3 commit c799c49

File tree

7 files changed

+229
-169
lines changed

7 files changed

+229
-169
lines changed

src/test/java/io/github/lambdatest/gradle/AppUploaderTest.java

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,60 +13,63 @@
1313
@ExtendWith(MockitoExtension.class)
1414
class AppUploaderTest {
1515

16-
private static final String TEST_USERNAME = "testuser";
17-
private static final String TEST_ACCESS_KEY = "test_access_key";
18-
private static final String TEST_APP_FILE_PATH = "./sample-app.apk";
16+
private static final String TEST_USERNAME = "testuser";
17+
private static final String TEST_ACCESS_KEY = "test_access_key";
18+
private static final String TEST_APP_FILE_PATH = "./sample-app.apk";
1919

20-
@Test
21-
void constructor_ShouldValidateRequiredParameters() {
22-
// Valid construction
23-
AppUploader validUploader = new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_FILE_PATH);
24-
assertThat(validUploader).isNotNull();
20+
@Test
21+
void constructor_ShouldValidateRequiredParameters() {
22+
// Valid construction
23+
AppUploader validUploader =
24+
new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_FILE_PATH);
25+
assertThat(validUploader).isNotNull();
2526

26-
// Null parameter validation
27-
assertThatThrownBy(() -> new AppUploader(null, TEST_ACCESS_KEY, TEST_APP_FILE_PATH))
28-
.isInstanceOf(IllegalArgumentException.class)
29-
.hasMessage("Username cannot be null");
27+
// Null parameter validation
28+
assertThatThrownBy(() -> new AppUploader(null, TEST_ACCESS_KEY, TEST_APP_FILE_PATH))
29+
.isInstanceOf(IllegalArgumentException.class)
30+
.hasMessage("Username cannot be null");
3031

31-
assertThatThrownBy(() -> new AppUploader(TEST_USERNAME, null, TEST_APP_FILE_PATH))
32-
.isInstanceOf(IllegalArgumentException.class)
33-
.hasMessage("Access Key cannot be null");
32+
assertThatThrownBy(() -> new AppUploader(TEST_USERNAME, null, TEST_APP_FILE_PATH))
33+
.isInstanceOf(IllegalArgumentException.class)
34+
.hasMessage("Access Key cannot be null");
3435

35-
assertThatThrownBy(() -> new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, null))
36-
.isInstanceOf(IllegalArgumentException.class)
37-
.hasMessage("App File Path cannot be null");
36+
assertThatThrownBy(() -> new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, null))
37+
.isInstanceOf(IllegalArgumentException.class)
38+
.hasMessage("App File Path cannot be null");
3839

39-
assertThatThrownBy(() -> new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, "invalid.txt"))
40-
.isInstanceOf(IllegalArgumentException.class)
41-
.hasMessage("App file must have a .apk extension");
42-
}
40+
assertThatThrownBy(() -> new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, "invalid.txt"))
41+
.isInstanceOf(IllegalArgumentException.class)
42+
.hasMessage("App file must have a .apk extension");
43+
}
4344

44-
@Test
45-
void uploadAppAsync_ShouldReturnCompletableFuture() {
46-
// Given
47-
AppUploader appUploader = new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_FILE_PATH);
45+
@Test
46+
void uploadAppAsync_ShouldReturnCompletableFuture() {
47+
// Given
48+
AppUploader appUploader =
49+
new AppUploader(TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_FILE_PATH);
4850

49-
// When
50-
CompletableFuture<String> future = appUploader.uploadAppAsync();
51+
// When
52+
CompletableFuture<String> future = appUploader.uploadAppAsync();
5153

52-
// Then - Future should be created (actual execution will fail due to invalid
53-
// credentials/missing files)
54-
assertThat(future).isNotNull();
55-
assertThat(future).isInstanceOf(CompletableFuture.class);
56-
}
54+
// Then - Future should be created (actual execution will fail due to invalid
55+
// credentials/missing files)
56+
assertThat(future).isNotNull();
57+
assertThat(future).isInstanceOf(CompletableFuture.class);
58+
}
5759

58-
@Test
59-
void uploadAppAsync_ShouldHandleUploadFailure() {
60-
// Given - Using invalid credentials will cause upload to fail
61-
String invalidUsername = "invalid_user";
62-
String invalidAccessKey = "invalid_key";
60+
@Test
61+
void uploadAppAsync_ShouldHandleUploadFailure() {
62+
// Given - Using invalid credentials will cause upload to fail
63+
String invalidUsername = "invalid_user";
64+
String invalidAccessKey = "invalid_key";
6365

64-
AppUploader appUploader = new AppUploader(invalidUsername, invalidAccessKey, TEST_APP_FILE_PATH);
65-
CompletableFuture<String> future = appUploader.uploadAppAsync();
66+
AppUploader appUploader =
67+
new AppUploader(invalidUsername, invalidAccessKey, TEST_APP_FILE_PATH);
68+
CompletableFuture<String> future = appUploader.uploadAppAsync();
6669

67-
// When/Then - Should handle failure gracefully by throwing CompletionException
68-
assertThatThrownBy(future::join)
69-
.isInstanceOf(CompletionException.class)
70-
.hasCauseInstanceOf(RuntimeException.class);
71-
}
70+
// When/Then - Should handle failure gracefully by throwing CompletionException
71+
assertThatThrownBy(future::join)
72+
.isInstanceOf(CompletionException.class)
73+
.hasCauseInstanceOf(RuntimeException.class);
74+
}
7275
}

src/test/java/io/github/lambdatest/gradle/LambdaTestPluginTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ void apply_ShouldAllowTaskConfiguration() {
4141

4242
// When
4343
LambdaTestTask runTask = (LambdaTestTask) project.getTasks().findByName("runLambdaTest");
44-
LambdaUploaderTask uploadTask = (LambdaUploaderTask) project.getTasks().findByName("uploadApkToLambdaTest");
44+
LambdaUploaderTask uploadTask =
45+
(LambdaUploaderTask) project.getTasks().findByName("uploadApkToLambdaTest");
4546

4647
runTask.setUsername("testUser");
4748
uploadTask.setAccessKey("testKey");

src/test/java/io/github/lambdatest/gradle/LambdaTestTaskTest.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,21 @@ void runLambdaTest_ShouldCoordinateUploadsAndExecution_WhenFilesProvided() {
6565

6666
try (MockedStatic<UploaderUtil> mockedUtil = mockStatic(UploaderUtil.class)) {
6767
mockedUtil
68-
.when(() -> UploaderUtil.uploadAndGetId(TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_FILE_PATH))
68+
.when(
69+
() ->
70+
UploaderUtil.uploadAndGetId(
71+
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_FILE_PATH))
6972
.thenReturn(TEST_APP_ID);
7073
mockedUtil
71-
.when(() -> UploaderUtil.uploadAndGetId(TEST_USERNAME, TEST_ACCESS_KEY, TEST_SUITE_FILE_PATH))
74+
.when(
75+
() ->
76+
UploaderUtil.uploadAndGetId(
77+
TEST_USERNAME, TEST_ACCESS_KEY, TEST_SUITE_FILE_PATH))
7278
.thenReturn(TEST_SUITE_ID);
7379

7480
// When/Then - Should coordinate uploads but fail at HTTP execution (expected in
7581
// tests)
76-
assertThatThrownBy(() -> task.runLambdaTest())
77-
.isInstanceOf(RuntimeException.class);
82+
assertThatThrownBy(() -> task.runLambdaTest()).isInstanceOf(RuntimeException.class);
7883
}
7984
}
8085

@@ -121,4 +126,4 @@ void runLambdaTest_ShouldHandleUploadFailures() {
121126
.hasCauseInstanceOf(CompletionException.class);
122127
}
123128
}
124-
}
129+
}

src/test/java/io/github/lambdatest/gradle/LambdaUploaderTaskTest.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ void uploadApkToLambdaTest_ShouldCoordinateUploads_WhenFilesProvided() {
5151

5252
// When/Then - Should coordinate uploads but fail at HTTP execution (expected in
5353
// tests)
54-
assertThatThrownBy(() -> task.uploadApkToLambdaTest())
55-
.isInstanceOf(RuntimeException.class);
54+
assertThatThrownBy(() -> task.uploadApkToLambdaTest()).isInstanceOf(RuntimeException.class);
5655
}
5756

5857
@Test

src/test/java/io/github/lambdatest/gradle/TestExecutorTest.java

Lines changed: 100 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -14,73 +14,115 @@
1414
@ExtendWith(MockitoExtension.class)
1515
class TestExecutorTest {
1616

17-
private static final String TEST_USERNAME = "testuser";
18-
private static final String TEST_ACCESS_KEY = "test_access_key";
19-
private static final String TEST_APP_ID = "lt://APP1234567890";
20-
private static final String TEST_SUITE_ID = "lt://APP1234567891";
21-
private static final List<String> TEST_DEVICES = Arrays.asList("Pixel 6-12", "Galaxy S21-11");
17+
private static final String TEST_USERNAME = "testuser";
18+
private static final String TEST_ACCESS_KEY = "test_access_key";
19+
private static final String TEST_APP_ID = "lt://APP1234567890";
20+
private static final String TEST_SUITE_ID = "lt://APP1234567891";
21+
private static final List<String> TEST_DEVICES = Arrays.asList("Pixel 6-12", "Galaxy S21-11");
2222

23-
@Test
24-
void constructor_ShouldCreateInstance_WithValidParameters() {
25-
// Test standard Android app
26-
TestExecutor executor = new TestExecutor(
27-
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_ID, TEST_SUITE_ID, TEST_DEVICES, false);
28-
assertThat(executor).isNotNull();
23+
@Test
24+
void constructor_ShouldCreateInstance_WithValidParameters() {
25+
// Test standard Android app
26+
TestExecutor executor =
27+
new TestExecutor(
28+
TEST_USERNAME,
29+
TEST_ACCESS_KEY,
30+
TEST_APP_ID,
31+
TEST_SUITE_ID,
32+
TEST_DEVICES,
33+
false);
34+
assertThat(executor).isNotNull();
2935

30-
// Test Flutter app
31-
TestExecutor flutterExecutor = new TestExecutor(
32-
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_ID, TEST_SUITE_ID, TEST_DEVICES, true);
33-
assertThat(flutterExecutor).isNotNull();
36+
// Test Flutter app
37+
TestExecutor flutterExecutor =
38+
new TestExecutor(
39+
TEST_USERNAME,
40+
TEST_ACCESS_KEY,
41+
TEST_APP_ID,
42+
TEST_SUITE_ID,
43+
TEST_DEVICES,
44+
true);
45+
assertThat(flutterExecutor).isNotNull();
3446

35-
// Test null Flutter parameter (should default to false)
36-
TestExecutor nullFlutterExecutor = new TestExecutor(
37-
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_ID, TEST_SUITE_ID, TEST_DEVICES, null);
38-
assertThat(nullFlutterExecutor).isNotNull();
39-
}
47+
// Test null Flutter parameter (should default to false)
48+
TestExecutor nullFlutterExecutor =
49+
new TestExecutor(
50+
TEST_USERNAME,
51+
TEST_ACCESS_KEY,
52+
TEST_APP_ID,
53+
TEST_SUITE_ID,
54+
TEST_DEVICES,
55+
null);
56+
assertThat(nullFlutterExecutor).isNotNull();
57+
}
4058

41-
@Test
42-
void executeTests_ShouldHandleParametersCorrectly() {
43-
// Given
44-
TestExecutor executor = new TestExecutor(
45-
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_ID, TEST_SUITE_ID, TEST_DEVICES, false);
59+
@Test
60+
void executeTests_ShouldHandleParametersCorrectly() {
61+
// Given
62+
TestExecutor executor =
63+
new TestExecutor(
64+
TEST_USERNAME,
65+
TEST_ACCESS_KEY,
66+
TEST_APP_ID,
67+
TEST_SUITE_ID,
68+
TEST_DEVICES,
69+
false);
4670

47-
Map<String, String> params = new HashMap<>();
48-
params.put("build", "Test Build");
49-
params.put("video", "true");
50-
params.put("deviceLog", "true");
71+
Map<String, String> params = new HashMap<>();
72+
params.put("build", "Test Build");
73+
params.put("video", "true");
74+
params.put("deviceLog", "true");
5175

52-
// When/Then - Should not throw during parameter setup
53-
// Note: Actual HTTP execution will fail in tests, which is expected
54-
assertThat(params).containsEntry("build", "Test Build");
55-
assertThat(params).containsEntry("video", "true");
56-
assertThat(executor).isNotNull();
57-
}
76+
// When/Then - Should not throw during parameter setup
77+
// Note: Actual HTTP execution will fail in tests, which is expected
78+
assertThat(params).containsEntry("build", "Test Build");
79+
assertThat(params).containsEntry("video", "true");
80+
assertThat(executor).isNotNull();
81+
}
5882

59-
@Test
60-
void executeTests_ShouldHandleEmptyParameters() {
61-
// Given
62-
TestExecutor executor = new TestExecutor(
63-
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_ID, TEST_SUITE_ID, TEST_DEVICES, false);
83+
@Test
84+
void executeTests_ShouldHandleEmptyParameters() {
85+
// Given
86+
TestExecutor executor =
87+
new TestExecutor(
88+
TEST_USERNAME,
89+
TEST_ACCESS_KEY,
90+
TEST_APP_ID,
91+
TEST_SUITE_ID,
92+
TEST_DEVICES,
93+
false);
6494

65-
Map<String, String> emptyParams = new HashMap<>();
95+
Map<String, String> emptyParams = new HashMap<>();
6696

67-
// When/Then - Should handle empty parameters without issues
68-
assertThat(emptyParams).isEmpty();
69-
assertThat(executor).isNotNull();
70-
}
97+
// When/Then - Should handle empty parameters without issues
98+
assertThat(emptyParams).isEmpty();
99+
assertThat(executor).isNotNull();
100+
}
71101

72-
@Test
73-
void constructor_ShouldHandleDeviceVariations() {
74-
// Single device
75-
List<String> singleDevice = Arrays.asList("Pixel 6-12");
76-
TestExecutor singleDeviceExecutor = new TestExecutor(
77-
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_ID, TEST_SUITE_ID, singleDevice, false);
78-
assertThat(singleDeviceExecutor).isNotNull();
102+
@Test
103+
void constructor_ShouldHandleDeviceVariations() {
104+
// Single device
105+
List<String> singleDevice = Arrays.asList("Pixel 6-12");
106+
TestExecutor singleDeviceExecutor =
107+
new TestExecutor(
108+
TEST_USERNAME,
109+
TEST_ACCESS_KEY,
110+
TEST_APP_ID,
111+
TEST_SUITE_ID,
112+
singleDevice,
113+
false);
114+
assertThat(singleDeviceExecutor).isNotNull();
79115

80-
// Multiple devices
81-
List<String> multipleDevices = Arrays.asList("Pixel 6-12", "Galaxy S21-11", "iPhone 13-15");
82-
TestExecutor multiDeviceExecutor = new TestExecutor(
83-
TEST_USERNAME, TEST_ACCESS_KEY, TEST_APP_ID, TEST_SUITE_ID, multipleDevices, false);
84-
assertThat(multiDeviceExecutor).isNotNull();
85-
}
116+
// Multiple devices
117+
List<String> multipleDevices = Arrays.asList("Pixel 6-12", "Galaxy S21-11", "iPhone 13-15");
118+
TestExecutor multiDeviceExecutor =
119+
new TestExecutor(
120+
TEST_USERNAME,
121+
TEST_ACCESS_KEY,
122+
TEST_APP_ID,
123+
TEST_SUITE_ID,
124+
multipleDevices,
125+
false);
126+
assertThat(multiDeviceExecutor).isNotNull();
127+
}
86128
}

0 commit comments

Comments
 (0)