package org.activiti.test.spring.boot;
import org.activiti.engine.IdentityService;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.spring.boot.DataSourceProcessEngineAutoConfiguration;
import org.activiti.spring.boot.SecurityAutoConfiguration;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.security.core.userdetails.UserDetailsService;
/**
* @author Josh Long
*/
public class SecurityAutoConfigurationTest {
private AnnotationConfigApplicationContext applicationContext;
@After
public void close() {
this.applicationContext.close();
}
@Test
public void userDetailsService() throws Throwable {
this.applicationContext = new AnnotationConfigApplicationContext();
this.applicationContext.register(SecurityConfiguration.class);
this.applicationContext.refresh();
UserDetailsService userDetailsService = this.applicationContext.getBean(UserDetailsService.class);
Assert.assertNotNull("the userDetailsService should not be null", userDetailsService);
Assert.assertEquals("there should only be 1 authority", 1, userDetailsService.loadUserByUsername("jlong").getAuthorities().size());
Assert.assertEquals("there should be 2 authorities", 2, userDetailsService.loadUserByUsername("jbarrez").getAuthorities().size());
}
@Configuration
@Import({DataSourceAutoConfiguration.class, DataSourceProcessEngineAutoConfiguration.DataSourceProcessEngineConfiguration.class,
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
SecurityAutoConfiguration.class})
public static class SecurityConfiguration {
@Autowired
private IdentityService identityService;
protected User user(String userName, String f, String l) {
User u = identityService.newUser(userName);
u.setFirstName(f);
u.setLastName(l);
u.setPassword("password");
identityService.saveUser(u);
return u;
}
protected Group group(String groupName) {
Group group = identityService.newGroup(groupName);
group.setName(groupName);
group.setType("security-role");
identityService.saveGroup(group);
return group;
}
@Bean
InitializingBean init(
final IdentityService identityService) {
return new InitializingBean() {
@Override
public void afterPropertiesSet() throws Exception {
// install groups & users
Group userGroup = group("user");
Group adminGroup = group("admin");
User joram = user("jbarrez", "Joram", "Barrez");
identityService.createMembership(joram.getId(), userGroup.getId());
identityService.createMembership(joram.getId(), adminGroup.getId());
User josh = user("jlong", "Josh", "Long");
identityService.createMembership(josh.getId(), userGroup.getId());
}
};
}
}
}