/* Copyright 2015 Danish Maritime Authority.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.maritimecloud.serviceregistry.command.organization.membership;
import net.maritimecloud.common.infrastructure.axon.CommonFixture;
import static net.maritimecloud.common.infrastructure.axon.CommonFixture.A_NAME;
import static net.maritimecloud.common.infrastructure.axon.CommonFixture.anOrganizationId;
import net.maritimecloud.common.infrastructure.axon.RepositoryMock;
import net.maritimecloud.serviceregistry.command.api.AcceptUsersMembershipApplication;
import net.maritimecloud.serviceregistry.command.api.AcceptMembershipToOrganization;
import net.maritimecloud.serviceregistry.command.api.ApplyForMembershipToOrganization;
import net.maritimecloud.serviceregistry.command.api.InviteUserToOrganization;
import net.maritimecloud.serviceregistry.command.api.OrganizationAcceptedMembershipApplication;
import net.maritimecloud.serviceregistry.command.api.OrganizationMembershipAssignedToOwner;
import net.maritimecloud.serviceregistry.command.api.UserAcceptedMembershipToOrganization;
import net.maritimecloud.serviceregistry.command.api.UserAppliedForMembershipToOrganization;
import net.maritimecloud.serviceregistry.command.api.UserInvitedToOrganization;
import net.maritimecloud.serviceregistry.command.organization.Organization;
import net.maritimecloud.serviceregistry.command.organization.OrganizationCommandHandler;
import net.maritimecloud.serviceregistry.query.OrganizationMembershipQueryRepository;
import org.axonframework.test.FixtureConfiguration;
import org.axonframework.test.Fixtures;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
/**
*
* @author Christoffer Børrild
*/
public class MembershipTest extends CommonFixture {
private FixtureConfiguration<Membership> fixture;
private static final MembershipId aMembershipId = new MembershipId("A_MEMBERSHIP_ID");
private final OrganizationCommandHandler organizationCommandHandler = new OrganizationCommandHandler();
@Mock
private OrganizationMembershipQueryRepository membershipQueryRepository;
@Before
public void setUp() {
fixture = Fixtures.newGivenWhenThenFixture(Membership.class);
Organization anOrganization = new Organization(generateCreateOrganizationCommand(AN_ORG_ID)) {
@Override
public boolean isDeleted() {
return false;
}
};
organizationCommandHandler.setOrganizationRepository(new RepositoryMock(anOrganization));
organizationCommandHandler.setMembershipRepository(fixture.getRepository());
membershipQueryRepository = Mockito.mock(OrganizationMembershipQueryRepository.class);
organizationCommandHandler.setMembershipQueryRepository(membershipQueryRepository);
fixture.registerAnnotatedCommandHandler(organizationCommandHandler);
}
@Test
public void requestMembershipToOrganization() throws Exception {
// Given an organization and a user
// and no existing membership
Mockito.when(membershipQueryRepository.findByOrganizationIdAndUsername(AN_ORG_ID, A_NAME)).thenReturn(null);
fixture.givenNoPriorActivity()
.when(new ApplyForMembershipToOrganization(anOrganizationId, aMembershipId, A_NAME, "Let me in"))
.expectEvents(new UserAppliedForMembershipToOrganization(aMembershipId, anOrganizationId, A_NAME, "Let me in"));
}
@Test
public void inviteUserToOrganization() throws Exception {
// Given an organization and a user
// and no existing membership
Mockito.when(membershipQueryRepository.findByOrganizationIdAndUsername(AN_ORG_ID, A_NAME)).thenReturn(null);
fixture.givenNoPriorActivity()
.when(new InviteUserToOrganization(anOrganizationId, aMembershipId, A_NAME))
.expectEvents(new UserInvitedToOrganization(aMembershipId, anOrganizationId, A_NAME));
}
@Test
public void acceptUsersMembershipApplication() throws Exception {
fixture.given(
new UserAppliedForMembershipToOrganization(aMembershipId, anOrganizationId, A_NAME, "Let me in")
).when(new AcceptUsersMembershipApplication(aMembershipId)
).expectEvents(
new OrganizationAcceptedMembershipApplication(aMembershipId, anOrganizationId, A_NAME),
new OrganizationMembershipAssignedToOwner(aMembershipId, anOrganizationId, A_NAME)
);
}
@Test
public void acceptMembershipToOrganization() throws Exception {
fixture.given(
new UserInvitedToOrganization(aMembershipId, anOrganizationId, A_NAME)
).when(
new AcceptMembershipToOrganization(aMembershipId)
).expectEvents(
new UserAcceptedMembershipToOrganization(aMembershipId, anOrganizationId, A_NAME),
new OrganizationMembershipAssignedToOwner(aMembershipId, anOrganizationId, A_NAME)
);
}
}