package kr.itn.itnhub; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.jdbc.core.JdbcTemplate; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; class SchemaMigrationTest extends AbstractDbTest { @Autowired JdbcTemplate jdbc; @Test void organization_테이블이_생성된다() { Integer count = jdbc.queryForObject( "select count(*) from information_schema.tables " + "where table_schema = 'itnhub' and table_name = 'organization'", Integer.class); assertThat(count).isEqualTo(1); } @Test void 연번과_기관명_조합에_유니크_제약이_있다() { jdbc.update("insert into organization (org_no, org_name, channel_slug) " + "values ('008', '경찰청', '008')"); // 같은 (org_no, org_name) 조합의 중복 삽입은 제약 위반으로 실패해야 한다. assertThatThrownBy(() -> jdbc.update( "insert into organization (org_no, org_name, channel_slug) " + "values ('008', '경찰청', '008-dup')")) .isInstanceOf(DataIntegrityViolationException.class); // org_no는 같지만 org_name이 다르면(경찰청_치안정책연구소) 정상적으로 저장되어야 한다. jdbc.update("insert into organization (org_no, org_name, channel_slug) " + "values ('008', '경찰청_치안정책연구소', '008-2')"); assertThat(jdbc.queryForObject( "select count(*) from organization where org_no = '008'", Integer.class)) .isEqualTo(2); } }