import org.sonar.api.database.DatabaseSession;
import org.sonar.api.database.model.ResourceModel;
import org.sonar.api.database.model.Snapshot;
-import org.sonar.api.resources.*;
+import org.sonar.api.resources.Library;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Qualifiers;
+import org.sonar.api.resources.Resource;
+import org.sonar.api.resources.ResourceUtils;
+import org.sonar.api.resources.Scopes;
import org.sonar.api.security.ResourcePermissions;
import org.sonar.api.utils.SonarException;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Query;
+
import java.util.Date;
import java.util.Iterator;
import java.util.List;
snapshot = session.save(snapshot);
session.commit();
- permissions.grantDefaultRoles(project);
+ if (!permissions.hasRoles(project)) {
+ permissions.grantDefaultRoles(project);
+ }
return snapshot;
}
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.notNullValue;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
public class DefaultResourcePersisterTest extends AbstractDbUnitTestCase {
ResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourcePermissions.class));
persister.saveProject(singleProject, null);
- checkTables("shouldSaveNewProject", new String[] {"build_date", "created_at"}, "projects", "snapshots");
+ checkTables("shouldSaveNewProject", new String[]{"build_date", "created_at"}, "projects", "snapshots");
// SONAR-3636 : created_at must be fed when inserting a new entry in the 'projects' table
ResourceModel model = getSession().getSingleResult(ResourceModel.class, "key", singleProject.getKey());
persister.saveProject(moduleB, multiModuleProject);
persister.saveProject(moduleB1, moduleB);
- checkTables("shouldSaveNewMultiModulesProject", new String[] {"build_date", "created_at"}, "projects", "snapshots");
+ checkTables("shouldSaveNewMultiModulesProject", new String[]{"build_date", "created_at"}, "projects", "snapshots");
}
@Test
persister.saveResource(singleProject, new JavaPackage("org.foo").setEffectiveKey("foo:org.foo"));
// check that the directory is attached to the project
- checkTables("shouldSaveNewDirectory", new String[] {"build_date", "created_at"}, "projects", "snapshots");
+ checkTables("shouldSaveNewDirectory", new String[]{"build_date", "created_at"}, "projects", "snapshots");
}
+
@Test
public void shouldSaveNewLibrary() {
setupData("shared");
persister.saveResource(singleProject, new Library("junit:junit", "4.8.2").setEffectiveKey("junit:junit"));// do nothing, already saved
persister.saveResource(singleProject, new Library("junit:junit", "3.2").setEffectiveKey("junit:junit"));
- checkTables("shouldSaveNewLibrary", new String[] {"build_date", "created_at"}, "projects", "snapshots");
+ checkTables("shouldSaveNewLibrary", new String[]{"build_date", "created_at"}, "projects", "snapshots");
}
@Test
singleProject.setDescription("new description");
persister.saveProject(singleProject, null);
- checkTables("shouldUpdateExistingResource", new String[] {"build_date", "created_at"}, "projects", "snapshots");
+ checkTables("shouldUpdateExistingResource", new String[]{"build_date", "created_at"}, "projects", "snapshots");
}
// SONAR-1700
ResourcePersister persister = new DefaultResourcePersister(getSession(), mock(ResourcePermissions.class));
persister.saveProject(singleProject, null);
- checkTables("shouldRemoveRootIndexIfResourceIsProject", new String[] {"build_date", "created_at"}, "projects", "snapshots");
+ checkTables("shouldRemoveRootIndexIfResourceIsProject", new String[]{"build_date", "created_at"}, "projects", "snapshots");
+ }
+
+ @Test
+ public void shouldGrantDefaultPermissionsIfNewProject() {
+ setupData("shared");
+
+ ResourcePermissions permissions = mock(ResourcePermissions.class);
+ when(permissions.hasRoles(singleProject)).thenReturn(false);
+
+ ResourcePersister persister = new DefaultResourcePersister(getSession(), permissions);
+ persister.saveProject(singleProject, null);
+
+ verify(permissions).grantDefaultRoles(singleProject);
+ }
+
+ @Test
+ public void shouldNotGrantDefaultPermissionsIfExistingProject() {
+ setupData("shared");
+
+ ResourcePermissions permissions = mock(ResourcePermissions.class);
+ when(permissions.hasRoles(singleProject)).thenReturn(true);
+
+ ResourcePersister persister = new DefaultResourcePersister(getSession(), permissions);
+ persister.saveProject(singleProject, null);
+
+ verify(permissions, never()).grantDefaultRoles(singleProject);
}
private static Project newProject(String key, String language) {