/* * 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.develop; import static org.junit.Assert.*; import java.util.List; import org.junit.Rule; import org.junit.Test; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.security.crypto.encrypt.Encryptors; import org.springframework.test.transaction.Transactional; import com.springsource.greenhouse.database.GreenhouseTestDatabaseBuilder; public class JdbcAppRepositoryTest { private JdbcAppRepository appRepository; private JdbcTemplate jdbcTemplate; public JdbcAppRepositoryTest() { EmbeddedDatabase db = new GreenhouseTestDatabaseBuilder().member().connectedApp().testData(getClass()).getDatabase(); transactional = new Transactional(db); jdbcTemplate = new JdbcTemplate(db); appRepository = new JdbcAppRepository(jdbcTemplate, Encryptors.noOpText()); } @Test public void findAppSummaries() { List<AppSummary> summaries = appRepository.findAppSummaries(2L); assertEquals(1, summaries.size()); AppSummary summary = summaries.get(0); assertEquals("Greenhouse for Facebook", summary.getName()); assertEquals("Awesome", summary.getDescription()); assertEquals("http://images.greenhouse.springsource.org/apps/icon-default-app.png", summary.getIconUrl()); assertEquals("greenhouse-for-facebook", summary.getSlug()); summaries = appRepository.findAppSummaries(3L); assertEquals(2, summaries.size()); summary = summaries.get(0); assertEquals("Greenhouse for the iPhone", summary.getName()); summary = summaries.get(1); assertEquals("Greenhouse for the Android", summary.getName()); } @Test public void noAppSummaries() { assertEquals(0, appRepository.findAppSummaries(1L).size()); } @Test public void findAppBySlug() { App app = appRepository.findAppBySlug(3L, "greenhouse-for-the-iphone"); assertExpectedApp(app); } @Test public void findAppByApiKey() throws InvalidApiKeyException { App app = appRepository.findAppByApiKey("123456789"); assertExpectedApp(app); } @Test(expected=InvalidApiKeyException.class) public void findByAppKeyInvalidKey() throws InvalidApiKeyException { appRepository.findAppByApiKey("invalid"); } @Test public void createApp() { AppForm form = new AppForm(); form.setName("My App"); form.setDescription("My App Description"); String slug = appRepository.createApp(1L, form); assertEquals("my-app", slug); App app = appRepository.findAppBySlug(1L, slug); assertEquals("My App", app.getSummary().getName()); assertNotNull(app.getApiKey()); assertNotNull(app.getSecret()); assertEquals(null, app.getCallbackUrl()); } @Test public void updateApp() { AppForm form = appRepository.getAppForm(2L, "greenhouse-for-facebook"); form.setName("Greenhouse for Twitter"); form.setWebsite("http://www.twitter.com"); String slug = appRepository.updateApp(2L, "greenhouse-for-facebook", form); assertEquals("greenhouse-for-twitter", slug); form = appRepository.getAppForm(2L, "greenhouse-for-twitter"); assertEquals("Greenhouse for Twitter", form.getName()); assertEquals("http://www.twitter.com", form.getWebsite()); } @Test public void deleteApp() { appRepository.deleteApp(2L, "greenhouse-for-facebook"); assertEquals(0, appRepository.findAppSummaries(2L).size()); } private void assertExpectedApp(App app) { assertEquals("Greenhouse for the iPhone", app.getSummary().getName()); assertEquals("123456789", app.getApiKey()); assertNotNull("987654321", app.getSecret()); assertEquals("x-com-springsource-greenhouse://oauth-response", app.getCallbackUrl()); } @Rule public Transactional transactional; }