/*
* 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.events.load;
import static org.junit.Assert.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.joda.time.tz.CachedDateTimeZone;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase;
import com.springsource.greenhouse.database.GreenhouseTestDatabaseBuilder;
import com.springsource.greenhouse.events.Event;
import com.springsource.greenhouse.events.EventRepository;
import com.springsource.greenhouse.events.JdbcEventRepository;
import com.springsource.greenhouse.events.Venue;
public class JdbcEventLoaderRepositoryTest {
private EmbeddedDatabase db;
private JdbcTemplate jdbcTemplate;
private EventRepository eventRepository;
private EventLoaderRepository eventLoaderRepository;
@Before
public void setup() {
db = new GreenhouseTestDatabaseBuilder().member().group().activity().invite().venue().event().testData(getClass()).getDatabase();
jdbcTemplate = new JdbcTemplate(db);
eventLoaderRepository = new JdbcEventLoaderRepository(jdbcTemplate);
eventRepository = new JdbcEventRepository(jdbcTemplate);
}
@After
public void destroy() {
if (db != null) {
db.shutdown();
}
}
@Test
public void loadEventData() {
long eventId = eventLoaderRepository.loadEvent(
new EventData(1, "Test Event", "Test Event Description", "test", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "America/New_York", "NFJS", 297),
new VenueData("Some Fancy Hotel", "1234 North Street, Chicago, IL 60605", 41.89001, -87.677765, "It's in Illinois"));
assertEquals(1L, eventId);
Event event = eventRepository.findEventBySlug("s2gx", 2012, 10, "test");
assertEquals(1L, event.getId().longValue());
assertEquals("Test Event", event.getTitle());
assertEquals("test", event.getSlug());
assertEquals("Test Event Description", event.getDescription());
// assertEquals(new DateTime(2012, 10, 15, 1, 0, 0, 0, event.getTimeZone()), event.getStartTime().withZone(event.getTimeZone()));
// assertEquals(new DateTime(2012, 10, 19, 0, 59, 59, 0, event.getTimeZone()), event.getEndTime().withZone(event.getTimeZone()));
assertEquals(CachedDateTimeZone.forID("America/New_York"), event.getTimeZone());
Set<Venue> venues = event.getVenues();
assertEquals(1, venues.size());
Venue venue = new ArrayList<Venue>(venues).get(0);
assertEquals("Some Fancy Hotel", venue.getName());
assertEquals("1234 North Street, Chicago, IL 60605", venue.getPostalAddress());
assertEquals(41.89001, venue.getLocation().getLatitude().doubleValue(), .000000000001);
assertEquals(-87.677765, venue.getLocation().getLongitude().doubleValue(), .000000000001);
assertEquals("It's in Illinois", venue.getLocationHint());
}
@Test
public void updateEventData() {
long eventId = eventLoaderRepository.loadEvent(
new EventData(1, "Test Event", "Test Event Description", "test", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "America/New_York", "NFJS", 297),
new VenueData("Some Fancy Hotel", "1234 North Street, Chicago, IL 60605", 41.89001, -87.677765, "It's in Illinois"));
assertEquals(1L, eventId);
Event event = eventRepository.findEventBySlug("s2gx", 2012, 10, "test");
assertEquals("Test Event", event.getTitle());
Set<Venue> venues = event.getVenues();
assertEquals(1, venues.size());
Venue venue = new ArrayList<Venue>(venues).get(0);
assertEquals("Some Fancy Hotel", venue.getName());
long updatedEventId = eventLoaderRepository.loadEvent(
new EventData(1, "Updated Event", "Test Event Description", "test", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "America/New_York", "NFJS", 297),
new VenueData("Some Conference Hall", "1234 North Street, Chicago, IL 60605", 41.89001, -87.677765, "It's in Illinois"));
assertEquals(1L, updatedEventId);
Event updatedEvent = eventRepository.findEventBySlug("s2gx", 2012, 10, "test");
assertEquals("Updated Event", updatedEvent.getTitle());
Set<Venue> updatedVenues = updatedEvent.getVenues();
assertEquals(1, updatedVenues.size());
Venue updatedVenue = new ArrayList<Venue>(updatedVenues).get(0);
assertEquals("Some Conference Hall", updatedVenue.getName());
}
@Test
public void loadLeaderData() throws SQLException {
long leaderId = eventLoaderRepository.loadLeader(new LeaderData("Craig Walls", "Craig is the Spring Social project lead", "http://www.habuma.com", "habuma", "NFJS", 1234));
assertEquals(1L, leaderId);
jdbcTemplate.queryForObject("select id, name, bio, personalUrl, twitterUsername from Leader where id=?", new RowMapper<ResultSet>(){
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("id"));
assertEquals("Craig Walls", rs.getString("name"));
assertEquals("Craig is the Spring Social project lead", rs.getString("bio"));
assertEquals("http://www.habuma.com", rs.getString("personalUrl"));
assertEquals("habuma", rs.getString("twitterUsername"));
return null;
}
}, leaderId);
jdbcTemplate.queryForObject("select leader, sourceId, source from ExternalLeader where leader=?", new RowMapper<ResultSet>(){
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("leader"));
assertEquals(1234L, rs.getLong("sourceId"));
assertEquals("NFJS", rs.getString("source"));
return null;
}
}, leaderId);
}
@Test
public void loadTimeSlot() throws SQLException {
long eventId = eventLoaderRepository.loadEvent(
new EventData(1, "Test Event", "Test Event Description", "test", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "America/New_York", "NFJS", 297),
new VenueData("Some Fancy Hotel", "1234 North Street, Chicago, IL 60605", 41.89001, -87.677765, "It's in Illinois"));
long timeSlotId = eventLoaderRepository.loadTimeSlot(new TimeSlotData(eventId, "Time Slot 1", "2012-10-15T00:00:00", "2012-10-15T01:30:00", "NFJS", 6296));
assertEquals(1L, timeSlotId);
jdbcTemplate.queryForObject("select id, event, label, startTime, endTime from EventTimeSlot where id=?", new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("id"));
assertEquals(1L, rs.getLong("event"));
assertEquals("Time Slot 1", rs.getString("label"));
Timestamp startTime = rs.getTimestamp("startTime");
Timestamp endTime = rs.getTimestamp("endTime");
// assertEquals(new DateTime(2012, 10, 15, 0, 0, 0, 0, DateTimeZone.getDefault()).getMillis(), startTime.getTime());
// assertEquals(new DateTime(2012, 10, 15, 1, 30, 0, 0, DateTimeZone.getDefault()).getMillis(), endTime.getTime());
return null;
}
}, timeSlotId);
}
@Test
public void updateTimeSlot() throws SQLException {
long eventId = eventLoaderRepository.loadEvent(
new EventData(1, "Test Event", "Test Event Description", "test", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "America/New_York", "NFJS", 297),
new VenueData("Some Fancy Hotel", "1234 North Street, Chicago, IL 60605", 41.89001, -87.677765, "It's in Illinois"));
long timeSlotId = eventLoaderRepository.loadTimeSlot(new TimeSlotData(eventId, "Time Slot 1", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "NFJS", 6296));
assertEquals(1L, timeSlotId);
jdbcTemplate.queryForObject("select id, event, label, startTime, endTime from EventTimeSlot where id=?", new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("id"));
assertEquals(1L, rs.getLong("event"));
Timestamp startTime = rs.getTimestamp("startTime");
Timestamp endTime = rs.getTimestamp("endTime");
// assertEquals(new DateTime(2012, 10, 15, 0, 0, 0, 0, DateTimeZone.getDefault()).getMillis(), startTime.getTime());
// assertEquals(new DateTime(2012, 10, 18, 23, 59, 59, 0, DateTimeZone.getDefault()).getMillis(), endTime.getTime());
return null;
}
}, timeSlotId);
long updatedTimeSlotId = eventLoaderRepository.loadTimeSlot(new TimeSlotData(eventId, "Time Slot One", "2012-10-15T01:00:00", "2012-10-15T02:30:00", "NFJS", 6296));
assertEquals(1L, updatedTimeSlotId);
jdbcTemplate.queryForObject("select id, event, label, startTime, endTime from EventTimeSlot where id=?", new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("id"));
assertEquals(1L, rs.getLong("event"));
assertEquals("Time Slot One", rs.getString("label"));
Timestamp startTime = rs.getTimestamp("startTime");
Timestamp endTime = rs.getTimestamp("endTime");
// assertEquals(new DateTime(2012, 10, 15, 1, 0, 0, 0, DateTimeZone.getDefault()).getMillis(), startTime.getTime());
// assertEquals(new DateTime(2012, 10, 15, 2, 30, 0, 0, DateTimeZone.getDefault()).getMillis(), endTime.getTime());
return null;
}
}, updatedTimeSlotId);
}
@Test
public void loadEventSession() throws SQLException {
long eventId = eventLoaderRepository.loadEvent(
new EventData(1, "Test Event", "Test Event Description", "test", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "America/New_York", "NFJS", 297),
new VenueData("Some Fancy Hotel", "1234 North Street, Chicago, IL 60605", 41.89001, -87.677765, "It's in Illinois"));
long timeSlotId = eventLoaderRepository.loadTimeSlot(new TimeSlotData(eventId, "Time Slot 1", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "NFJS", 6296));
int eventSessionId = 1;
List<Long> leaderIds = Collections.emptyList();
eventLoaderRepository.loadEventSession(new EventSessionData(eventId, eventSessionId, "What's new in Spring", "Come find out what's new in Spring", "#newspring", 1L, timeSlotId, "NFJS", 24409L, leaderIds));
jdbcTemplate.queryForObject("select event, id, title, description, hashtag, venue, timeslot from EventSession where event=? and id=?", new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("event"));
assertEquals(1L, rs.getLong("id"));
assertEquals("What's new in Spring", rs.getString("title"));
assertEquals("Come find out what's new in Spring", rs.getString("description"));
assertEquals("#newspring", rs.getString("hashtag"));
assertEquals(1, rs.getLong("venue"));
assertEquals(1, rs.getLong("timeslot"));
return null;
}
}, eventId, eventSessionId);
}
@Test
public void updateEventSession() throws SQLException {
long eventId = eventLoaderRepository.loadEvent(
new EventData(1, "Test Event", "Test Event Description", "test", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "America/New_York", "NFJS", 297),
new VenueData("Some Fancy Hotel", "1234 North Street, Chicago, IL 60605", 41.89001, -87.677765, "It's in Illinois"));
long timeSlotId = eventLoaderRepository.loadTimeSlot(new TimeSlotData(eventId, "Time Slot 1", "2012-10-15T00:00:00", "2012-10-18T23:59:59", "NFJS", 6296));
int eventSessionId = 1;
List<Long> leaderIds = Collections.emptyList();
eventLoaderRepository.loadEventSession(new EventSessionData(eventId, eventSessionId, "What's new in Spring", "Come find out what's new in Spring", "#newspring", 1L, timeSlotId, "NFJS", 24409L, leaderIds));
jdbcTemplate.queryForObject("select event, id, title, description, hashtag, venue, timeslot from EventSession where event=? and id=?", new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("event"));
assertEquals(1L, rs.getLong("id"));
assertEquals("What's new in Spring", rs.getString("title"));
assertEquals("Come find out what's new in Spring", rs.getString("description"));
assertEquals("#newspring", rs.getString("hashtag"));
assertEquals(1, rs.getLong("venue"));
assertEquals(1, rs.getLong("timeslot"));
return null;
}
}, eventId, eventSessionId);
eventLoaderRepository.loadEventSession(new EventSessionData(eventId, eventSessionId, "What's new in Spring?", "Juergen gives the dish on the latest in Spring", "#spring3", 1L, timeSlotId, "NFJS", 24409L, leaderIds));
jdbcTemplate.queryForObject("select event, id, title, description, hashtag, venue, timeslot from EventSession where event=? and id=?", new RowMapper<ResultSet>() {
public ResultSet mapRow(ResultSet rs, int rowNum) throws SQLException {
assertEquals(1L, rs.getLong("event"));
assertEquals(1L, rs.getLong("id"));
assertEquals("What's new in Spring?", rs.getString("title"));
assertEquals("Juergen gives the dish on the latest in Spring", rs.getString("description"));
assertEquals("#spring3", rs.getString("hashtag"));
assertEquals(1, rs.getLong("venue"));
assertEquals(1, rs.getLong("timeslot"));
return null;
}
}, eventId, eventSessionId);
}
}