/*
* Copyright 2012 the original author or authors.
*
* 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 com.springsource.greenhouse.invite;
import static org.junit.Assert.*;
import org.junit.Rule;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import org.springframework.test.transaction.Transactional;
import org.springframework.web.util.UriTemplate;
import com.springsource.greenhouse.account.Account;
import com.springsource.greenhouse.activity.action.Action;
import com.springsource.greenhouse.activity.action.ActionGateway;
import com.springsource.greenhouse.activity.action.JdbcActionRepository;
import com.springsource.greenhouse.database.GreenhouseTestDatabaseBuilder;
public class JdbcInviteRepositoryTest {
private JdbcTemplate jdbcTemplate;
private JdbcInviteRepository inviteRepository;
public JdbcInviteRepositoryTest() {
EmbeddedDatabase db = new GreenhouseTestDatabaseBuilder().member().activity().invite().testData(getClass()).getDatabase();
transactional = new Transactional(db);
jdbcTemplate = new JdbcTemplate(db);
JdbcActionRepository actionRepository = new JdbcActionRepository(jdbcTemplate, new ActionGateway() {
public void actionPerformed(Action action) {
}
});
inviteRepository = new JdbcInviteRepository(jdbcTemplate, actionRepository);
}
@Test
public void getInvite() throws InviteException {
Invite details = inviteRepository.findInvite("abc");
assertEquals("Keith", details.getInvitee().getFirstName());
assertEquals("Donald", details.getInvitee().getLastName());
assertEquals("keith.donald@springsource.com", details.getInvitee().getEmail());
assertEquals("rclarkson", details.getSentBy().getId());
assertEquals("Roy Clarkson", details.getSentBy().getLabel());
}
@Test(expected=InviteAlreadyAcceptedException.class)
public void inviteAlreadyAccepted() throws InviteException {
inviteRepository.findInvite("def");
}
@Test(expected=NoSuchInviteException.class)
public void noSuchInvite() throws InviteException {
inviteRepository.findInvite("bogus");
}
@Test
public void markInviteAccepted() throws InviteException {
jdbcTemplate.update("insert into Member (firstName, lastName, email, password, username, gender, birthdate) values ('Keith', 'Donald', 'keith.donald@springsource.com', 'kdonald', 'melbourne', 'M', '1977-12-01')");
Account signedUp = new Account(3L, "Keith", "Donald", "keith.donald@springsource.com", "kdonald", "http://localhost:8080/resources/profile-pics/3.jpg", new UriTemplate("http://localhost:8080/members/{id}"));
inviteRepository.markInviteAccepted("abc", signedUp);
try {
inviteRepository.findInvite("abc");
fail("Should have failed already accepted");
} catch (InviteAlreadyAcceptedException e) {
}
}
@Rule
public Transactional transactional;
}