package com.allanditzel.dashboard.test.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Defines a list of 1 or more resources which reference DbUnit XML data sets. The data defined in each set is inserted * into the database before each individual test is run and rolled back after the test completes. This means that, at * the start of each test, the database contents are guaranteed to match <i>exactly</i> the unified contents of all of * the defined data sets. * <p/> * This annotation can be applied to a test class or a specific {@code @Test} method. Annotations applied at the * method level <i>supersede and replace</i> an annotation at the class level--they are not merged. An annotation at * the class level can be thought of as a default list of data sets applied if the test does not explicitly define any * data sets of its own. * <p/> * Spring's {@code Resource} abstraction is used to load the data sets, providing the full power of Spring's excellent * resource support code. This means values like "classpath:dbunit/tenant.xml" will be correctly resolved using Spring's * {@code ClassPathResource}. * * @author Bryan Turner * @since 1.0 */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD, ElementType.TYPE}) public @interface DataSet { /** * Retrieves a flag indicating whether the rows from the {@link #value() referenced data set(s)} should be deleted * after the test ends. * <p/> * By default, because tests operate within a transaction which will be rolled back, this is {@code false}. However, * for tests which do end up inserting and committing data, this annotation should be applied with this flag set to * {@code true} so that such rows will be cleaned up after the test. This ensures consistent state for other tests. * * @return {@code true} if rows from the specified data sets should be deleted; otherwise, {@code false} */ boolean delete() default false; /** * Retrieves a flag indicating whether the rows from the {@link #value() referenced data set(s)} should be inserted * before the test starts. * <p/> * By default, because it is assumed most annotated tests will be trying to apply a set of test data, this is * {@code true}. However, for tests which mutate the database in some other way, it may be useful to set this to * {@code false} and use the annotation to list data sets for {@link #delete() cleanup} after the test completes. * * @return {@code true} if rows from the specified data sets should be inserted; otherwise, {@code false} */ boolean insert() default true; /** * Defines 1 or more resources which reference DbUnit XML data sets. If no explicit value is set, the "default" * value is interpreted as {@code "classpath:dbunit/<TestClassSimpleName>.xml}. * * @return 1 or more data set XML resources */ String[] value() default "default"; }