/* * Copyright 2002-2006 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 org.springframework.richclient.settings.jdbc; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.richclient.settings.Settings; import org.springframework.richclient.settings.SettingsAbstractTests; /** * @author Peter De Bruycker */ public class JdbcSettingsTests extends SettingsAbstractTests { private DataSource dataSource; private JdbcTemplate jdbcTemplate; public JdbcSettingsTests() { } protected Settings createSettings() { return new JdbcSettings(dataSource, "user", Integer.valueOf(5), "test"); } protected void doSetUp() throws Exception { dataSource = createDataSource(); jdbcTemplate = new JdbcTemplate(dataSource); // setup the schema jdbcTemplate.execute("DROP TABLE SETTINGS_VALUES IF EXISTS"); jdbcTemplate.execute("DROP TABLE SETTINGS IF EXISTS"); jdbcTemplate.execute("CREATE TABLE SETTINGS (ID INTEGER IDENTITY, KEY VARCHAR(250) NOT NULL, PARENT INTEGER, USER VARCHAR(250) NOT NULL, CONSTRAINT SYS_CT_52 UNIQUE(KEY,USER))"); jdbcTemplate.execute("CREATE TABLE SETTINGS_VALUES (SETTINGS_ID INTEGER NOT NULL, KEY VARCHAR(250) NOT NULL, VALUE VARCHAR(250), PRIMARY KEY(SETTINGS_ID,KEY), CONSTRAINT SYS_FK_48 FOREIGN KEY(SETTINGS_ID) REFERENCES SETTINGS(ID))"); } /** * Creates a <code>DataSource</code> using hsqldb in memory-only mode * @return the <code>DataSource</code> */ private static DataSource createDataSource() { DriverManagerDataSource ds = new DriverManagerDataSource(); ds.setDriverClassName("org.hsqldb.jdbcDriver"); ds.setUrl("jdbc:hsqldb:mem:test-database"); ds.setUsername("sa"); return ds; } public void testLoadExistingSettings() throws Exception { jdbcTemplate.execute("INSERT INTO SETTINGS (ID, KEY, USER) VALUES (55, 'test-key', 'test-user')"); jdbcTemplate.execute("INSERT INTO SETTINGS_VALUES (SETTINGS_ID, KEY, VALUE) VALUES (55, 'key0', 'true')"); jdbcTemplate.execute("INSERT INTO SETTINGS_VALUES (SETTINGS_ID, KEY, VALUE) VALUES (55, 'key1', '25')"); JdbcSettings settings = new JdbcSettings(dataSource, "test-user", Integer.valueOf(55), "test-key"); settings.load(); } public void testLoadHierarchy() throws Exception { } public void testSaveHierarchy() throws Exception { JdbcSettings settings = new JdbcSettings(dataSource, "test-user", null, "test-key"); settings.setBoolean("boolean-value", true); JdbcSettings childSettings = (JdbcSettings)settings.getSettings("child"); childSettings.setString("string", "test"); childSettings.save(); assertEquals(Integer.valueOf(0), settings.getId()); assertEquals(Integer.valueOf(1), childSettings.getId()); } public void testSaveNewSettings() throws Exception { JdbcSettings settings = new JdbcSettings(dataSource, "test-user", null, "test-key"); assertEquals("name not set", "test-key", settings.getName()); assertEquals("user not set", "test-user", settings.getUser()); assertNull("id must be null until first save", settings.getId()); settings.setBoolean("boolean-value", true); settings.setString("string-value", "value"); settings.save(); assertEquals(Integer.valueOf(0), settings.getId()); assertEquals(1, jdbcTemplate.queryForInt("SELECT count(*) FROM SETTINGS")); Map map = jdbcTemplate.queryForMap("SELECT * FROM SETTINGS WHERE ID = 0"); assertEquals(Integer.valueOf(0), map.get("ID")); assertEquals("test-key", map.get("KEY")); assertEquals(null, map.get("PARENT")); assertEquals("test-user", map.get("USER")); assertEquals(2, jdbcTemplate.queryForInt("SELECT count(*) FROM SETTINGS_VALUES")); List values = jdbcTemplate.queryForList("SELECT * FROM SETTINGS_VALUES"); assertEquals(2, values.size()); Map first = (Map) values.get(0); Map second = (Map) values.get(1); assertEquals(Integer.valueOf(0), first.get("SETTINGS_ID")); assertEquals(Integer.valueOf(0), second.get("SETTINGS_ID")); assertEquals("boolean-value", first.get("KEY")); assertEquals("true", first.get("VALUE")); assertEquals("string-value", second.get("KEY")); assertEquals("value", second.get("VALUE")); } }