• Home
Name Date Size #Lines LOC

..--

MedicalResourceListParcelTest.javaD04-Jul-20253.2 KiB8654

ReadMedicalResourcesRequestParcelTest.javaD04-Jul-20258.6 KiB203155

UpsertMedicalResourceRequestsParcelTest.javaD04-Jul-20253.9 KiB9865

ReadMedicalResourcesRequestParcelTest.java

1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package android.healthconnect.aidl;
17 
18 import static android.health.connect.Constants.MAXIMUM_PAGE_SIZE;
19 import static android.health.connect.Constants.MINIMUM_PAGE_SIZE;
20 import static android.health.connect.datatypes.MedicalResource.MEDICAL_RESOURCE_TYPE_VACCINES;
21 import static android.healthconnect.cts.phr.utils.PhrDataFactory.DATA_SOURCE_ID;
22 import static android.healthconnect.cts.phr.utils.PhrDataFactory.DIFFERENT_DATA_SOURCE_ID;
23 import static android.healthconnect.cts.phr.utils.PhrDataFactory.PAGE_TOKEN;
24 
25 import static com.google.common.truth.Truth.assertThat;
26 
27 import static org.junit.Assert.assertThrows;
28 
29 import android.annotation.Nullable;
30 import android.health.connect.ReadMedicalResourcesInitialRequest;
31 import android.health.connect.ReadMedicalResourcesPageRequest;
32 import android.health.connect.aidl.ReadMedicalResourcesRequestParcel;
33 import android.os.Parcel;
34 
35 import androidx.test.ext.junit.runners.AndroidJUnit4;
36 
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 
40 import java.util.ArrayList;
41 import java.util.Set;
42 
43 @RunWith(AndroidJUnit4.class)
44 public class ReadMedicalResourcesRequestParcelTest {
45 
46     @Test
testWriteInitialRequestToParcelThenRestore_propertiesAreIdentical()47     public void testWriteInitialRequestToParcelThenRestore_propertiesAreIdentical() {
48         ReadMedicalResourcesInitialRequest original =
49                 new ReadMedicalResourcesInitialRequest.Builder(MEDICAL_RESOURCE_TYPE_VACCINES)
50                         .addDataSourceId(DATA_SOURCE_ID)
51                         .addDataSourceId(DIFFERENT_DATA_SOURCE_ID)
52                         .setPageSize(100)
53                         .build();
54 
55         Parcel parcel = Parcel.obtain();
56         original.toParcel().writeToParcel(parcel, 0);
57         parcel.setDataPosition(0);
58         ReadMedicalResourcesRequestParcel restoredParcel =
59                 ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel);
60 
61         assertThat(restoredParcel.getMedicalResourceType())
62                 .isEqualTo(MEDICAL_RESOURCE_TYPE_VACCINES);
63         assertThat(restoredParcel.getDataSourceIds())
64                 .containsExactly(DATA_SOURCE_ID, DIFFERENT_DATA_SOURCE_ID);
65         assertThat(restoredParcel.getPageToken()).isNull();
66         assertThat(restoredParcel.getPageSize()).isEqualTo(100);
67         parcel.recycle();
68     }
69 
70     @Test
testWritePageRequestToParcelThenRestore_propertiesAreIdentical()71     public void testWritePageRequestToParcelThenRestore_propertiesAreIdentical() {
72         ReadMedicalResourcesPageRequest original =
73                 new ReadMedicalResourcesPageRequest.Builder(PAGE_TOKEN).setPageSize(100).build();
74 
75         Parcel parcel = Parcel.obtain();
76         original.toParcel().writeToParcel(parcel, 0);
77         parcel.setDataPosition(0);
78         ReadMedicalResourcesRequestParcel restoredParcel =
79                 ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel);
80 
81         assertThat(restoredParcel.getMedicalResourceType()).isEqualTo(0);
82         assertThat(restoredParcel.getDataSourceIds()).isEmpty();
83         assertThat(restoredParcel.getPageToken()).isEqualTo(PAGE_TOKEN);
84         assertThat(restoredParcel.getPageSize()).isEqualTo(100);
85     }
86 
87     @Test
testRestoreInvalidPageRequestFromParcel_nullPageToken_expectException()88     public void testRestoreInvalidPageRequestFromParcel_nullPageToken_expectException()
89             throws NoSuchFieldException, IllegalAccessException {
90         // Write a bad parcel which has a null page token
91         Parcel parcel =
92                 createUnvalidatedParcel(
93                         /* isPageRequest= */ true,
94                         /* medicalResourceType= */ 0,
95                         /* dataSourceIds= */ Set.of(),
96                         /* pageToken= */ null, // bad value being tested
97                         /* pageSize= */ 100);
98 
99         assertThrows(
100                 IllegalArgumentException.class,
101                 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
102     }
103 
104     @Test
testRestoreInvalidMedicalResourceTypeFromParcel_expectException()105     public void testRestoreInvalidMedicalResourceTypeFromParcel_expectException() {
106         Parcel parcel =
107                 createUnvalidatedParcel(
108                         /* isPageRequest= */ false,
109                         /* medicalResourceType= */ -1, // bad value being tested
110                         /* dataSourceIds= */ Set.of(DATA_SOURCE_ID, DIFFERENT_DATA_SOURCE_ID),
111                         /* pageToken= */ null,
112                         /* pageSize= */ 100);
113 
114         assertThrows(
115                 IllegalArgumentException.class,
116                 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
117     }
118 
119     @Test
testRestoreInvalidDataSourceIdFromParcel_expectException()120     public void testRestoreInvalidDataSourceIdFromParcel_expectException() {
121         Parcel parcel =
122                 createUnvalidatedParcel(
123                         /* isPageRequest= */ false,
124                         /* medicalResourceType= */ MEDICAL_RESOURCE_TYPE_VACCINES,
125                         /* dataSourceIds= */ Set.of("1"), // bad value being tested, must be uuid
126                         /* pageToken= */ null,
127                         /* pageSize= */ 100);
128 
129         assertThrows(
130                 IllegalArgumentException.class,
131                 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
132     }
133 
134     @Test
testRestoreTooSmallPageSizeFromParcel_expectException()135     public void testRestoreTooSmallPageSizeFromParcel_expectException() {
136         Parcel parcel =
137                 createUnvalidatedParcel(
138                         /* isPageRequest= */ false,
139                         /* medicalResourceType= */ MEDICAL_RESOURCE_TYPE_VACCINES,
140                         /* dataSourceIds= */ Set.of(DATA_SOURCE_ID, DIFFERENT_DATA_SOURCE_ID),
141                         /* pageToken= */ null,
142                         /* pageSize= */ MINIMUM_PAGE_SIZE - 1); // bad value being tested
143 
144         assertThrows(
145                 IllegalArgumentException.class,
146                 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
147     }
148 
149     @Test
testRestoreTooLargePageSizeFromParcel_expectException()150     public void testRestoreTooLargePageSizeFromParcel_expectException() {
151         Parcel parcel =
152                 createUnvalidatedParcel(
153                         /* isPageRequest= */ false,
154                         /* medicalResourceType= */ MEDICAL_RESOURCE_TYPE_VACCINES,
155                         /* dataSourceIds= */ Set.of(DATA_SOURCE_ID, DIFFERENT_DATA_SOURCE_ID),
156                         /* pageToken= */ null,
157                         /* pageSize= */ MAXIMUM_PAGE_SIZE + 1); // bad value being tested
158 
159         assertThrows(
160                 IllegalArgumentException.class,
161                 () -> ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(parcel));
162     }
163 
164     @Test
testCreateUnvalidatedParcel_byDefault_success()165     public void testCreateUnvalidatedParcel_byDefault_success() {
166         Parcel goodParcel =
167                 createUnvalidatedParcel(
168                         /* isPageRequest= */ false,
169                         /* medicalResourceType= */ MEDICAL_RESOURCE_TYPE_VACCINES,
170                         /* dataSourceIds= */ Set.of(DATA_SOURCE_ID, DIFFERENT_DATA_SOURCE_ID),
171                         /* pageToken= */ null,
172                         /* pageSize= */ 100);
173 
174         ReadMedicalResourcesRequestParcel restored =
175                 ReadMedicalResourcesRequestParcel.CREATOR.createFromParcel(goodParcel);
176         assertThat(restored.getMedicalResourceType()).isEqualTo(MEDICAL_RESOURCE_TYPE_VACCINES);
177         assertThat(restored.getDataSourceIds())
178                 .containsExactly(DATA_SOURCE_ID, DIFFERENT_DATA_SOURCE_ID);
179         assertThat(restored.getPageToken()).isNull();
180         assertThat(restored.getPageSize()).isEqualTo(100);
181     }
182 
183     /**
184      * Create a parcel with values that cannot be created with the normal builder (because it
185      * validates), but need to be tested as they could be received from apps.
186      */
createUnvalidatedParcel( boolean isPageRequest, int medicalResourceType, Set<String> dataSourceIds, @Nullable String pageToken, int pageSize)187     private static Parcel createUnvalidatedParcel(
188             boolean isPageRequest,
189             int medicalResourceType,
190             Set<String> dataSourceIds,
191             @Nullable String pageToken,
192             int pageSize) {
193         Parcel parcel = Parcel.obtain();
194         parcel.writeBoolean(isPageRequest);
195         parcel.writeInt(medicalResourceType);
196         parcel.writeStringList(new ArrayList<>(dataSourceIds));
197         parcel.writeString(pageToken);
198         parcel.writeInt(pageSize);
199         parcel.setDataPosition(0);
200         return parcel;
201     }
202 }
203