package fi.koku.services.entity.community; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.*; import fi.koku.services.entity.community.v1.CommunitiesType; import fi.koku.services.entity.community.v1.CommunityQueryCriteriaType; import fi.koku.services.entity.community.v1.CommunityServiceFactory; import fi.koku.services.entity.community.v1.CommunityServicePortType; import fi.koku.services.entity.community.v1.CommunityType; import fi.koku.services.entity.community.v1.MemberPicsType; import fi.koku.services.entity.community.v1.MemberType; import fi.koku.services.entity.community.v1.MembersType; import fi.koku.services.entity.community.v1.AuditInfoType; import fi.koku.services.entity.community.v1.ServiceFault; import fi.koku.services.test.util.TestDbUtils; import fi.koku.services.test.util.TestPropertiesUtil; /** * Integration tests for community service. * * @author laukksa * */ public class CommunityServiceBeanIT { JdbcTemplate jdbcTemplate = TestDbUtils.getJdbcTemplateInstance(); @Before public void beforeTest() { TestDbUtils.deleteFromAllTables(jdbcTemplate); } @Test public void testQueryCommunities() throws ServiceFault { CommunityServicePortType communityService = getCommunityServicePort(); AuditInfoType audit = getAudit(); CommunityType community = new CommunityType(); community.setName("Community 1"); community.setType("FAMILY"); MembersType members = new MembersType(); MemberType member = new MemberType(); member.setId("12347"); member.setPic("123456-110K"); member.setRole("CHILD"); members.getMember().add(member); member = new MemberType(); member.setId("12346"); member.setPic("123456-123A"); member.setRole("MOTHER"); members.getMember().add(member); community.setMembers(members); String community1Id = communityService.opAddCommunity(community, audit); community = new CommunityType(); community.setName("Community 2"); community.setType("FAMILY"); members = new MembersType(); member = new MemberType(); member.setId("12345"); member.setPic("111456-163A"); member.setRole("OTHER"); members.getMember().add(member); community.setMembers(members); String community2Id = communityService.opAddCommunity(community, audit); community = new CommunityType(); community.setName("Community 3"); community.setType("OTHER"); members = new MembersType(); member = new MemberType(); member.setId("12345"); member.setPic("111456-100A"); member.setRole("OTHER"); members.getMember().add(member); member = new MemberType(); member.setId("12345"); member.setPic("111456-163A"); member.setRole("FATHER"); members.getMember().add(member); community.setMembers(members); String community3Id = communityService.opAddCommunity(community, audit); CommunityQueryCriteriaType criteria = new CommunityQueryCriteriaType(); MemberPicsType pics = new MemberPicsType(); pics.getMemberPic().add("123456-110K"); pics.getMemberPic().add("111456-100A"); criteria.setMemberPics(pics); CommunitiesType communities = communityService.opQueryCommunities(criteria, audit); assertThat(communities.getCommunity().size(), is(2)); assertThat(getCommunityType(communities, community1Id).getMembers().getMember().size(), is(2)); assertThat(getCommunityType(communities, community3Id).getMembers().getMember().size(), is(2)); assertThat(communitiesContains(communities, community1Id, community3Id), is(true)); pics = new MemberPicsType(); // Belongs to only one community pics.getMemberPic().add("111456-100A"); criteria.setMemberPics(pics); communities = communityService.opQueryCommunities(criteria, audit); assertThat(communities.getCommunity().size(), is(1)); assertThat(communitiesContains(communities, community3Id), is(true)); pics = new MemberPicsType(); // Belongs to two communities pics.getMemberPic().add("111456-163A"); criteria.setMemberPics(pics); communities = communityService.opQueryCommunities(criteria, audit); assertThat(communities.getCommunity().size(), is(2)); assertThat(communitiesContains(communities, community2Id, community3Id), is(true)); // "OTHER" type should be filtered out criteria.setCommunityType("FAMILY"); communities = communityService.opQueryCommunities(criteria, audit); assertThat(communities.getCommunity().size(), is(1)); assertThat(communitiesContains(communities, community2Id), is(true)); } private boolean communitiesContains(CommunitiesType communities, String...expectedCommunityIds) { List<String> communityIds = new ArrayList<String>(); for (CommunityType community : communities.getCommunity()) { communityIds.add(community.getId()); } return communityIds.containsAll(Arrays.asList(expectedCommunityIds)); } private CommunityType getCommunityType(CommunitiesType communities, String communityId) { for (CommunityType community : communities.getCommunity()) { if (community.getId().equals(communityId)) { return community; } } return null; } private CommunityServicePortType getCommunityServicePort() { return new CommunityServiceFactory(TestPropertiesUtil.getProperty(TestPropertiesUtil.KOKU_SRV_LAYER_WS_USERNAME), TestPropertiesUtil.getProperty(TestPropertiesUtil.KOKU_SRV_LAYER_WS_PWD), TestPropertiesUtil.getProperty(TestPropertiesUtil.KOKU_CUSTOMER_SRV_ENDPOINT_ADDRESS)).getCommunityService(); } private AuditInfoType getAudit() { AuditInfoType audit = new AuditInfoType(); audit.setComponent("kks"); audit.setUserId("integration-test"); return audit; } }