Skip to content
MembershipsDAOTest.java 4.77 KiB
Newer Older
package it.inaf.ia2.gms.persistence;

import it.inaf.ia2.gms.DataSourceConfig;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.MembershipEntity;
import java.util.ArrayList;
import java.util.Arrays;
import javax.sql.DataSource;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = DataSourceConfig.class)
public class MembershipsDAOTest {

    private static final String USER_1 = "user-1";
    private static final String USER_2 = "user-2";

    @Autowired
    private DataSource dataSource;

    private GroupsDAO groupsDAO;
    private MembershipsDAO membershipsDAO;

    @Before
    public void setUp() {
        groupsDAO = new GroupsDAO(dataSource);
        membershipsDAO = new MembershipsDAO(dataSource);
    }

    @Test
    public void testAddAndRemoveMembers() {
Sonia Zorba's avatar
Sonia Zorba committed
        groupsDAO.createGroup(groupEntity("A", "A"));
        groupsDAO.createGroup(groupEntity("B", "B"));

        assertTrue(membershipsDAO.findByGroup("A").isEmpty());

        membershipsDAO.addMember(membershipEntity(USER_1, "A"));
        membershipsDAO.addMember(membershipEntity(USER_1, "B"));
        membershipsDAO.addMember(membershipEntity(USER_2, "B"));

        assertTrue(membershipsDAO.findByGroup("A").contains(membershipEntity(USER_1, "A")));
        assertEquals(3, membershipsDAO.findByGroups(Arrays.asList("A", "B")).size());
        assertEquals(2, membershipsDAO.getUserMemberships(USER_1).size());
        assertEquals(1, membershipsDAO.getUserMemberships(USER_2, "").size());

        assertTrue(membershipsDAO.isMemberOf(USER_1, "B"));
        membershipsDAO.removeMembership("B", USER_1);
        assertFalse(membershipsDAO.isMemberOf(USER_1, "B"));

        assertTrue(membershipsDAO.isMemberOf(USER_1, "A"));
        assertTrue(membershipsDAO.isMemberOf(USER_2, "B"));
        membershipsDAO.deleteAllGroupsMembership(Arrays.asList("A", "B"));
        assertFalse(membershipsDAO.isMemberOf(USER_1, "A"));
        assertFalse(membershipsDAO.isMemberOf(USER_2, "B"));
    }

    @Test
    public void testFindByGroupsEmptyList() {
        assertTrue(membershipsDAO.findByGroups(new ArrayList<>()).isEmpty());
    }

    @Test
    public void testDeleteAllGroupsMembershipEmptyList() {
        membershipsDAO.deleteAllGroupsMembership(new ArrayList<>());
    }

Sonia Zorba's avatar
Sonia Zorba committed
    @Test
    public void testIsMemberOfRecursive() {

        groupsDAO.createGroup(groupEntity("ROOT", ""));

        groupsDAO.createGroup(groupEntity("A", "A"));
        groupsDAO.createGroup(groupEntity("E", "A.E"));
        groupsDAO.createGroup(groupEntity("F", "A.E.F"));

        groupsDAO.createGroup(groupEntity("B", "B"));
        groupsDAO.createGroup(groupEntity("C", "B.C"));
        groupsDAO.createGroup(groupEntity("D", "B.C.D"));

        membershipsDAO.addMember(membershipEntity(USER_1, "F"));
        membershipsDAO.addMember(membershipEntity(USER_1, "C"));

        assertFalse(membershipsDAO.isMemberOf(USER_1, "ROOT"));
        assertFalse(membershipsDAO.isMemberOf(USER_1, "A"));
        assertFalse(membershipsDAO.isMemberOf(USER_1, "B"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "C"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "D"));
        assertFalse(membershipsDAO.isMemberOf(USER_1, "E"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "F"));

        membershipsDAO.addMember(membershipEntity(USER_1, "ROOT"));

        assertTrue(membershipsDAO.isMemberOf(USER_1, "ROOT"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "A"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "B"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "C"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "D"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "E"));
        assertTrue(membershipsDAO.isMemberOf(USER_1, "F"));

        assertFalse(membershipsDAO.isMemberOf(USER_1, "inexistent-id"));
    }

    private GroupEntity groupEntity(String groupId, String groupPath) {
        GroupEntity groupEntity = new GroupEntity();
        groupEntity.setId(groupId);
        groupEntity.setName(groupId);
Sonia Zorba's avatar
Sonia Zorba committed
        groupEntity.setPath(groupPath);
        groupEntity.setLeaf(false);
        return groupEntity;
    }

    private MembershipEntity membershipEntity(String userId, String groupId) {
        MembershipEntity membershipEntity = new MembershipEntity();
        membershipEntity.setUserId(userId);
        membershipEntity.setGroupId(groupId);
        return membershipEntity;
    }
}