Skip to content

Commit c989a45

Browse files
authored
Merge pull request #449 from OpenSRP/769-practitioners-end-point
769 : Return list of practitioners via another practitioner's identifier and code Failing tests to be fixed as part of [#448](#448)
2 parents 253aad3 + bbf2752 commit c989a45

11 files changed

+231
-2
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<artifactId>opensrp-server-core</artifactId>
77
<packaging>jar</packaging>
8-
<version>2.9.6-SNAPSHOT</version>
8+
<version>2.9.7-SNAPSHOT</version>
99
<name>opensrp-server-core</name>
1010
<description>OpenSRP Server Core module</description>
1111
<url>http://github.com/OpenSRP/opensrp-server-core</url>

src/main/java/org/opensrp/repository/PractitionerRepository.java

100644100755
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@ public interface PractitionerRepository extends BaseRepository<Practitioner> {
2828
Practitioner getPractitionerByUsername(String username);
2929

3030
List<Practitioner> getAllPractitioners(PractitionerSearchBean practitionerSearchBean);
31+
32+
List<Practitioner> getAllPractitionersByIdentifiers(List<String> practitionerIdentifiers);
3133
}

src/main/java/org/opensrp/repository/PractitionerRoleRepository.java

100644100755
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,6 @@ void assignPractitionerRole(Long organizationId,Long practitionerId, String prac
2323
PractitionerRole practitionerRole);
2424

2525
List<PractitionerRole> getAllPractitionerRoles(PractitionerRoleSearchBean practitionerRoleSearchBean);
26+
27+
public List<PractitionerRole> getPractitionerRolesByOrgIdAndCode(Long organizationId, String code);
2628
}

src/main/java/org/opensrp/repository/postgres/PractitionerRepositoryImpl.java

100644100755
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,17 @@ public List<Practitioner> getAllPractitioners(PractitionerSearchBean practitione
199199
return convert(pgPractitionerList);
200200
}
201201

202-
@Override
202+
@Override
203+
public List<Practitioner> getAllPractitionersByIdentifiers(List<String> practitionerIdentifiers) {
204+
PractitionerSearchBean practitionerSearchBean = new PractitionerSearchBean();
205+
Pair<Integer, Integer> pageSizeAndOffset = RepositoryUtil.getPageSizeAndOffset(practitionerSearchBean);
206+
PractitionerExample practitionerExample = new PractitionerExample();
207+
practitionerExample.createCriteria().andDateDeletedIsNull().andIdentifierIn(practitionerIdentifiers);
208+
List<org.opensrp.domain.postgres.Practitioner> pgPractitionerList = practitionerMapper.selectMany(practitionerExample, pageSizeAndOffset.getRight(), pageSizeAndOffset.getLeft());
209+
return convert(pgPractitionerList);
210+
}
211+
212+
@Override
203213
protected Long retrievePrimaryKey(Practitioner practitioner) {
204214
Object uniqueId = getUniqueField(practitioner);
205215
if (uniqueId == null) {

src/main/java/org/opensrp/repository/postgres/PractitionerRoleRepositoryImpl.java

100644100755
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,16 @@ public List<PractitionerRole> getAllPractitionerRoles(PractitionerRoleSearchBean
299299
return convert(pgPractitionerRoleList);
300300
}
301301

302+
@Override
303+
public List<PractitionerRole> getPractitionerRolesByOrgIdAndCode(Long organizationId, String code) {
304+
PractitionerRoleSearchBean practitionerRoleSearchBean = new PractitionerRoleSearchBean();
305+
Pair<Integer, Integer> pageSizeAndOffset = RepositoryUtil.getPageSizeAndOffset(practitionerRoleSearchBean);
306+
PractitionerRoleExample practitionerRoleExample = new PractitionerRoleExample();
307+
practitionerRoleExample.createCriteria().andOrganizationIdEqualTo(organizationId).andCodeEqualTo(code);
308+
List<org.opensrp.domain.postgres.PractitionerRole> pgPractitionerRoleList = practitionerRoleMapper.selectMany(practitionerRoleExample, pageSizeAndOffset.getRight(), pageSizeAndOffset.getLeft());
309+
return convert(pgPractitionerRoleList);
310+
}
311+
302312
private boolean isExistingPractitionerRole(Long organizationId, Long practitionerId, String code,
303313
org.opensrp.domain.postgres.PractitionerRole practitionerRole) {
304314
if (organizationId != null && practitionerId != null) {

src/main/java/org/opensrp/service/PractitionerRoleService.java

100644100755
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,8 @@ public void validateIdentifier(String identifier) {
131131
throw new IllegalArgumentException("Practitioner Role Identifier not specified");
132132
}
133133

134+
public List<PractitionerRole> getPractitionerRolesByOrgIdAndCode(Long organizationId, String code) {
135+
return practitionerRoleRepository.getPractitionerRolesByOrgIdAndCode(organizationId, code);
136+
}
137+
134138
}

src/main/java/org/opensrp/service/PractitionerService.java

100644100755
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,26 @@ public Long getPractitionerIdByIdentifier(String identifier) {
134134
org.opensrp.domain.postgres.Practitioner pgPractitioner = getPgPractitioner(identifier);
135135
return pgPractitioner != null ? pgPractitioner.getId() : null;
136136
}
137+
138+
public List<Practitioner> getPractitionersByIdentifiers(List<String> practitionerIdentifiers) {
139+
return practitionerRepository.getAllPractitionersByIdentifiers(practitionerIdentifiers);
140+
}
141+
142+
public List<Practitioner> getAssignedPractitionersByIdentifierAndCode(String practitionerIdentifier, String code) {
143+
List<Long> organizationIds = new ArrayList<>();
144+
for (PractitionerRole practitionerRole : practitionerRoleService.getPgRolesForPractitioner(practitionerIdentifier)) {
145+
organizationIds.add(practitionerRole.getOrganizationId());
146+
}
147+
148+
// Retrieved teams, now get all members of the team
149+
List<org.smartregister.domain.PractitionerRole> practitionerRoles = new ArrayList<>();
150+
List<String> practitionerIdentifiers = new ArrayList<>();
151+
for(Long organizationId : organizationIds) {
152+
practitionerRoles = practitionerRoleService.getPractitionerRolesByOrgIdAndCode(organizationId,code);
153+
practitionerRoles.stream().forEach(practitionerRole -> practitionerIdentifiers.add(practitionerRole.getPractitionerIdentifier()));
154+
}
155+
156+
// Now get all practitioners by the given Ids
157+
return getPractitionersByIdentifiers(practitionerIdentifiers);
158+
}
137159
}

src/test/java/org/opensrp/repository/postgres/PractitionerRepositoryTest.java

100644100755
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.Collections;
99
import java.util.HashSet;
1010
import java.util.List;
11+
import java.util.ArrayList;
1112
import java.util.Set;
1213

1314
import org.junit.BeforeClass;
@@ -355,4 +356,21 @@ public void testGetAllPractitioners() {
355356
assertEquals("practitoner-2-identifier",practitioners.get(1).getIdentifier());
356357
}
357358

359+
@Test
360+
public void testGetAllPractitionersByIdentifiers() {
361+
Practitioner practitioner1 = initTestPractitioner1();
362+
practitionerRepository.add(practitioner1);
363+
Practitioner practitioner2 = initTestPractitioner2();
364+
practitionerRepository.add(practitioner2);
365+
366+
List<String> practitionerIdentifiers = new ArrayList<>();
367+
practitionerIdentifiers.add("practitoner-1-identifier");
368+
practitionerIdentifiers.add("practitoner-2-identifier");
369+
List<Practitioner> practitioners = practitionerRepository.getAllPractitionersByIdentifiers(practitionerIdentifiers);
370+
assertNotNull(practitioners);
371+
assertEquals(2,practitioners.size());
372+
assertEquals("Practitioner",practitioners.get(0).getName());
373+
assertEquals("Second Practitioner",practitioners.get(1).getName());
374+
}
375+
358376
}

src/test/java/org/opensrp/repository/postgres/PractitionerRoleRepositoryTest.java

100644100755
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.junit.BeforeClass;
44
import org.junit.Test;
5+
import org.opensrp.domain.Organization;
6+
import org.opensrp.repository.OrganizationRepository;
57
import org.smartregister.domain.PractitionerRole;
68
import org.smartregister.domain.PractitionerRoleCode;
79
import org.opensrp.repository.PractitionerRoleRepository;
@@ -13,6 +15,7 @@
1315
import java.util.HashSet;
1416
import java.util.List;
1517
import java.util.Set;
18+
import java.util.UUID;
1619

1720
import static org.junit.Assert.assertEquals;
1821
import static org.junit.Assert.assertNotNull;
@@ -24,6 +27,9 @@ public class PractitionerRoleRepositoryTest extends BaseRepositoryTest {
2427
@Autowired
2528
private PractitionerRoleRepository practitionerRoleRepository;
2629

30+
@Autowired
31+
private OrganizationRepository organizationRepository;
32+
2733
@BeforeClass
2834
public static void bootStrap() {
2935
tableNames= Arrays.asList("team.organization","team.practitioner","team.practitioner_role");
@@ -292,6 +298,36 @@ public void testGetAllPractitionerRoles() {
292298
assertEquals("pr2-identifier", practitionerRoles.get(1).getIdentifier());
293299
}
294300

301+
@Test
302+
public void testGetPractitionerRolesByOrgIdAndCode() {
303+
String identifier = UUID.randomUUID().toString();
304+
Organization organization = new Organization();
305+
organization.setIdentifier(identifier);
306+
organization.setName("Ateam");
307+
organization.setPartOf(1l);
308+
organization.setActive(true);
309+
organizationRepository.add(organization);
310+
311+
Organization addedOrganization = organizationRepository.get(identifier);
312+
313+
PractitionerRole practitionerRole1 = initTestPractitionerRole1();
314+
practitionerRole1.setOrganizationIdentifier(identifier);
315+
practitionerRoleRepository.add(practitionerRole1);
316+
317+
PractitionerRole practitionerRole2 = initTestPractitionerRole2();
318+
practitionerRole2.setOrganizationIdentifier(identifier);
319+
practitionerRoleRepository.add(practitionerRole2);
320+
321+
List<PractitionerRole> practitionerRoles = practitionerRoleRepository.getPractitionerRolesByOrgIdAndCode(addedOrganization.getId(), "pr2Code");
322+
assertNotNull(practitionerRoles);
323+
assertEquals(1l, practitionerRoles.size());
324+
assertEquals("pr2-identifier", practitionerRoles.get(0).getIdentifier());
325+
assertEquals("p2-identifier", practitionerRoles.get(0).getPractitionerIdentifier());
326+
assertEquals(identifier, practitionerRoles.get(0).getOrganizationIdentifier());
327+
assertEquals("pr2Code", practitionerRoles.get(0).getCode().getText());
328+
329+
}
330+
295331
private static PractitionerRole initTestPractitionerRole1(){
296332
PractitionerRole practitionerRole = new PractitionerRole();
297333
practitionerRole.setIdentifier("pr1-identifier");

src/test/java/org/opensrp/service/PractitionerRoleServiceTest.java

100644100755
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,28 @@ public void testGetPgRolesForPractitionerWithNullIdentifier() {
196196
verify(practitionerRoleRepository, never()).getPgRolesForPractitioner(anyString());
197197
}
198198

199+
@Test
200+
public void testGetPractitionerRolesByOrgIdAndCode() {
201+
PractitionerRole practitionerRole1 = initTestPractitionerRole();
202+
practitionerRoleRepository.add(practitionerRole1);
203+
204+
PractitionerRole practitionerRole2 = initTestPractitionerRole2();
205+
practitionerRoleRepository.add(practitionerRole2);
206+
207+
List<PractitionerRole> practitionerRoles = new ArrayList<>();
208+
practitionerRoles.add(practitionerRole1);
209+
practitionerRoles.add(practitionerRole2);
210+
211+
when(practitionerRoleRepository.getPractitionerRolesByOrgIdAndCode(anyLong(), anyString())).thenReturn(practitionerRoles);
212+
assertNotNull(practitionerRoles);
213+
assertEquals(2l, practitionerRoles.size());
214+
assertEquals("pr1-identifier", practitionerRoles.get(0).getIdentifier());
215+
assertEquals("p1-identifier", practitionerRoles.get(0).getPractitionerIdentifier());
216+
assertEquals("pr2-identifier", practitionerRoles.get(1).getIdentifier());
217+
assertEquals("p2-identifier", practitionerRoles.get(1).getPractitionerIdentifier());
218+
219+
}
220+
199221
private static PractitionerRole initTestPractitionerRole(){
200222
PractitionerRole practitionerRole = new PractitionerRole();
201223
practitionerRole.setIdentifier("pr1-identifier");
@@ -207,4 +229,16 @@ private static PractitionerRole initTestPractitionerRole(){
207229
practitionerRole.setCode(code);
208230
return practitionerRole;
209231
}
232+
233+
private static PractitionerRole initTestPractitionerRole2(){
234+
PractitionerRole practitionerRole = new PractitionerRole();
235+
practitionerRole.setIdentifier("pr2-identifier");
236+
practitionerRole.setActive(true);
237+
practitionerRole.setOrganizationIdentifier("org1");
238+
practitionerRole.setPractitionerIdentifier("p2-identifier");
239+
PractitionerRoleCode code = new PractitionerRoleCode();
240+
code.setText("pr2Code");
241+
practitionerRole.setCode(code);
242+
return practitionerRole;
243+
}
210244
}

src/test/java/org/opensrp/service/PractitionerServiceTest.java

100644100755
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@
88
import org.opensrp.repository.PractitionerRepository;
99
import org.opensrp.search.PractitionerSearchBean;
1010
import org.powermock.modules.junit4.PowerMockRunner;
11+
import org.smartregister.domain.PractitionerRole;
12+
import org.smartregister.domain.PractitionerRoleCode;
1113

1214
import java.util.ArrayList;
15+
import java.util.Arrays;
1316
import java.util.Collections;
1417
import java.util.List;
1518

@@ -165,6 +168,60 @@ public void testGetPractionerByUsername() {
165168

166169
}
167170

171+
@Test
172+
public void testGetPractitionersByIdentifiers() {
173+
Practitioner practitioner1 = initTestPractitioner();
174+
Practitioner practitioner2 = initTestPractitioner2();
175+
List<Practitioner> practitioners = new ArrayList<>();
176+
practitioners.add(practitioner1);
177+
practitioners.add(practitioner2);
178+
179+
when(practitionerRepository.getAllPractitionersByIdentifiers(any(List.class))).thenReturn(practitioners);
180+
181+
List<String> identifiers = new ArrayList<>();
182+
identifiers.add("practitoner-1-identifier");
183+
identifiers.add("practitoner-2-identifier");
184+
List<Practitioner> actual = practitionerService.getPractitionersByIdentifiers(identifiers);
185+
186+
verify(practitionerRepository).getAllPractitionersByIdentifiers(identifiers);
187+
assertEquals(practitioners.size(), actual.size());
188+
assertEquals(practitioners.get(0).getName(), actual.get(0).getName());
189+
assertEquals(practitioners.get(1).getName(), actual.get(1).getName());
190+
}
191+
192+
@Test
193+
public void testGetAssignedPractitionersByIdentifierAndCode() {
194+
PractitionerRole practitionerRole = initTestPractitionerRole1();
195+
PractitionerRole practitionerRole2 = initTestPractitionerRole2();
196+
197+
List<PractitionerRole> practitionerRoles = new ArrayList<>();
198+
practitionerRoles.add(practitionerRole);
199+
practitionerRoles.add(practitionerRole2);
200+
201+
List<org.opensrp.domain.postgres.PractitionerRole> roles = new ArrayList<>();
202+
List<Long> organizationIds = Arrays.asList(11l, 40l,7667l);
203+
for(long id:organizationIds) {
204+
org.opensrp.domain.postgres.PractitionerRole role = new org.opensrp.domain.postgres.PractitionerRole();
205+
role.setOrganizationId(id);
206+
roles.add(role);
207+
}
208+
209+
Practitioner practitioner1 = initTestPractitioner();
210+
Practitioner practitioner2 = initTestPractitioner2();
211+
List<Practitioner> practitioners = new ArrayList<>();
212+
practitioners.add(practitioner1);
213+
practitioners.add(practitioner2);
214+
when(practitionerRoleService.getPgRolesForPractitioner(anyString())).thenReturn(roles);
215+
when(practitionerRoleService.getPractitionerRolesByOrgIdAndCode(anyLong(),anyString())).thenReturn(practitionerRoles);
216+
when(practitionerRepository.getAllPractitionersByIdentifiers(any(List.class))).thenReturn(practitioners);
217+
218+
List<Practitioner> actual = practitionerService.getAssignedPractitionersByIdentifierAndCode("test-identifier","pr1Code");
219+
220+
assertEquals(practitioners.size(), actual.size());
221+
assertEquals(practitioners.get(0).getName(), actual.get(0).getName());
222+
assertEquals(practitioners.get(1).getName(), actual.get(1).getName());
223+
}
224+
168225
private Practitioner initTestPractitioner(){
169226
Practitioner practitioner = new Practitioner();
170227
practitioner.setIdentifier("practitoner-1-identifier");
@@ -174,4 +231,38 @@ private Practitioner initTestPractitioner(){
174231
practitioner.setUserId("user1");
175232
return practitioner;
176233
}
234+
235+
private Practitioner initTestPractitioner2(){
236+
Practitioner practitioner = new Practitioner();
237+
practitioner.setIdentifier("practitoner-2-identifier");
238+
practitioner.setActive(true);
239+
practitioner.setName("Practitioner 2");
240+
practitioner.setUsername("Practioner2");
241+
practitioner.setUserId("user2");
242+
return practitioner;
243+
}
244+
245+
private static PractitionerRole initTestPractitionerRole1(){
246+
PractitionerRole practitionerRole = new PractitionerRole();
247+
practitionerRole.setIdentifier("pr1-identifier");
248+
practitionerRole.setActive(true);
249+
practitionerRole.setOrganizationIdentifier("org1");
250+
practitionerRole.setPractitionerIdentifier("p1-identifier");
251+
PractitionerRoleCode code = new PractitionerRoleCode();
252+
code.setText("pr1Code");
253+
practitionerRole.setCode(code);
254+
return practitionerRole;
255+
}
256+
257+
private static PractitionerRole initTestPractitionerRole2(){
258+
PractitionerRole practitionerRole = new PractitionerRole();
259+
practitionerRole.setIdentifier("pr2-identifier");
260+
practitionerRole.setActive(true);
261+
practitionerRole.setOrganizationIdentifier("org1");
262+
practitionerRole.setPractitionerIdentifier("p2-identifier");
263+
PractitionerRoleCode code = new PractitionerRoleCode();
264+
code.setText("pr2Code");
265+
practitionerRole.setCode(code);
266+
return practitionerRole;
267+
}
177268
}

0 commit comments

Comments
 (0)